mirror of
https://github.com/optim-enterprises-bv/control-pane.git
synced 2025-10-28 16:42:25 +00:00
6
node/node_modules/nodestalker/.travis.yml
generated
vendored
6
node/node_modules/nodestalker/.travis.yml
generated
vendored
@@ -1,3 +1,3 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "13.0"
|
||||
language: node_js
|
||||
node_js:
|
||||
- "13.0"
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
const bs=require('nodestalker');
|
||||
|
||||
var bsWatcher=function(ip,port,tube,callback)
|
||||
{
|
||||
this.ip=ip;
|
||||
this.port=port;
|
||||
this.tube=tube;
|
||||
this.callback=callback;
|
||||
this.client=null;
|
||||
this.connectionError=false;
|
||||
|
||||
this.connect();
|
||||
}
|
||||
bsWatcher.prototype.connect=function()
|
||||
{
|
||||
this.client=bs.Client('127.0.0.1:11300');
|
||||
this.client.addListener('connect', function() {
|
||||
this.connectionError=false;
|
||||
}.bind(this));
|
||||
this.client.addListener('end', function(err) {
|
||||
this.connectionError=true;
|
||||
setTimeout(this.connect.bind(this),3000);
|
||||
}.bind(this));
|
||||
this.client.addListener('close', function(err) {
|
||||
console.log('connection closed');
|
||||
}.bind(this));
|
||||
this.watch();
|
||||
}
|
||||
bsWatcher.prototype.watch=function()
|
||||
{
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.watch(this.tube).onSuccess(this.reserve.bind(this));
|
||||
}
|
||||
}
|
||||
bsWatcher.prototype.reserve=function()
|
||||
{
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.reserve().onSuccess(this.getJob.bind(this));
|
||||
}
|
||||
}
|
||||
bsWatcher.prototype.getJob=function(job)
|
||||
{
|
||||
var arr=JSON.parse(job.data);
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.deleteJob(job.id).onSuccess(this.reserve.bind(this));
|
||||
this.callback(arr,this.tube);
|
||||
}
|
||||
}
|
||||
|
||||
const bs=require('nodestalker');
|
||||
|
||||
var bsWatcher=function(ip,port,tube,callback)
|
||||
{
|
||||
this.ip=ip;
|
||||
this.port=port;
|
||||
this.tube=tube;
|
||||
this.callback=callback;
|
||||
this.client=null;
|
||||
this.connectionError=false;
|
||||
|
||||
this.connect();
|
||||
}
|
||||
bsWatcher.prototype.connect=function()
|
||||
{
|
||||
this.client=bs.Client('127.0.0.1:11300');
|
||||
this.client.addListener('connect', function() {
|
||||
this.connectionError=false;
|
||||
}.bind(this));
|
||||
this.client.addListener('end', function(err) {
|
||||
this.connectionError=true;
|
||||
setTimeout(this.connect.bind(this),3000);
|
||||
}.bind(this));
|
||||
this.client.addListener('close', function(err) {
|
||||
console.log('connection closed');
|
||||
}.bind(this));
|
||||
this.watch();
|
||||
}
|
||||
bsWatcher.prototype.watch=function()
|
||||
{
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.watch(this.tube).onSuccess(this.reserve.bind(this));
|
||||
}
|
||||
}
|
||||
bsWatcher.prototype.reserve=function()
|
||||
{
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.reserve().onSuccess(this.getJob.bind(this));
|
||||
}
|
||||
}
|
||||
bsWatcher.prototype.getJob=function(job)
|
||||
{
|
||||
var arr=JSON.parse(job.data);
|
||||
if(!this.connectionError)
|
||||
{
|
||||
this.client.deleteJob(job.id).onSuccess(this.reserve.bind(this));
|
||||
this.callback(arr,this.tube);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports=bsWatcher;
|
||||
696
node/wsClonos.js
696
node/wsClonos.js
@@ -1,349 +1,349 @@
|
||||
// IDE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> node.js <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// https://github.com/microsoft/vscode
|
||||
|
||||
const vars=require('./passwords.js');
|
||||
//global.vars=vars;
|
||||
|
||||
const WebSocket = require('ws');
|
||||
const fs = require('fs');
|
||||
const bsWatcher = require('./wsClonos.bsWatcher.js');
|
||||
|
||||
const wss = new WebSocket.Server({
|
||||
perMessageDeflate:false,
|
||||
port:8024
|
||||
});
|
||||
|
||||
const clients=[];
|
||||
const graphs_clients=[];
|
||||
const graphs_clients_bhyve={};
|
||||
const graphs_clients_jail={};
|
||||
const graphs_clients_system={};
|
||||
const graphs_history={};
|
||||
|
||||
const tubes=['racct-bhyve','racct-jail','racct-system'];
|
||||
for(n in tubes)
|
||||
{
|
||||
graphs_history[tubes[n]]=[];
|
||||
}
|
||||
|
||||
const main_graphs_keys=['name','time','pcpu','pmem'];
|
||||
|
||||
global.wss=wss;
|
||||
wss.on('connection', function connection(ws, req) {
|
||||
global.ws=ws;
|
||||
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('WSserver received: %s', message);
|
||||
});
|
||||
|
||||
ws.on('close',function wclose(){
|
||||
//console.log('ClonOS-WS close server connection!');
|
||||
var client=getClient(ws);
|
||||
if(client!==false)
|
||||
{
|
||||
var name=client.name;
|
||||
console.log('delete client: '+name);
|
||||
delete clients[name];
|
||||
if(typeof graphs_clients_bhyve[name]!='undefined') delete graphs_clients_bhyve[name];
|
||||
if(typeof graphs_clients_jail[name]!='undefined') delete graphs_clients_jail[name];
|
||||
if(typeof graphs_clients_system[name]!='undefined') delete graphs_clients_system[name];
|
||||
|
||||
//console.log('clients count: '+getClientsCount());
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('error',function werror(){
|
||||
console.log('ClonOS-WS <20> server connection error!');
|
||||
});
|
||||
|
||||
//ws.send(JSON.stringify(req));
|
||||
var url = req.url;
|
||||
//console.log(url);
|
||||
var pres=url.split('/');
|
||||
|
||||
//var path=url.substring(0,7);
|
||||
//if(path=='/graph/')
|
||||
if(pres[1]=='graph')
|
||||
{
|
||||
graphs_clients.push(pres[1]);
|
||||
var tube={'bhyvevms':'racct-bhyve','jailscontainers':'racct-jail','overview':'racct-system'}[pres[2]];
|
||||
var client=pres[3];
|
||||
clients[client]={};
|
||||
clients[client].name=client;
|
||||
clients[client].ws=ws;
|
||||
clients[client].first_start=true;
|
||||
clients[client].tube=tube;
|
||||
switch(tube)
|
||||
{
|
||||
case 'racct-bhyve':
|
||||
graphs_clients_bhyve[client]=ws;
|
||||
break;
|
||||
case 'racct-jail':
|
||||
graphs_clients_jail[client]=ws;
|
||||
break;
|
||||
case 'racct-system':
|
||||
graphs_clients_system[client]=ws;
|
||||
break;
|
||||
}
|
||||
console.log('add client: '+client);
|
||||
var a={};
|
||||
a.__all=graphs_history[tube];
|
||||
ws.send(JSON.stringify(a));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
getMetrics();
|
||||
|
||||
function getClient(ws)
|
||||
{
|
||||
for(n in clients)
|
||||
{
|
||||
if(clients[n].ws==ws) return clients[n];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function sendJailsMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,25);
|
||||
broadcast_graphs_jail(tube);
|
||||
}
|
||||
|
||||
function sendBhyvesMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,25);
|
||||
broadcast_graphs_bhyve(tube);
|
||||
}
|
||||
|
||||
function sendSummaryMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,90);
|
||||
broadcast_graphs_system(tube);
|
||||
}
|
||||
|
||||
|
||||
function getMetrics()
|
||||
{
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-jail',sendJailsMetrics);
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-bhyve',sendBhyvesMetrics);
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-system',sendSummaryMetrics);
|
||||
}
|
||||
|
||||
function broadcast_graphs_bhyve(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_bhyve)
|
||||
{
|
||||
var ws=graphs_clients_bhyve[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
function broadcast_graphs_jail(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_jail)
|
||||
{
|
||||
var ws=graphs_clients_jail[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
/*
|
||||
for(c in clients)
|
||||
{
|
||||
var cobj=clients[c];
|
||||
var ctube=cobj.tube;
|
||||
if(graphs_history[tube].length && tube==ctube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(n in data)
|
||||
{
|
||||
for(k in data[n])
|
||||
{
|
||||
if(main_graphs_keys.indexOf(k)==-1)
|
||||
delete data[n][k];
|
||||
}
|
||||
}
|
||||
|
||||
cobj.ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
function broadcast_graphs_system(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_system)
|
||||
{
|
||||
var ws=graphs_clients_system[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getClientsCount()
|
||||
{
|
||||
var count=0;
|
||||
for(n in clients)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function tick(path)
|
||||
{
|
||||
/*
|
||||
var tube=clients[path].tube;
|
||||
//console.log(tube);
|
||||
try{
|
||||
bs_client.watch(tube).onSuccess(function(data){
|
||||
bs_client.reserve().onSuccess(function(job){
|
||||
try{
|
||||
var arr=JSON.parse(job.data);
|
||||
bs_client.deleteJob(job.id);
|
||||
var buf=JSON.stringify(arr);
|
||||
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(buf);
|
||||
}
|
||||
}
|
||||
}catch(e){console.log(e.message);}
|
||||
});
|
||||
});
|
||||
}catch(e){
|
||||
console.log(e.message);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
return;
|
||||
var file='/tmp/cbsd_stats.json';
|
||||
if(fs.existsSync(file))
|
||||
{
|
||||
var buf=fs.readFileSync(file,'utf8');
|
||||
|
||||
if(clients[path]['first_start'])
|
||||
{
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
|
||||
var arr=JSON.parse(buf);
|
||||
var n,nl;
|
||||
for(n=0,nl=arr.length;n<nl;n++)
|
||||
{
|
||||
var unit=arr[n];
|
||||
this.path=path;
|
||||
this.name=unit.name;
|
||||
|
||||
var db_name=vars.cbsd_workdir+'/jails-system/'+name+'/racct.sqlite';
|
||||
let db = new sqlite3.Database(db_name);
|
||||
//let sql = "SELECT '"+this.name+"' as name,idx,memoryuse,pcpu FROM ( SELECT idx, memoryuse, pcpu FROM racct ORDER BY idx DESC LIMIT 50 ) ORDER BY idx ASC;";
|
||||
let sql = "SELECT '"+this.name+"' as name,idx,memoryuse,pcpu,pmem FROM racct where idx%5=0 ORDER BY idx DESC LIMIT 25;";
|
||||
|
||||
db.all(sql, [], (err, rows) => {
|
||||
if (err) {
|
||||
console.log(err.message);
|
||||
return;
|
||||
}
|
||||
|
||||
var a={};
|
||||
a.__all={};
|
||||
|
||||
for(rn in rows)
|
||||
{
|
||||
var r=rows[rn];
|
||||
var name=r.name;
|
||||
delete r.name;
|
||||
if(typeof a.__all[name]=='undefined') a.__all[name]=[];
|
||||
a.__all[name].push(r);
|
||||
}
|
||||
|
||||
clients[this.path]['ws'].send(JSON.stringify(a));
|
||||
clients[this.path]['first_start']=false;
|
||||
});
|
||||
db.close();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(buf);
|
||||
}
|
||||
}
|
||||
clients[path]['first_start']=false;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
//clients[path].send(JSON.stringify(wss.clients));
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(Math.floor(Math.random() * 100) + 1);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
var redis = require("redis")
|
||||
,subscriber = redis.createClient({'host':'127.0.0.1'});
|
||||
// ,publisher = redis.createClient();
|
||||
|
||||
subscriber.on("message", function(channel, message) {
|
||||
console.log("Message '" + message + "' on channel '" + channel + "' arrived!")
|
||||
broadcast(wss,message,channel);
|
||||
});
|
||||
|
||||
global.subscriber=subscriber;
|
||||
global.wss=wss;
|
||||
wss.on('connection', function connection(ws) {
|
||||
global.ws=ws;
|
||||
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('WSserver received: %s', message);
|
||||
broadcast(wss,message,path);
|
||||
});
|
||||
|
||||
ws.on('close',function wclose(){
|
||||
console.log('xdoc close server connection!');
|
||||
});
|
||||
|
||||
ws.on('error',function werror(){
|
||||
console.log('xdoc <20> server connection error!');
|
||||
});
|
||||
|
||||
var path = ws.upgradeReq.url;
|
||||
|
||||
subscriber.subscribe(path);
|
||||
});
|
||||
|
||||
function broadcast(server,msg,path) {
|
||||
server.clients.forEach(function (conn){
|
||||
if(conn.upgradeReq.url==path)
|
||||
conn.send(msg);
|
||||
})
|
||||
}
|
||||
|
||||
// IDE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> node.js <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// https://github.com/microsoft/vscode
|
||||
|
||||
const vars=require('./passwords.js');
|
||||
//global.vars=vars;
|
||||
|
||||
const WebSocket = require('ws');
|
||||
const fs = require('fs');
|
||||
const bsWatcher = require('./wsClonos.bsWatcher.js');
|
||||
|
||||
const wss = new WebSocket.Server({
|
||||
perMessageDeflate:false,
|
||||
port:8024
|
||||
});
|
||||
|
||||
const clients=[];
|
||||
const graphs_clients=[];
|
||||
const graphs_clients_bhyve={};
|
||||
const graphs_clients_jail={};
|
||||
const graphs_clients_system={};
|
||||
const graphs_history={};
|
||||
|
||||
const tubes=['racct-bhyve','racct-jail','racct-system'];
|
||||
for(n in tubes)
|
||||
{
|
||||
graphs_history[tubes[n]]=[];
|
||||
}
|
||||
|
||||
const main_graphs_keys=['name','time','pcpu','pmem'];
|
||||
|
||||
global.wss=wss;
|
||||
wss.on('connection', function connection(ws, req) {
|
||||
global.ws=ws;
|
||||
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('WSserver received: %s', message);
|
||||
});
|
||||
|
||||
ws.on('close',function wclose(){
|
||||
//console.log('ClonOS-WS close server connection!');
|
||||
var client=getClient(ws);
|
||||
if(client!==false)
|
||||
{
|
||||
var name=client.name;
|
||||
console.log('delete client: '+name);
|
||||
delete clients[name];
|
||||
if(typeof graphs_clients_bhyve[name]!='undefined') delete graphs_clients_bhyve[name];
|
||||
if(typeof graphs_clients_jail[name]!='undefined') delete graphs_clients_jail[name];
|
||||
if(typeof graphs_clients_system[name]!='undefined') delete graphs_clients_system[name];
|
||||
|
||||
//console.log('clients count: '+getClientsCount());
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('error',function werror(){
|
||||
console.log('ClonOS-WS <20> server connection error!');
|
||||
});
|
||||
|
||||
//ws.send(JSON.stringify(req));
|
||||
var url = req.url;
|
||||
//console.log(url);
|
||||
var pres=url.split('/');
|
||||
|
||||
//var path=url.substring(0,7);
|
||||
//if(path=='/graph/')
|
||||
if(pres[1]=='graph')
|
||||
{
|
||||
graphs_clients.push(pres[1]);
|
||||
var tube={'bhyvevms':'racct-bhyve','jailscontainers':'racct-jail','overview':'racct-system'}[pres[2]];
|
||||
var client=pres[3];
|
||||
clients[client]={};
|
||||
clients[client].name=client;
|
||||
clients[client].ws=ws;
|
||||
clients[client].first_start=true;
|
||||
clients[client].tube=tube;
|
||||
switch(tube)
|
||||
{
|
||||
case 'racct-bhyve':
|
||||
graphs_clients_bhyve[client]=ws;
|
||||
break;
|
||||
case 'racct-jail':
|
||||
graphs_clients_jail[client]=ws;
|
||||
break;
|
||||
case 'racct-system':
|
||||
graphs_clients_system[client]=ws;
|
||||
break;
|
||||
}
|
||||
console.log('add client: '+client);
|
||||
var a={};
|
||||
a.__all=graphs_history[tube];
|
||||
ws.send(JSON.stringify(a));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
getMetrics();
|
||||
|
||||
function getClient(ws)
|
||||
{
|
||||
for(n in clients)
|
||||
{
|
||||
if(clients[n].ws==ws) return clients[n];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function sendJailsMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,25);
|
||||
broadcast_graphs_jail(tube);
|
||||
}
|
||||
|
||||
function sendBhyvesMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,25);
|
||||
broadcast_graphs_bhyve(tube);
|
||||
}
|
||||
|
||||
function sendSummaryMetrics(data,tube)
|
||||
{
|
||||
var tube=data.tube;
|
||||
var data=data.data;
|
||||
graphs_history[tube].unshift(data);
|
||||
graphs_history[tube]=graphs_history[tube].splice(0,90);
|
||||
broadcast_graphs_system(tube);
|
||||
}
|
||||
|
||||
|
||||
function getMetrics()
|
||||
{
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-jail',sendJailsMetrics);
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-bhyve',sendBhyvesMetrics);
|
||||
new bsWatcher(vars.bs_ip,vars.bs_port,'racct-system',sendSummaryMetrics);
|
||||
}
|
||||
|
||||
function broadcast_graphs_bhyve(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_bhyve)
|
||||
{
|
||||
var ws=graphs_clients_bhyve[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
function broadcast_graphs_jail(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_jail)
|
||||
{
|
||||
var ws=graphs_clients_jail[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
/*
|
||||
for(c in clients)
|
||||
{
|
||||
var cobj=clients[c];
|
||||
var ctube=cobj.tube;
|
||||
if(graphs_history[tube].length && tube==ctube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(n in data)
|
||||
{
|
||||
for(k in data[n])
|
||||
{
|
||||
if(main_graphs_keys.indexOf(k)==-1)
|
||||
delete data[n][k];
|
||||
}
|
||||
}
|
||||
|
||||
cobj.ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
function broadcast_graphs_system(tube)
|
||||
{
|
||||
var data=graphs_history[tube][0];
|
||||
|
||||
for(c in graphs_clients_system)
|
||||
{
|
||||
var ws=graphs_clients_system[c];
|
||||
ws.send(JSON.stringify(data));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getClientsCount()
|
||||
{
|
||||
var count=0;
|
||||
for(n in clients)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function tick(path)
|
||||
{
|
||||
/*
|
||||
var tube=clients[path].tube;
|
||||
//console.log(tube);
|
||||
try{
|
||||
bs_client.watch(tube).onSuccess(function(data){
|
||||
bs_client.reserve().onSuccess(function(job){
|
||||
try{
|
||||
var arr=JSON.parse(job.data);
|
||||
bs_client.deleteJob(job.id);
|
||||
var buf=JSON.stringify(arr);
|
||||
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(buf);
|
||||
}
|
||||
}
|
||||
}catch(e){console.log(e.message);}
|
||||
});
|
||||
});
|
||||
}catch(e){
|
||||
console.log(e.message);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
return;
|
||||
var file='/tmp/cbsd_stats.json';
|
||||
if(fs.existsSync(file))
|
||||
{
|
||||
var buf=fs.readFileSync(file,'utf8');
|
||||
|
||||
if(clients[path]['first_start'])
|
||||
{
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
|
||||
var arr=JSON.parse(buf);
|
||||
var n,nl;
|
||||
for(n=0,nl=arr.length;n<nl;n++)
|
||||
{
|
||||
var unit=arr[n];
|
||||
this.path=path;
|
||||
this.name=unit.name;
|
||||
|
||||
var db_name=vars.cbsd_workdir+'/jails-system/'+name+'/racct.sqlite';
|
||||
let db = new sqlite3.Database(db_name);
|
||||
//let sql = "SELECT '"+this.name+"' as name,idx,memoryuse,pcpu FROM ( SELECT idx, memoryuse, pcpu FROM racct ORDER BY idx DESC LIMIT 50 ) ORDER BY idx ASC;";
|
||||
let sql = "SELECT '"+this.name+"' as name,idx,memoryuse,pcpu,pmem FROM racct where idx%5=0 ORDER BY idx DESC LIMIT 25;";
|
||||
|
||||
db.all(sql, [], (err, rows) => {
|
||||
if (err) {
|
||||
console.log(err.message);
|
||||
return;
|
||||
}
|
||||
|
||||
var a={};
|
||||
a.__all={};
|
||||
|
||||
for(rn in rows)
|
||||
{
|
||||
var r=rows[rn];
|
||||
var name=r.name;
|
||||
delete r.name;
|
||||
if(typeof a.__all[name]=='undefined') a.__all[name]=[];
|
||||
a.__all[name].push(r);
|
||||
}
|
||||
|
||||
clients[this.path]['ws'].send(JSON.stringify(a));
|
||||
clients[this.path]['first_start']=false;
|
||||
});
|
||||
db.close();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(buf);
|
||||
}
|
||||
}
|
||||
clients[path]['first_start']=false;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
if(clients[path]!=null)
|
||||
{
|
||||
//clients[path].send(JSON.stringify(wss.clients));
|
||||
var client=clients[path]['ws'];
|
||||
if(client.readyState===WebSocket.OPEN)
|
||||
{
|
||||
client.send(Math.floor(Math.random() * 100) + 1);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
var redis = require("redis")
|
||||
,subscriber = redis.createClient({'host':'127.0.0.1'});
|
||||
// ,publisher = redis.createClient();
|
||||
|
||||
subscriber.on("message", function(channel, message) {
|
||||
console.log("Message '" + message + "' on channel '" + channel + "' arrived!")
|
||||
broadcast(wss,message,channel);
|
||||
});
|
||||
|
||||
global.subscriber=subscriber;
|
||||
global.wss=wss;
|
||||
wss.on('connection', function connection(ws) {
|
||||
global.ws=ws;
|
||||
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('WSserver received: %s', message);
|
||||
broadcast(wss,message,path);
|
||||
});
|
||||
|
||||
ws.on('close',function wclose(){
|
||||
console.log('xdoc close server connection!');
|
||||
});
|
||||
|
||||
ws.on('error',function werror(){
|
||||
console.log('xdoc <20> server connection error!');
|
||||
});
|
||||
|
||||
var path = ws.upgradeReq.url;
|
||||
|
||||
subscriber.subscribe(path);
|
||||
});
|
||||
|
||||
function broadcast(server,msg,path) {
|
||||
server.clients.forEach(function (conn){
|
||||
if(conn.upgradeReq.url==path)
|
||||
conn.send(msg);
|
||||
})
|
||||
}
|
||||
|
||||
*/
|
||||
5902
php/clonos.php
5902
php/clonos.php
File diff suppressed because it is too large
Load Diff
628
php/config.php
628
php/config.php
@@ -1,192 +1,192 @@
|
||||
<?php
|
||||
|
||||
require_once("cbsd.php");
|
||||
|
||||
class Config
|
||||
{
|
||||
<?php
|
||||
|
||||
require_once("cbsd.php");
|
||||
|
||||
class Config
|
||||
{
|
||||
private $_workdir='';
|
||||
|
||||
/* Список языков, используемых в проекте */
|
||||
public static $languages=array(
|
||||
'en'=>'English',
|
||||
'ru'=>'Russian',
|
||||
'es'=>'Spanish',
|
||||
);
|
||||
|
||||
public $os_types_names=array(
|
||||
'netbsd'=>'NetBSD',
|
||||
'dflybsd'=>'DragonflyBSD',
|
||||
'linux'=>'Linux',
|
||||
'other'=>'Other',
|
||||
'freebsd'=>'FreeBSD',
|
||||
'openbsd'=>'OpenBSD',
|
||||
'windows'=>'Windows',
|
||||
);
|
||||
|
||||
public static $other_titles=array(
|
||||
'settings'=>'CBSD Settings',
|
||||
'users'=>'CBSD Users',
|
||||
);
|
||||
|
||||
/* Меню проекта */
|
||||
/* Так же можно использовать подменю (в menu.php есть пример) */
|
||||
public static $menu=array(
|
||||
'overview'=>array(
|
||||
'name'=>'Overview',
|
||||
'title'=>'Summary Overview', // заголовки лучше делать более полными, чем просто повторение пункта меню
|
||||
'icon'=>'icon-chart-bar',
|
||||
),
|
||||
'jailscontainers'=>array(
|
||||
'name'=>'Jails containers',
|
||||
'title'=>'Jails containers control panel',
|
||||
'icon'=>'icon-server',
|
||||
),
|
||||
|
||||
'instance_jail'=>array(
|
||||
'name'=>'Template for jail',
|
||||
'title'=>'Helpers and wizard for containers',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'bhyvevms'=>array(
|
||||
'name'=>'Bhyve VMs',
|
||||
'title'=>'Virtual machine control panel',
|
||||
'icon'=>'icon-th-list',
|
||||
),
|
||||
/*
|
||||
'nodes'=>array(
|
||||
'name'=>'Nodes',
|
||||
'title'=>'Nodes control panel',
|
||||
'icon'=>'icon-buffer',
|
||||
),
|
||||
*/
|
||||
'vm_packages'=>array(
|
||||
'name'=>'VM Packages',
|
||||
'title'=>'Manage VM Packages group',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'k8s'=>array(
|
||||
'name'=>'K8S clusters',
|
||||
'title'=>'Manage K8S clusters',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'vpnet'=>array(
|
||||
'name'=>'Virtual Private Network',
|
||||
'title'=>'Manage for virtual private networks',
|
||||
'icon'=>'icon-plug',
|
||||
),
|
||||
|
||||
'authkey'=>array(
|
||||
'name'=>'Authkeys',
|
||||
'title'=>'Manage for SSH auth key',
|
||||
'icon'=>'icon-key',
|
||||
),
|
||||
|
||||
'media'=>array(
|
||||
'name'=>'Storage Media',
|
||||
'title'=>'Virtual Media Manager',
|
||||
'icon'=>'icon-inbox',
|
||||
),
|
||||
|
||||
'imported'=>array(
|
||||
'name'=>'Imported images',
|
||||
'title'=>'Imported images',
|
||||
'icon'=>'icon-upload',
|
||||
),
|
||||
/*
|
||||
'repo'=>array(
|
||||
'name'=>'Repository',
|
||||
'title'=>'Remote repository',
|
||||
'icon'=>'icon-globe',
|
||||
),
|
||||
*/
|
||||
'bases'=>array(
|
||||
'name'=>'FreeBSD Bases',
|
||||
'title'=>'FreeBSD bases manager',
|
||||
'icon'=>'icon-database',
|
||||
),
|
||||
|
||||
'sources'=>array(
|
||||
'name'=>'FreeBSD Sources',
|
||||
'title'=>'FreeBSD sources manager',
|
||||
'icon'=>'icon-edit',
|
||||
),
|
||||
/*
|
||||
'jail_marketplace'=>array(
|
||||
'name'=>'Jail Marketplace',
|
||||
'title'=>'Public remote containers marketplace',
|
||||
'icon'=>'icon-flag',
|
||||
),
|
||||
*//*
|
||||
'bhyve_marketplace'=>array(
|
||||
'name'=>'Bhyve Marketplace',
|
||||
'title'=>'Public remote virtual machine marketplace',
|
||||
'icon'=>'icon-flag-checkered',
|
||||
),
|
||||
*/
|
||||
'tasklog'=>array(
|
||||
'name'=>'TaskLog',
|
||||
'title'=>'System task log',
|
||||
'icon'=>'icon-list-alt',
|
||||
),
|
||||
|
||||
'sqlite'=>array(
|
||||
'name'=>'SQLite admin',
|
||||
'title'=>'SQLite admin interface',
|
||||
'icon'=>'icon-wpforms',
|
||||
)
|
||||
);
|
||||
|
||||
public $os_types=array(
|
||||
array(
|
||||
'os'=>'DragonflyBSD',
|
||||
'items'=>array(
|
||||
array('name'=>'DragonflyBSD 4','type'=>'dflybsd',
|
||||
'profile'=>'x86-4','obtain'=>false),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'FreeBSD',
|
||||
'items'=>array(
|
||||
array('name'=>'FreeBSD 11.0-RELEASE','type'=>'freebsd',
|
||||
'profile'=>'FreeBSD-x64-11.0','obtain'=>true),
|
||||
array('name'=>'FreeBSD pfSense 2.4.0-DEVELOP','type'=>'freebsd',
|
||||
'profile'=>'pfSense-2-LATEST-amd64','obtain'=>false),
|
||||
array('name'=>'FreeBSD OPNsense-16.7','type'=>'freebsd',
|
||||
'profile'=>'OPNsense-16-RELEASE-amd64','obtain'=>false),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'Linux',
|
||||
'items'=>array(
|
||||
array('name'=>'Linux Arch 2016','type'=>'linux',
|
||||
'profile'=>'ArchLinux-x86-2016','obtain'=>false),
|
||||
array('name'=>'Linux CentOS 7','type'=>'linux',
|
||||
'profile'=>'CentOS-7-x86_64','obtain'=>false),
|
||||
array('name'=>'Linux Debian 8','type'=>'linux',
|
||||
'profile'=>'Debian-x86-8','obtain'=>false),
|
||||
array('name'=>'Linux Open Suse 42','type'=>'linux',
|
||||
'profile'=>'opensuse-x86-42','obtain'=>false),
|
||||
array('name'=>'Linux Ubuntu 16.04','type'=>'linux',
|
||||
'profile'=>'ubuntuserver-x86-16.04','obtain'=>true),
|
||||
array('name'=>'Linux Ubuntu 17.04','type'=>'linux',
|
||||
'profile'=>'ubuntuserver-x86-17.04','obtain'=>true),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'Windows',
|
||||
'items'=>array(
|
||||
array('name'=>'Windows 10','type'=>'windows',
|
||||
'profile'=>'10_86x_64x','obtain'=>false),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
public $os_types_obtain=array();
|
||||
public $os_interfaces=array();
|
||||
|
||||
/* Список языков, используемых в проекте */
|
||||
public static $languages=array(
|
||||
'en'=>'English',
|
||||
'ru'=>'Russian',
|
||||
'es'=>'Spanish',
|
||||
);
|
||||
|
||||
public $os_types_names=array(
|
||||
'netbsd'=>'NetBSD',
|
||||
'dflybsd'=>'DragonflyBSD',
|
||||
'linux'=>'Linux',
|
||||
'other'=>'Other',
|
||||
'freebsd'=>'FreeBSD',
|
||||
'openbsd'=>'OpenBSD',
|
||||
'windows'=>'Windows',
|
||||
);
|
||||
|
||||
public static $other_titles=array(
|
||||
'settings'=>'CBSD Settings',
|
||||
'users'=>'CBSD Users',
|
||||
);
|
||||
|
||||
/* Меню проекта */
|
||||
/* Так же можно использовать подменю (в menu.php есть пример) */
|
||||
public static $menu=array(
|
||||
'overview'=>array(
|
||||
'name'=>'Overview',
|
||||
'title'=>'Summary Overview', // заголовки лучше делать более полными, чем просто повторение пункта меню
|
||||
'icon'=>'icon-chart-bar',
|
||||
),
|
||||
'jailscontainers'=>array(
|
||||
'name'=>'Jails containers',
|
||||
'title'=>'Jails containers control panel',
|
||||
'icon'=>'icon-server',
|
||||
),
|
||||
|
||||
'instance_jail'=>array(
|
||||
'name'=>'Template for jail',
|
||||
'title'=>'Helpers and wizard for containers',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'bhyvevms'=>array(
|
||||
'name'=>'Bhyve VMs',
|
||||
'title'=>'Virtual machine control panel',
|
||||
'icon'=>'icon-th-list',
|
||||
),
|
||||
/*
|
||||
'nodes'=>array(
|
||||
'name'=>'Nodes',
|
||||
'title'=>'Nodes control panel',
|
||||
'icon'=>'icon-buffer',
|
||||
),
|
||||
*/
|
||||
'vm_packages'=>array(
|
||||
'name'=>'VM Packages',
|
||||
'title'=>'Manage VM Packages group',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'k8s'=>array(
|
||||
'name'=>'K8S clusters',
|
||||
'title'=>'Manage K8S clusters',
|
||||
'icon'=>'icon-cubes',
|
||||
),
|
||||
|
||||
'vpnet'=>array(
|
||||
'name'=>'Virtual Private Network',
|
||||
'title'=>'Manage for virtual private networks',
|
||||
'icon'=>'icon-plug',
|
||||
),
|
||||
|
||||
'authkey'=>array(
|
||||
'name'=>'Authkeys',
|
||||
'title'=>'Manage for SSH auth key',
|
||||
'icon'=>'icon-key',
|
||||
),
|
||||
|
||||
'media'=>array(
|
||||
'name'=>'Storage Media',
|
||||
'title'=>'Virtual Media Manager',
|
||||
'icon'=>'icon-inbox',
|
||||
),
|
||||
|
||||
'imported'=>array(
|
||||
'name'=>'Imported images',
|
||||
'title'=>'Imported images',
|
||||
'icon'=>'icon-upload',
|
||||
),
|
||||
/*
|
||||
'repo'=>array(
|
||||
'name'=>'Repository',
|
||||
'title'=>'Remote repository',
|
||||
'icon'=>'icon-globe',
|
||||
),
|
||||
*/
|
||||
'bases'=>array(
|
||||
'name'=>'FreeBSD Bases',
|
||||
'title'=>'FreeBSD bases manager',
|
||||
'icon'=>'icon-database',
|
||||
),
|
||||
|
||||
'sources'=>array(
|
||||
'name'=>'FreeBSD Sources',
|
||||
'title'=>'FreeBSD sources manager',
|
||||
'icon'=>'icon-edit',
|
||||
),
|
||||
/*
|
||||
'jail_marketplace'=>array(
|
||||
'name'=>'Jail Marketplace',
|
||||
'title'=>'Public remote containers marketplace',
|
||||
'icon'=>'icon-flag',
|
||||
),
|
||||
*//*
|
||||
'bhyve_marketplace'=>array(
|
||||
'name'=>'Bhyve Marketplace',
|
||||
'title'=>'Public remote virtual machine marketplace',
|
||||
'icon'=>'icon-flag-checkered',
|
||||
),
|
||||
*/
|
||||
'tasklog'=>array(
|
||||
'name'=>'TaskLog',
|
||||
'title'=>'System task log',
|
||||
'icon'=>'icon-list-alt',
|
||||
),
|
||||
|
||||
'sqlite'=>array(
|
||||
'name'=>'SQLite admin',
|
||||
'title'=>'SQLite admin interface',
|
||||
'icon'=>'icon-wpforms',
|
||||
)
|
||||
);
|
||||
|
||||
public $os_types=array(
|
||||
array(
|
||||
'os'=>'DragonflyBSD',
|
||||
'items'=>array(
|
||||
array('name'=>'DragonflyBSD 4','type'=>'dflybsd',
|
||||
'profile'=>'x86-4','obtain'=>false),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'FreeBSD',
|
||||
'items'=>array(
|
||||
array('name'=>'FreeBSD 11.0-RELEASE','type'=>'freebsd',
|
||||
'profile'=>'FreeBSD-x64-11.0','obtain'=>true),
|
||||
array('name'=>'FreeBSD pfSense 2.4.0-DEVELOP','type'=>'freebsd',
|
||||
'profile'=>'pfSense-2-LATEST-amd64','obtain'=>false),
|
||||
array('name'=>'FreeBSD OPNsense-16.7','type'=>'freebsd',
|
||||
'profile'=>'OPNsense-16-RELEASE-amd64','obtain'=>false),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'Linux',
|
||||
'items'=>array(
|
||||
array('name'=>'Linux Arch 2016','type'=>'linux',
|
||||
'profile'=>'ArchLinux-x86-2016','obtain'=>false),
|
||||
array('name'=>'Linux CentOS 7','type'=>'linux',
|
||||
'profile'=>'CentOS-7-x86_64','obtain'=>false),
|
||||
array('name'=>'Linux Debian 8','type'=>'linux',
|
||||
'profile'=>'Debian-x86-8','obtain'=>false),
|
||||
array('name'=>'Linux Open Suse 42','type'=>'linux',
|
||||
'profile'=>'opensuse-x86-42','obtain'=>false),
|
||||
array('name'=>'Linux Ubuntu 16.04','type'=>'linux',
|
||||
'profile'=>'ubuntuserver-x86-16.04','obtain'=>true),
|
||||
array('name'=>'Linux Ubuntu 17.04','type'=>'linux',
|
||||
'profile'=>'ubuntuserver-x86-17.04','obtain'=>true),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'os'=>'Windows',
|
||||
'items'=>array(
|
||||
array('name'=>'Windows 10','type'=>'windows',
|
||||
'profile'=>'10_86x_64x','obtain'=>false),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
public $os_types_obtain=array();
|
||||
public $os_interfaces=array();
|
||||
|
||||
function __construct(){
|
||||
|
||||
$this->_workdir=getenv('WORKDIR');
|
||||
@@ -231,14 +231,14 @@ class Config
|
||||
// vm profile (ISO)
|
||||
if ($vm_profile_list_file_size > 0 ) {
|
||||
Utils::clonos_syslog("config.php: (cached) found vm_profile cache file/size: $vm_profile_list_file exist/$vm_profile_list_file_size");
|
||||
$res['message']=file_get_contents($vm_profile_list_file);
|
||||
$res['message']=file_get_contents($vm_profile_list_file);
|
||||
//echo $res['message'];exit;
|
||||
$this->os_types=$this->create_bhyve_profiles($res);
|
||||
} else {
|
||||
Utils::clonos_syslog("config.php: vm_profile cache file not found: $vm_profile_list_file");
|
||||
$res=CBSD::run('get_bhyve_profiles src=vm clonos=1', array());
|
||||
if($res['retval']==0){
|
||||
$this->os_types=$this->create_bhyve_profiles($res);
|
||||
$this->os_types=$this->create_bhyve_profiles($res);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,129 +267,129 @@ class Config
|
||||
}
|
||||
}
|
||||
|
||||
function create_bhyve_profiles($info){
|
||||
$os_names = array();
|
||||
$res=json_decode($info['message'],true);
|
||||
if(!is_null($res) && $res != false){
|
||||
foreach($res as $item){
|
||||
$os_name=$this->os_types_names[$item['type']];
|
||||
if(isset($os_names[$os_name])){
|
||||
$os_names[$os_name]['items'][]=$item;
|
||||
}else{
|
||||
$os_names[$os_name]=array('os'=>$os_name,'items'=>array($item));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $os_names;
|
||||
}
|
||||
|
||||
function create_interfaces($info){
|
||||
$res=json_decode($info['message'],true);
|
||||
if(!is_null($res) && $res != false){
|
||||
return $res['interfaces'];
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
function os_types_create($obtain='new'){
|
||||
//print_r($this->os_types);exit;
|
||||
$obtain=($obtain=='obtain');
|
||||
if($obtain)
|
||||
$info=$this->os_types_obtain;
|
||||
else
|
||||
$info=$this->os_types;
|
||||
|
||||
$html='';
|
||||
foreach($info as $num1=>$os)
|
||||
{
|
||||
$obtain_count=0;
|
||||
$html_tmp=' <optgroup label="'.$os['os'].'">'.PHP_EOL;
|
||||
$items=$os['items'];
|
||||
foreach($items as $num2=>$item)
|
||||
{
|
||||
//if(!isset($item['obtain'])) $item['obtain']=false;
|
||||
//if(!$obtain || $item['obtain'])
|
||||
$html_tmp.=' <option value="'.$num1.'.'.$num2.'">'.$item['name'].'</option>'.PHP_EOL;
|
||||
//if($item['obtain']) $obtain_count++;
|
||||
}
|
||||
$html_tmp.=' </optgroup>'.PHP_EOL;
|
||||
|
||||
//if(!$obtain || $obtain_count>0) $html.=$html_tmp;
|
||||
$html.=$html_tmp;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
function os_types_getOne($name='first',$obtain='')
|
||||
{
|
||||
$res=array();
|
||||
if($obtain=='obtain')
|
||||
{
|
||||
$info=$this->os_types_obtain;
|
||||
}else{
|
||||
$info=$this->os_types;
|
||||
}
|
||||
|
||||
if($name=='first')
|
||||
{
|
||||
$res=current($info)['items'][0];
|
||||
}else{
|
||||
foreach($info as $type)
|
||||
{
|
||||
foreach($type['items'] as $arr)
|
||||
{
|
||||
if($arr['name']==$name)
|
||||
{
|
||||
$res=$arr;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
function authkeys_list(){
|
||||
$db=new Db('base','authkey');
|
||||
$res=$db->select('SELECT idx,name FROM authkey;', array());
|
||||
|
||||
$html='';
|
||||
if(!empty($res))foreach($res as $item){
|
||||
$html.=' <option value="'.$item['idx'].'">'.$item['name'].'</option>'.PHP_EOL;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
||||
function vm_packages_list(){
|
||||
$db=new Db('base','local');
|
||||
$res=$db->select('select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc;', array());
|
||||
|
||||
$html='<option value="0"></option>';
|
||||
$min=0;
|
||||
$min_id=0;
|
||||
if(!empty($res))foreach($res as $item){
|
||||
$cpu=$item['pkg_vm_cpus'];
|
||||
$ram=trim($item['pkg_vm_ram']);
|
||||
$ed=substr($ram,-1);
|
||||
if($ed=='b'){
|
||||
$ed=substr($ram,-2,1).'b';
|
||||
$ram=substr($ram,0,-2);
|
||||
}
|
||||
if($ed=='m' || $ed=='g') $ed.='b';
|
||||
if($ed=='mb'){
|
||||
$ram1=substr($ram,0,-1);
|
||||
$ram1=$ram1/1000000;
|
||||
}
|
||||
if($ed=='gb'){
|
||||
$ram1=substr($ram,0,-1);
|
||||
$ram1=$ram1/1000;
|
||||
}
|
||||
$res1=$cpu+$ram1;
|
||||
if($min>$res1 || $min==0) {$min=$res1;$min_id=$item['id'];}
|
||||
|
||||
$name='<strong>'.$item['name'].'</strong> (cpu: '.$cpu.'; ram: '.$ram.'; hdd: '.$item['pkg_vm_disk'].')';
|
||||
$html.=' <option value="'.$item['id'].'" title="'.$item['description'].'">'.$name.'</option>'.PHP_EOL;
|
||||
}
|
||||
return array('html'=>$html,'min_id'=>$min_id);
|
||||
}
|
||||
function create_bhyve_profiles($info){
|
||||
$os_names = array();
|
||||
$res=json_decode($info['message'],true);
|
||||
if(!is_null($res) && $res != false){
|
||||
foreach($res as $item){
|
||||
$os_name=$this->os_types_names[$item['type']];
|
||||
if(isset($os_names[$os_name])){
|
||||
$os_names[$os_name]['items'][]=$item;
|
||||
}else{
|
||||
$os_names[$os_name]=array('os'=>$os_name,'items'=>array($item));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $os_names;
|
||||
}
|
||||
|
||||
function create_interfaces($info){
|
||||
$res=json_decode($info['message'],true);
|
||||
if(!is_null($res) && $res != false){
|
||||
return $res['interfaces'];
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
function os_types_create($obtain='new'){
|
||||
//print_r($this->os_types);exit;
|
||||
$obtain=($obtain=='obtain');
|
||||
if($obtain)
|
||||
$info=$this->os_types_obtain;
|
||||
else
|
||||
$info=$this->os_types;
|
||||
|
||||
$html='';
|
||||
foreach($info as $num1=>$os)
|
||||
{
|
||||
$obtain_count=0;
|
||||
$html_tmp=' <optgroup label="'.$os['os'].'">'.PHP_EOL;
|
||||
$items=$os['items'];
|
||||
foreach($items as $num2=>$item)
|
||||
{
|
||||
//if(!isset($item['obtain'])) $item['obtain']=false;
|
||||
//if(!$obtain || $item['obtain'])
|
||||
$html_tmp.=' <option value="'.$num1.'.'.$num2.'">'.$item['name'].'</option>'.PHP_EOL;
|
||||
//if($item['obtain']) $obtain_count++;
|
||||
}
|
||||
$html_tmp.=' </optgroup>'.PHP_EOL;
|
||||
|
||||
//if(!$obtain || $obtain_count>0) $html.=$html_tmp;
|
||||
$html.=$html_tmp;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
function os_types_getOne($name='first',$obtain='')
|
||||
{
|
||||
$res=array();
|
||||
if($obtain=='obtain')
|
||||
{
|
||||
$info=$this->os_types_obtain;
|
||||
}else{
|
||||
$info=$this->os_types;
|
||||
}
|
||||
|
||||
if($name=='first')
|
||||
{
|
||||
$res=current($info)['items'][0];
|
||||
}else{
|
||||
foreach($info as $type)
|
||||
{
|
||||
foreach($type['items'] as $arr)
|
||||
{
|
||||
if($arr['name']==$name)
|
||||
{
|
||||
$res=$arr;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
function authkeys_list(){
|
||||
$db=new Db('base','authkey');
|
||||
$res=$db->select('SELECT idx,name FROM authkey;', array());
|
||||
|
||||
$html='';
|
||||
if(!empty($res))foreach($res as $item){
|
||||
$html.=' <option value="'.$item['idx'].'">'.$item['name'].'</option>'.PHP_EOL;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
||||
function vm_packages_list(){
|
||||
$db=new Db('base','local');
|
||||
$res=$db->select('select id,name,description,pkg_vm_ram,pkg_vm_disk,pkg_vm_cpus,owner from vmpackages order by name asc;', array());
|
||||
|
||||
$html='<option value="0"></option>';
|
||||
$min=0;
|
||||
$min_id=0;
|
||||
if(!empty($res))foreach($res as $item){
|
||||
$cpu=$item['pkg_vm_cpus'];
|
||||
$ram=trim($item['pkg_vm_ram']);
|
||||
$ed=substr($ram,-1);
|
||||
if($ed=='b'){
|
||||
$ed=substr($ram,-2,1).'b';
|
||||
$ram=substr($ram,0,-2);
|
||||
}
|
||||
if($ed=='m' || $ed=='g') $ed.='b';
|
||||
if($ed=='mb'){
|
||||
$ram1=substr($ram,0,-1);
|
||||
$ram1=$ram1/1000000;
|
||||
}
|
||||
if($ed=='gb'){
|
||||
$ram1=substr($ram,0,-1);
|
||||
$ram1=$ram1/1000;
|
||||
}
|
||||
$res1=$cpu+$ram1;
|
||||
if($min>$res1 || $min==0) {$min=$res1;$min_id=$item['id'];}
|
||||
|
||||
$name='<strong>'.$item['name'].'</strong> (cpu: '.$cpu.'; ram: '.$ram.'; hdd: '.$item['pkg_vm_disk'].')';
|
||||
$html.=' <option value="'.$item['id'].'" title="'.$item['description'].'">'.$name.'</option>'.PHP_EOL;
|
||||
}
|
||||
return array('html'=>$html,'min_id'=>$min_id);
|
||||
}
|
||||
}
|
||||
440
php/db.php
440
php/db.php
@@ -1,220 +1,220 @@
|
||||
<?php
|
||||
|
||||
class Db {
|
||||
private $_pdo=null;
|
||||
private $_workdir='';
|
||||
private $_filename='';
|
||||
public $error=false;
|
||||
public $error_message='';
|
||||
|
||||
/*
|
||||
$place = base (This is a basic set of databases: local, nodes, etc)
|
||||
$place = file (specify a specific database for the full pathth)
|
||||
*/
|
||||
function __construct($place='base', $database='', $connect = null){
|
||||
|
||||
if (is_null($connect)){
|
||||
list($file_name, $connect) = $this->prep_connect($place, $database);
|
||||
if(is_null($file_name) || !file_exists($file_name)){
|
||||
$this->error=true;
|
||||
$this->error_message='DB file name not set or not found!';
|
||||
return;
|
||||
} else {
|
||||
$this->_filename=$file_name;
|
||||
}
|
||||
|
||||
if(is_null($connect)) {
|
||||
$this->error=true;
|
||||
$this->error_message='DB file name not set or invalid';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$this->_pdo = new PDO($connect);
|
||||
$this->_pdo->setAttribute(PDO::ATTR_TIMEOUT,5000);
|
||||
}catch (PDOException $e){
|
||||
$this->error=true;
|
||||
$this->error_message=$e->getMessage(); //'DB Error';
|
||||
}
|
||||
}
|
||||
|
||||
private function prep_connect($place, $database){
|
||||
|
||||
$this->_workdir=getenv('WORKDIR'); // /usr/jails/
|
||||
$connect = null;
|
||||
$file_name = null;
|
||||
|
||||
switch($place){
|
||||
case 'base':
|
||||
$file_name=$this->_workdir.'/var/db/'.$database.'.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'file':
|
||||
$file_name=$database;
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'helper':
|
||||
if(is_array($database)){
|
||||
//usr/jails/jails-system/cbsdpuppet1/helpers/redis.sqlite
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/helpers/'.$database['helper'].".sqlite";
|
||||
$connect='sqlite:'.$file_name;
|
||||
} else {
|
||||
$file_name=$this->_workdir.'/formfile/'.$database.".sqlite";
|
||||
$connect='sqlite:'.$file_name;
|
||||
}
|
||||
break;
|
||||
case 'cbsd-settings':
|
||||
$file_name=$this->_workdir.'/jails-system/CBSDSYS/helpers/cbsd.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'clonos':
|
||||
$file_name='/var/db/clonos/clonos.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'racct':
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/racct.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'bhyve':
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/local.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
$databases=array(
|
||||
'tasks'=>'cbsdtaskd',
|
||||
'jails'=>'local',
|
||||
);
|
||||
|
||||
switch($driver){
|
||||
case 'sqlite_webdev':
|
||||
$connect='sqlite:/var/db/webdev/webdev.sqlite';
|
||||
break;
|
||||
case 'forms':
|
||||
$connect='sqlite:/var/db/webdev/forms.sqlite';
|
||||
break;
|
||||
case 'helpers':
|
||||
if(is_array($database)){
|
||||
$connect='sqlite:'.$this->_workdir.'/jails-system/'.
|
||||
$database['jname'].'/helpers/'.$database['helper'].".sqlite";
|
||||
}else $connect='';
|
||||
break;
|
||||
case 'sqlite_cbsd':
|
||||
if($database!=''){
|
||||
if(!isset($databases[$database])) break;
|
||||
$db=$databases[$database];
|
||||
$connect='sqlite:'.$this->_workdir.'/var/db/'.$db.'.sqlite';
|
||||
}
|
||||
break;
|
||||
case 'pkg':
|
||||
$connect='sqlite:'.$this->_workdir.'/jails-data/'.$database.'-data/var/db/pkg/local.sqlite';
|
||||
break;
|
||||
/-*
|
||||
case 'from_file':
|
||||
echo $this->_workdir.$database;
|
||||
$connect='sqlite:'.$this->_workdir.$database;
|
||||
//"/jails-system/jail".$this->jailId."/helpers/".$this->helper.".sqlite"
|
||||
break;
|
||||
*-/
|
||||
default:
|
||||
throw new Exception('Unknown database driver!');
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
return [$file_name, $connect];
|
||||
}
|
||||
|
||||
# TODO once tested $values can have a default value of an empty array
|
||||
function select($sql, $values, $single = false){
|
||||
$sql=str_replace('"',"'",$sql);
|
||||
if ($this->error){
|
||||
return array('error' => $this->error, 'info' => $this->error_message);
|
||||
}
|
||||
try {
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
if ($single){
|
||||
$res = $query->fetch(PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$res = $query->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
return $res;
|
||||
} catch(PDOException $e) {
|
||||
return array('error' => true, 'info' => 'Catch exception: ' . $e->getMessage()); //$this->error
|
||||
}
|
||||
}
|
||||
|
||||
function selectOne($sql, $values){
|
||||
return $this->select($sql, $values, true);
|
||||
}
|
||||
|
||||
function insert($sql, $values){
|
||||
if ($this->error){
|
||||
return array('error' => $this->error, 'info' => $this->error_message);
|
||||
}
|
||||
try {
|
||||
$this->_pdo->beginTransaction();
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
$lastId = $this->_pdo->lastInsertId();
|
||||
$this->_pdo->commit();
|
||||
} catch(PDOException $e) {
|
||||
$this->_pdo->rollBack();
|
||||
#throw new Exception($e->getMessage());
|
||||
return array('error'=>true,'info'=>$e->getMessage());
|
||||
}
|
||||
return array('error'=>false,'lastID'=>$lastId);
|
||||
}
|
||||
|
||||
function update($sql, $values){
|
||||
if ($this->error){
|
||||
throw new Exception($this->error_message);
|
||||
}
|
||||
try {
|
||||
$this->_pdo->beginTransaction();
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
$rowCount=$query->rowCount();
|
||||
$this->_pdo->commit();
|
||||
} catch(PDOException $e) {
|
||||
$this->_pdo->rollBack();
|
||||
#return false;
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
return array('rowCount'=>$rowCount);
|
||||
}
|
||||
|
||||
function isConnected(){ return !is_null($this->_pdo); }
|
||||
function getWorkdir(){ return $this->_workdir; }
|
||||
function getFileName(){ return $this->_filename; }
|
||||
}
|
||||
<?php
|
||||
|
||||
class Db {
|
||||
private $_pdo=null;
|
||||
private $_workdir='';
|
||||
private $_filename='';
|
||||
public $error=false;
|
||||
public $error_message='';
|
||||
|
||||
/*
|
||||
$place = base (This is a basic set of databases: local, nodes, etc)
|
||||
$place = file (specify a specific database for the full pathth)
|
||||
*/
|
||||
function __construct($place='base', $database='', $connect = null){
|
||||
|
||||
if (is_null($connect)){
|
||||
list($file_name, $connect) = $this->prep_connect($place, $database);
|
||||
if(is_null($file_name) || !file_exists($file_name)){
|
||||
$this->error=true;
|
||||
$this->error_message='DB file name not set or not found!';
|
||||
return;
|
||||
} else {
|
||||
$this->_filename=$file_name;
|
||||
}
|
||||
|
||||
if(is_null($connect)) {
|
||||
$this->error=true;
|
||||
$this->error_message='DB file name not set or invalid';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$this->_pdo = new PDO($connect);
|
||||
$this->_pdo->setAttribute(PDO::ATTR_TIMEOUT,5000);
|
||||
}catch (PDOException $e){
|
||||
$this->error=true;
|
||||
$this->error_message=$e->getMessage(); //'DB Error';
|
||||
}
|
||||
}
|
||||
|
||||
private function prep_connect($place, $database){
|
||||
|
||||
$this->_workdir=getenv('WORKDIR'); // /usr/jails/
|
||||
$connect = null;
|
||||
$file_name = null;
|
||||
|
||||
switch($place){
|
||||
case 'base':
|
||||
$file_name=$this->_workdir.'/var/db/'.$database.'.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'file':
|
||||
$file_name=$database;
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'helper':
|
||||
if(is_array($database)){
|
||||
//usr/jails/jails-system/cbsdpuppet1/helpers/redis.sqlite
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/helpers/'.$database['helper'].".sqlite";
|
||||
$connect='sqlite:'.$file_name;
|
||||
} else {
|
||||
$file_name=$this->_workdir.'/formfile/'.$database.".sqlite";
|
||||
$connect='sqlite:'.$file_name;
|
||||
}
|
||||
break;
|
||||
case 'cbsd-settings':
|
||||
$file_name=$this->_workdir.'/jails-system/CBSDSYS/helpers/cbsd.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'clonos':
|
||||
$file_name='/var/db/clonos/clonos.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'racct':
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/racct.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
case 'bhyve':
|
||||
$file_name=$this->_workdir.'/jails-system/'.$database['jname'].'/local.sqlite';
|
||||
$connect='sqlite:'.$file_name;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
$databases=array(
|
||||
'tasks'=>'cbsdtaskd',
|
||||
'jails'=>'local',
|
||||
);
|
||||
|
||||
switch($driver){
|
||||
case 'sqlite_webdev':
|
||||
$connect='sqlite:/var/db/webdev/webdev.sqlite';
|
||||
break;
|
||||
case 'forms':
|
||||
$connect='sqlite:/var/db/webdev/forms.sqlite';
|
||||
break;
|
||||
case 'helpers':
|
||||
if(is_array($database)){
|
||||
$connect='sqlite:'.$this->_workdir.'/jails-system/'.
|
||||
$database['jname'].'/helpers/'.$database['helper'].".sqlite";
|
||||
}else $connect='';
|
||||
break;
|
||||
case 'sqlite_cbsd':
|
||||
if($database!=''){
|
||||
if(!isset($databases[$database])) break;
|
||||
$db=$databases[$database];
|
||||
$connect='sqlite:'.$this->_workdir.'/var/db/'.$db.'.sqlite';
|
||||
}
|
||||
break;
|
||||
case 'pkg':
|
||||
$connect='sqlite:'.$this->_workdir.'/jails-data/'.$database.'-data/var/db/pkg/local.sqlite';
|
||||
break;
|
||||
/-*
|
||||
case 'from_file':
|
||||
echo $this->_workdir.$database;
|
||||
$connect='sqlite:'.$this->_workdir.$database;
|
||||
//"/jails-system/jail".$this->jailId."/helpers/".$this->helper.".sqlite"
|
||||
break;
|
||||
*-/
|
||||
default:
|
||||
throw new Exception('Unknown database driver!');
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
return [$file_name, $connect];
|
||||
}
|
||||
|
||||
# TODO once tested $values can have a default value of an empty array
|
||||
function select($sql, $values, $single = false){
|
||||
$sql=str_replace('"',"'",$sql);
|
||||
if ($this->error){
|
||||
return array('error' => $this->error, 'info' => $this->error_message);
|
||||
}
|
||||
try {
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
if ($single){
|
||||
$res = $query->fetch(PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$res = $query->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
return $res;
|
||||
} catch(PDOException $e) {
|
||||
return array('error' => true, 'info' => 'Catch exception: ' . $e->getMessage()); //$this->error
|
||||
}
|
||||
}
|
||||
|
||||
function selectOne($sql, $values){
|
||||
return $this->select($sql, $values, true);
|
||||
}
|
||||
|
||||
function insert($sql, $values){
|
||||
if ($this->error){
|
||||
return array('error' => $this->error, 'info' => $this->error_message);
|
||||
}
|
||||
try {
|
||||
$this->_pdo->beginTransaction();
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
$lastId = $this->_pdo->lastInsertId();
|
||||
$this->_pdo->commit();
|
||||
} catch(PDOException $e) {
|
||||
$this->_pdo->rollBack();
|
||||
#throw new Exception($e->getMessage());
|
||||
return array('error'=>true,'info'=>$e->getMessage());
|
||||
}
|
||||
return array('error'=>false,'lastID'=>$lastId);
|
||||
}
|
||||
|
||||
function update($sql, $values){
|
||||
if ($this->error){
|
||||
throw new Exception($this->error_message);
|
||||
}
|
||||
try {
|
||||
$this->_pdo->beginTransaction();
|
||||
$query = $this->_pdo->prepare($sql);
|
||||
$i = 1;
|
||||
foreach($values as $v){
|
||||
if (count($v) == 1){ # TODO: Make default type string
|
||||
$query->bindParam($i, $v[0]);
|
||||
} elseif (count($v) == 2){ # if type defined
|
||||
$query->bindParam($i, $v[0], $v[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$query->execute();
|
||||
$rowCount=$query->rowCount();
|
||||
$this->_pdo->commit();
|
||||
} catch(PDOException $e) {
|
||||
$this->_pdo->rollBack();
|
||||
#return false;
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
return array('rowCount'=>$rowCount);
|
||||
}
|
||||
|
||||
function isConnected(){ return !is_null($this->_pdo); }
|
||||
function getWorkdir(){ return $this->_workdir; }
|
||||
function getFileName(){ return $this->_filename; }
|
||||
}
|
||||
|
||||
444
php/forms.php
444
php/forms.php
@@ -1,227 +1,227 @@
|
||||
<?php
|
||||
/*
|
||||
(
|
||||
[idx] => 1
|
||||
[mytable] => forms
|
||||
[group_id] => 1
|
||||
[order_id] => 1
|
||||
[param] => ldap_host
|
||||
[desc] => LDAP server
|
||||
[def] => 192.168.1.3
|
||||
[cur] =>
|
||||
[new] =>
|
||||
[mandatory] => 1
|
||||
[attr] => maxlen=60
|
||||
[xattr] =>
|
||||
[type] => inputbox
|
||||
[link] =>
|
||||
)
|
||||
*/
|
||||
class Forms
|
||||
{
|
||||
private $db='';
|
||||
|
||||
function __construct($jname,$helper='',$db_path=false)
|
||||
{
|
||||
if($jname==''){
|
||||
$database=$helper;
|
||||
}else{
|
||||
$database=array('jname'=>$jname,'helper'=>$helper);
|
||||
}
|
||||
|
||||
if($jname=='cbsd-settings'){
|
||||
$this->db=new Db('cbsd-settings');
|
||||
} else if($helper!=''){
|
||||
if($db_path!==false){
|
||||
$this->db=new Db('file',$db_path);
|
||||
}else{
|
||||
$this->db=new Db('helper',$database);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function fetch_from_db($link)
|
||||
{
|
||||
// return $this->db->select("select * from ? order by order_id asc", array([$link]));
|
||||
<?php
|
||||
/*
|
||||
(
|
||||
[idx] => 1
|
||||
[mytable] => forms
|
||||
[group_id] => 1
|
||||
[order_id] => 1
|
||||
[param] => ldap_host
|
||||
[desc] => LDAP server
|
||||
[def] => 192.168.1.3
|
||||
[cur] =>
|
||||
[new] =>
|
||||
[mandatory] => 1
|
||||
[attr] => maxlen=60
|
||||
[xattr] =>
|
||||
[type] => inputbox
|
||||
[link] =>
|
||||
)
|
||||
*/
|
||||
class Forms
|
||||
{
|
||||
private $db='';
|
||||
|
||||
function __construct($jname,$helper='',$db_path=false)
|
||||
{
|
||||
if($jname==''){
|
||||
$database=$helper;
|
||||
}else{
|
||||
$database=array('jname'=>$jname,'helper'=>$helper);
|
||||
}
|
||||
|
||||
if($jname=='cbsd-settings'){
|
||||
$this->db=new Db('cbsd-settings');
|
||||
} else if($helper!=''){
|
||||
if($db_path!==false){
|
||||
$this->db=new Db('file',$db_path);
|
||||
}else{
|
||||
$this->db=new Db('helper',$database);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function fetch_from_db($link)
|
||||
{
|
||||
// return $this->db->select("select * from ? order by order_id asc", array([$link]));
|
||||
return $this->db->select("select * from {$link} order by order_id asc", array());
|
||||
}
|
||||
|
||||
function generate(){
|
||||
if($this->db->error) return;
|
||||
$fields=$this->db->select("select * from forms order by groupname asc, group_id asc, order_id asc", array());
|
||||
|
||||
// Строим карту формы с группами элементов
|
||||
$groups=array();
|
||||
foreach($fields as $key=>$field){
|
||||
$group=$field['groupname'];
|
||||
if(!empty($group)){
|
||||
if($field['type']=='group_add'){ // Expand
|
||||
$groups[$group]['_title']=$field['desc'];
|
||||
}else if($field['type']=='delimer'){
|
||||
// Delimer
|
||||
$groups[$group][$field['group_id']]=$key;
|
||||
}else{
|
||||
// Other elements
|
||||
$groups[$group][$field['group_id']]['_group_id']=$field['group_id'];
|
||||
$groups[$group][$field['group_id']][$field['order_id']]=$key;
|
||||
}
|
||||
}else{
|
||||
$groups[]=$key;
|
||||
}
|
||||
}
|
||||
//print_r($fields);print_r($groups);exit;
|
||||
|
||||
$arr=array();
|
||||
$last_type='';
|
||||
foreach($fields as $key=>$field){
|
||||
/*
|
||||
if($last_type=='delimer' && $field['type']!='delimer')
|
||||
$html.='<div class="pad-head"></div>';
|
||||
*/
|
||||
$last_type=$field['type'];
|
||||
|
||||
if(isset($field['cur']) && isset($field['def'])){
|
||||
if(empty($field['cur'])) $field['cur']=$field['def'];
|
||||
}
|
||||
|
||||
$tpl=$this->getElement($field['type'],$field);
|
||||
$params=array('param','desc','attr','cur');
|
||||
foreach($params as $param){
|
||||
if(isset($field[$param]))
|
||||
$tpl=str_replace('${'.$param.'}',$field[$param],$tpl);
|
||||
}
|
||||
|
||||
//$value=$field['def'];
|
||||
//if(isset($field['cur']) && !empty($field['cur'])) $value=$field['cur'];
|
||||
$value=$field['cur'];
|
||||
$tpl=str_replace('${value}',$value,$tpl);
|
||||
|
||||
$value=$field['def'];
|
||||
$tpl=str_replace('${def}',$value,$tpl);
|
||||
|
||||
$required=($field['mandatory']==1)?' required':'';
|
||||
$tpl=str_replace('${required}',$required,$tpl);
|
||||
$arr[$key]=$tpl;
|
||||
|
||||
//if($field['param']!='-') $currents[$field['param']]=$field['cur'];
|
||||
//if($field['param']!='-') $defaults[$field['param']]=$field['def'];
|
||||
}
|
||||
|
||||
// Выстраиваем форму по карте
|
||||
$html='<form class="helper" name="" onsubmit="return false;"><div class="form-fields">';
|
||||
foreach($groups as $key=>$txt){
|
||||
if(is_numeric($key)){
|
||||
$html.=$arr[$key];
|
||||
}else if(is_array($txt)){
|
||||
$group_name=key($txt);
|
||||
$group_title=$txt['_title'];
|
||||
unset($txt['_title']);
|
||||
foreach($txt as $key1=>$val1){
|
||||
$group_id=$val1['_group_id'];
|
||||
unset($val1['_group_id']);
|
||||
if(is_array($val1)){
|
||||
$html.='<div class="form-field"><fieldset id="ind-'.$group_id.'"><legend>'.$group_title.'</legend>';
|
||||
foreach($val1 as $key2=>$val2){
|
||||
$html.=$arr[$val2];
|
||||
}
|
||||
$html.='<div><input type="button" value="delete group" class="fgroup-del-butt" /></div></fieldset></div>';
|
||||
}else{
|
||||
$html.=$arr[$key1];
|
||||
}
|
||||
}
|
||||
$html.='<div class="form-field"><input type="button" value="add group" class="fgroup-add-butt" /></div>';
|
||||
}
|
||||
}
|
||||
|
||||
$html.='</div>';
|
||||
$html.='<div class="buttons"><input type="button" value="Apply" class="save-helper-values" title="Save and apply params" /> <input type="button" value="Clear" class="clear-helper" title="Restore loaded params" /></div>';
|
||||
$html.='</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
function getElement($el,$arr=array())
|
||||
{
|
||||
$tpl='';
|
||||
switch(trim($el)){
|
||||
case 'inputbox':
|
||||
$res=$this->getInputAutofill($arr);
|
||||
if($res===false){
|
||||
$list='';
|
||||
$datalist='';
|
||||
}else{
|
||||
$list=' list="'.$res['list'].'"';
|
||||
$datalist=$res['datalist'];
|
||||
}
|
||||
$tpl='<div class="form-field"><input type="text" name="${param}" value="${value}" ${attr}${required}'.$list.' /><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span>'.$datalist.'</div>';
|
||||
//'.$default.'
|
||||
break;
|
||||
case 'password':
|
||||
$tpl='<div class="form-field"><input type="password" name="${param}" value="${value}" ${attr}${required} /><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span></div>';
|
||||
break;
|
||||
case 'delimer':
|
||||
$tpl='<h1>${desc}</h1>';
|
||||
break;
|
||||
case 'checkbox':
|
||||
$tpl='<input type="checkbox" id="chk-${idx}" name="${param}" /><label for="chk-${idx}">${desc}</label>';
|
||||
break;
|
||||
case 'select':
|
||||
$tpl=$this->getSelect($el,$arr);
|
||||
break;
|
||||
case 'radio':
|
||||
$tpl=$this->getRadio($el,$arr);
|
||||
break;
|
||||
}
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
function getInputAutofill($arr)
|
||||
{
|
||||
if(isset($arr['link']) && $arr['link']!=''){
|
||||
$id=$arr['link']; //$arr['param'].'-'.
|
||||
$tpl='<datalist id="'.$id.'">';
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
foreach($opts as $key=>$opt){
|
||||
$tpl.='<option>'.$opt['text'].'</option>';
|
||||
}
|
||||
$tpl.='</datalist>';
|
||||
}
|
||||
|
||||
function generate(){
|
||||
if($this->db->error) return;
|
||||
$fields=$this->db->select("select * from forms order by groupname asc, group_id asc, order_id asc", array());
|
||||
|
||||
// Строим карту формы с группами элементов
|
||||
$groups=array();
|
||||
foreach($fields as $key=>$field){
|
||||
$group=$field['groupname'];
|
||||
if(!empty($group)){
|
||||
if($field['type']=='group_add'){ // Expand
|
||||
$groups[$group]['_title']=$field['desc'];
|
||||
}else if($field['type']=='delimer'){
|
||||
// Delimer
|
||||
$groups[$group][$field['group_id']]=$key;
|
||||
}else{
|
||||
// Other elements
|
||||
$groups[$group][$field['group_id']]['_group_id']=$field['group_id'];
|
||||
$groups[$group][$field['group_id']][$field['order_id']]=$key;
|
||||
}
|
||||
}else{
|
||||
$groups[]=$key;
|
||||
}
|
||||
}
|
||||
//print_r($fields);print_r($groups);exit;
|
||||
|
||||
$arr=array();
|
||||
$last_type='';
|
||||
foreach($fields as $key=>$field){
|
||||
/*
|
||||
if($last_type=='delimer' && $field['type']!='delimer')
|
||||
$html.='<div class="pad-head"></div>';
|
||||
*/
|
||||
$last_type=$field['type'];
|
||||
|
||||
if(isset($field['cur']) && isset($field['def'])){
|
||||
if(empty($field['cur'])) $field['cur']=$field['def'];
|
||||
}
|
||||
|
||||
$tpl=$this->getElement($field['type'],$field);
|
||||
$params=array('param','desc','attr','cur');
|
||||
foreach($params as $param){
|
||||
if(isset($field[$param]))
|
||||
$tpl=str_replace('${'.$param.'}',$field[$param],$tpl);
|
||||
}
|
||||
|
||||
//$value=$field['def'];
|
||||
//if(isset($field['cur']) && !empty($field['cur'])) $value=$field['cur'];
|
||||
$value=$field['cur'];
|
||||
$tpl=str_replace('${value}',$value,$tpl);
|
||||
|
||||
$value=$field['def'];
|
||||
$tpl=str_replace('${def}',$value,$tpl);
|
||||
|
||||
$required=($field['mandatory']==1)?' required':'';
|
||||
$tpl=str_replace('${required}',$required,$tpl);
|
||||
$arr[$key]=$tpl;
|
||||
|
||||
//if($field['param']!='-') $currents[$field['param']]=$field['cur'];
|
||||
//if($field['param']!='-') $defaults[$field['param']]=$field['def'];
|
||||
}
|
||||
|
||||
// Выстраиваем форму по карте
|
||||
$html='<form class="helper" name="" onsubmit="return false;"><div class="form-fields">';
|
||||
foreach($groups as $key=>$txt){
|
||||
if(is_numeric($key)){
|
||||
$html.=$arr[$key];
|
||||
}else if(is_array($txt)){
|
||||
$group_name=key($txt);
|
||||
$group_title=$txt['_title'];
|
||||
unset($txt['_title']);
|
||||
foreach($txt as $key1=>$val1){
|
||||
$group_id=$val1['_group_id'];
|
||||
unset($val1['_group_id']);
|
||||
if(is_array($val1)){
|
||||
$html.='<div class="form-field"><fieldset id="ind-'.$group_id.'"><legend>'.$group_title.'</legend>';
|
||||
foreach($val1 as $key2=>$val2){
|
||||
$html.=$arr[$val2];
|
||||
}
|
||||
$html.='<div><input type="button" value="delete group" class="fgroup-del-butt" /></div></fieldset></div>';
|
||||
}else{
|
||||
$html.=$arr[$key1];
|
||||
}
|
||||
}
|
||||
$html.='<div class="form-field"><input type="button" value="add group" class="fgroup-add-butt" /></div>';
|
||||
}
|
||||
}
|
||||
|
||||
$html.='</div>';
|
||||
$html.='<div class="buttons"><input type="button" value="Apply" class="save-helper-values" title="Save and apply params" /> <input type="button" value="Clear" class="clear-helper" title="Restore loaded params" /></div>';
|
||||
$html.='</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
function getElement($el,$arr=array())
|
||||
{
|
||||
$tpl='';
|
||||
switch(trim($el)){
|
||||
case 'inputbox':
|
||||
$res=$this->getInputAutofill($arr);
|
||||
if($res===false){
|
||||
$list='';
|
||||
$datalist='';
|
||||
}else{
|
||||
$list=' list="'.$res['list'].'"';
|
||||
$datalist=$res['datalist'];
|
||||
}
|
||||
$tpl='<div class="form-field"><input type="text" name="${param}" value="${value}" ${attr}${required}'.$list.' /><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span>'.$datalist.'</div>';
|
||||
//'.$default.'
|
||||
break;
|
||||
case 'password':
|
||||
$tpl='<div class="form-field"><input type="password" name="${param}" value="${value}" ${attr}${required} /><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span></div>';
|
||||
break;
|
||||
case 'delimer':
|
||||
$tpl='<h1>${desc}</h1>';
|
||||
break;
|
||||
case 'checkbox':
|
||||
$tpl='<input type="checkbox" id="chk-${idx}" name="${param}" /><label for="chk-${idx}">${desc}</label>';
|
||||
break;
|
||||
case 'select':
|
||||
$tpl=$this->getSelect($el,$arr);
|
||||
break;
|
||||
case 'radio':
|
||||
$tpl=$this->getRadio($el,$arr);
|
||||
break;
|
||||
}
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
function getInputAutofill($arr)
|
||||
{
|
||||
if(isset($arr['link']) && $arr['link']!=''){
|
||||
$id=$arr['link']; //$arr['param'].'-'.
|
||||
$tpl='<datalist id="'.$id.'">';
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
foreach($opts as $key=>$opt){
|
||||
$tpl.='<option>'.$opt['text'].'</option>';
|
||||
}
|
||||
$tpl.='</datalist>';
|
||||
|
||||
Utils::clonos_syslog("forms.php template: " . $tpl);
|
||||
|
||||
return array('list'=>$id,'datalist'=>$tpl);
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getSelect($el,$arr)
|
||||
{
|
||||
$tpl='<div class="form-field"><select name="${param}">';
|
||||
if(isset($arr['link'])){
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
// Пустое поле в списках оказалось ненужным!
|
||||
//array_unshift($opts,array('id'=>0,'text'=>'','order_id'=>-1));
|
||||
foreach($opts as $key=>$opt){
|
||||
$selected=($opt['id']==$arr['cur'])?' selected':'';
|
||||
$tpl.='<option value="'.$opt['id'].'"'.$selected.'>'.$opt['text'].'</option>';
|
||||
}
|
||||
}
|
||||
$tpl.='</select><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span></div>';
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
function getRadio($el,$arr)
|
||||
{
|
||||
$tpl='<div class="form-field"><fieldset><legend>${desc}</legend>';
|
||||
if(isset($arr['link'])){
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
foreach($opts as $key=>$opt){
|
||||
$checked=($opt['id']==$arr['cur'])?' checked':'';
|
||||
$tpl.='<label for="${param}-'.$opt['id'].'">'.$opt['text'].':</label><input type="radio" name="${param}" value="'.$opt['id'].'" id="${param}-'.$opt['id'].'"'.$checked.' />';
|
||||
}
|
||||
}
|
||||
$tpl.='</fieldset></div>';
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
return array('list'=>$id,'datalist'=>$tpl);
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getSelect($el,$arr)
|
||||
{
|
||||
$tpl='<div class="form-field"><select name="${param}">';
|
||||
if(isset($arr['link'])){
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
// Пустое поле в списках оказалось ненужным!
|
||||
//array_unshift($opts,array('id'=>0,'text'=>'','order_id'=>-1));
|
||||
foreach($opts as $key=>$opt){
|
||||
$selected=($opt['id']==$arr['cur'])?' selected':'';
|
||||
$tpl.='<option value="'.$opt['id'].'"'.$selected.'>'.$opt['text'].'</option>';
|
||||
}
|
||||
}
|
||||
$tpl.='</select><span class="default val-${def}" title="Click to fill dafault value">[default]</span><span class="small">${desc}</span></div>';
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
function getRadio($el,$arr)
|
||||
{
|
||||
$tpl='<div class="form-field"><fieldset><legend>${desc}</legend>';
|
||||
if(isset($arr['link'])){
|
||||
$opts = $this->fetch_from_db($arr['link']);
|
||||
foreach($opts as $key=>$opt){
|
||||
$checked=($opt['id']==$arr['cur'])?' checked':'';
|
||||
$tpl.='<label for="${param}-'.$opt['id'].'">'.$opt['text'].':</label><input type="radio" name="${param}" value="'.$opt['id'].'" id="${param}-'.$opt['id'].'"'.$checked.' />';
|
||||
}
|
||||
}
|
||||
$tpl.='</fieldset></div>';
|
||||
return $tpl;
|
||||
}
|
||||
|
||||
}
|
||||
146
php/menu.php
146
php/menu.php
@@ -1,84 +1,84 @@
|
||||
<?php
|
||||
/*
|
||||
'news'=>array(
|
||||
'name'=>'Новости',
|
||||
'title'=>'Новости сети',
|
||||
),
|
||||
'connect'=>array(
|
||||
'name'=>'Подключение к сети',
|
||||
'title'=>'Подключитесь к сети прямо сейчас!',
|
||||
'submenu'=>array(
|
||||
'map'=>array(
|
||||
'name'=>'Зона обслуживания',
|
||||
'title'=>'Зона обслуживания абонентов',
|
||||
),
|
||||
'wifi'=>array(
|
||||
'name'=>'Wi-Fi зоны',
|
||||
'title'=>'Бесплатные Wi-Fi зоны г. Кириши',
|
||||
),
|
||||
'docs'=>array(
|
||||
'name'=>'Документы',
|
||||
'title'=>'Документы'
|
||||
)
|
||||
)
|
||||
),
|
||||
*/
|
||||
|
||||
class Menu
|
||||
{
|
||||
public $html=array();
|
||||
public $title='Error';
|
||||
public $first_key=array();
|
||||
|
||||
function __construct(Localization $lang, $uri_chunks)
|
||||
/*
|
||||
'news'=>array(
|
||||
'name'=>'Новости',
|
||||
'title'=>'Новости сети',
|
||||
),
|
||||
'connect'=>array(
|
||||
'name'=>'Подключение к сети',
|
||||
'title'=>'Подключитесь к сети прямо сейчас!',
|
||||
'submenu'=>array(
|
||||
'map'=>array(
|
||||
'name'=>'Зона обслуживания',
|
||||
'title'=>'Зона обслуживания абонентов',
|
||||
),
|
||||
'wifi'=>array(
|
||||
'name'=>'Wi-Fi зоны',
|
||||
'title'=>'Бесплатные Wi-Fi зоны г. Кириши',
|
||||
),
|
||||
'docs'=>array(
|
||||
'name'=>'Документы',
|
||||
'title'=>'Документы'
|
||||
)
|
||||
)
|
||||
),
|
||||
*/
|
||||
|
||||
class Menu
|
||||
{
|
||||
public $html=array();
|
||||
public $title='Error';
|
||||
public $first_key=array();
|
||||
|
||||
function __construct(Localization $lang, $uri_chunks)
|
||||
{
|
||||
$menu_config = Config::$menu;
|
||||
$menu_config = Config::$menu;
|
||||
$this->first_key = array_key_first($menu_config);
|
||||
|
||||
|
||||
if(getenv('APPLICATION_ENV') != 'development'){
|
||||
unset($menu_config['sqlite']);
|
||||
}
|
||||
|
||||
$this->html='<ul class="menu">'.PHP_EOL;
|
||||
|
||||
}
|
||||
|
||||
$this->html='<ul class="menu">'.PHP_EOL;
|
||||
|
||||
//$qstr=trim($_SERVER['REQUEST_URI'],'/');
|
||||
$qstr='';
|
||||
if(isset($uri_chunks[0])){
|
||||
$qstr=trim($uri_chunks[0],'/');
|
||||
}
|
||||
}
|
||||
foreach($menu_config as $link=>$val){
|
||||
$mname=$lang->translate($val['name']);
|
||||
$mtitle=$lang->translate($val['title']);
|
||||
$sel='';
|
||||
if($qstr==$link){
|
||||
$sel=' class="sel"';
|
||||
$this->title=$mtitle; //$_TITLE
|
||||
}
|
||||
|
||||
$icon='empty';
|
||||
if(isset($val['icon']) && !empty($val['icon'])) $icon=$val['icon'];
|
||||
$span='<span class="'.$icon.'"></span>';
|
||||
$this->html.=' <li><a href="/'.$link.'/" title="'.$mtitle.'"'.$sel.'>'.$span.'<span class="mtxt">'.$mname.'</span></a>';
|
||||
if(!empty($val['submenu'])){
|
||||
$this->html.= PHP_EOL.' <ul class="submenu">'.PHP_EOL;
|
||||
foreach($val['submenu'] as $k=>$s){
|
||||
$sname=$lang->translate($s['name']);
|
||||
$stitle=$lang->translate($s['title']);
|
||||
|
||||
$slink=$link.'/'.$k;
|
||||
$sl=$link.'_'.$k;
|
||||
$ssel='';
|
||||
if($qstr==$sl){
|
||||
$ssel=' class="sel"';
|
||||
$this->title=$stitle;
|
||||
}
|
||||
$this->html.= ' <li><a href="/'.$slink.'/" title="'.$stitle.'"'.$ssel.'>'.$sname.'</a></li>'.PHP_EOL;
|
||||
}
|
||||
$this->html.= ' </ul>'.PHP_EOL.' ';
|
||||
}
|
||||
$this->html.= '</li>'.PHP_EOL;
|
||||
}
|
||||
|
||||
$mname=$lang->translate($val['name']);
|
||||
$mtitle=$lang->translate($val['title']);
|
||||
$sel='';
|
||||
if($qstr==$link){
|
||||
$sel=' class="sel"';
|
||||
$this->title=$mtitle; //$_TITLE
|
||||
}
|
||||
|
||||
$icon='empty';
|
||||
if(isset($val['icon']) && !empty($val['icon'])) $icon=$val['icon'];
|
||||
$span='<span class="'.$icon.'"></span>';
|
||||
$this->html.=' <li><a href="/'.$link.'/" title="'.$mtitle.'"'.$sel.'>'.$span.'<span class="mtxt">'.$mname.'</span></a>';
|
||||
if(!empty($val['submenu'])){
|
||||
$this->html.= PHP_EOL.' <ul class="submenu">'.PHP_EOL;
|
||||
foreach($val['submenu'] as $k=>$s){
|
||||
$sname=$lang->translate($s['name']);
|
||||
$stitle=$lang->translate($s['title']);
|
||||
|
||||
$slink=$link.'/'.$k;
|
||||
$sl=$link.'_'.$k;
|
||||
$ssel='';
|
||||
if($qstr==$sl){
|
||||
$ssel=' class="sel"';
|
||||
$this->title=$stitle;
|
||||
}
|
||||
$this->html.= ' <li><a href="/'.$slink.'/" title="'.$stitle.'"'.$ssel.'>'.$sname.'</a></li>'.PHP_EOL;
|
||||
}
|
||||
$this->html.= ' </ul>'.PHP_EOL.' ';
|
||||
}
|
||||
$this->html.= '</li>'.PHP_EOL;
|
||||
}
|
||||
|
||||
$this->html.='</ul>';
|
||||
|
||||
if($this->title=='Error'){
|
||||
@@ -86,6 +86,6 @@ class Menu
|
||||
if(isset($other_titles[$qstr])){
|
||||
$this->title=$lang->translate($other_titles[$qstr]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
Всякие интересные фишки
|
||||
|
||||
Экран загрузки с прелоадером и раздвигающимися шторками:
|
||||
https://ihatetomatoes.net/create-custom-preloading-screen/
|
||||
|
||||
Прелоадер
|
||||
http://jsfiddle.net/s9oax2pp/
|
||||
|
||||
Всякие интересные фишки
|
||||
|
||||
Экран загрузки с прелоадером и раздвигающимися шторками:
|
||||
https://ihatetomatoes.net/create-custom-preloading-screen/
|
||||
|
||||
Прелоадер
|
||||
http://jsfiddle.net/s9oax2pp/
|
||||
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
/* Eric Meyer's CSS Reset */
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Eric Meyer's CSS Reset */
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* End of Eric Meyer's CSS Reset */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,463 +1,463 @@
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#252526;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:white;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:#1e1e1e;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
color:white;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid black;
|
||||
background-color:#333;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:#252526;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #777;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #333;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:rgba(255,255,255,0.4);
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:rgba(255,255,255,0.3);
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#444;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
/*border:1px solid #6f7579;*/
|
||||
color: white;
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#555;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#555;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#c3622c;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
form.win .field-name {
|
||||
color:#43c990;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
td.error {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
/*border:1px solid gray;*/
|
||||
background-color:black;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#252526;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:white;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:#1e1e1e;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
color:white;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid black;
|
||||
background-color:#333;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:#252526;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #777;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #333;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:rgba(255,255,255,0.4);
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:rgba(255,255,255,0.3);
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#444;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
/*border:1px solid #6f7579;*/
|
||||
color: white;
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#555;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#555;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#c3622c;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
form.win .field-name {
|
||||
color:#43c990;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
td.error {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
/*border:1px solid gray;*/
|
||||
background-color:black;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
/* background:#f0f0f0;
|
||||
*/
|
||||
background:#073642;
|
||||
*/
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
/*border:1px solid gray;*/
|
||||
background-color:black;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#444;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
header .top-right {
|
||||
color:white;
|
||||
}
|
||||
header .top-right a {
|
||||
color:#FFFAA0;
|
||||
}
|
||||
|
||||
|
||||
.summary_table {
|
||||
font-size:9pt;
|
||||
}
|
||||
.summary_table td {
|
||||
border-bottom:1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
.summary_table tr td:first-child {
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
|
||||
#menu .icon-chart-bar:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-server:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-cubes:before {
|
||||
color:rgba(100,100,255,0.7);
|
||||
}
|
||||
#menu .icon-th-list:before {
|
||||
color:rgba(100,255,255,0.7);
|
||||
}
|
||||
#menu .icon-plug:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-key:before {
|
||||
color:rgba(255,255,100,0.7);
|
||||
}
|
||||
#menu .icon-inbox:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-upload:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-database:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-edit:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-list-alt:before {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
#menu .icon-wpforms:before {
|
||||
background:#073642;
|
||||
*/
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
/*border:1px solid gray;*/
|
||||
background-color:black;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#444;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
header .top-right {
|
||||
color:white;
|
||||
}
|
||||
header .top-right a {
|
||||
color:#FFFAA0;
|
||||
}
|
||||
|
||||
|
||||
.summary_table {
|
||||
font-size:9pt;
|
||||
}
|
||||
.summary_table td {
|
||||
border-bottom:1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
.summary_table tr td:first-child {
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
|
||||
#menu .icon-chart-bar:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-server:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-cubes:before {
|
||||
color:rgba(100,100,255,0.7);
|
||||
}
|
||||
#menu .icon-th-list:before {
|
||||
color:rgba(100,255,255,0.7);
|
||||
}
|
||||
#menu .icon-plug:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-key:before {
|
||||
color:rgba(255,255,100,0.7);
|
||||
}
|
||||
#menu .icon-inbox:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-upload:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-database:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-edit:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-list-alt:before {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
#menu .icon-wpforms:before {
|
||||
|
||||
@@ -1,460 +1,460 @@
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#252526;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:white;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:#1e1e1e;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
color:white;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid black;
|
||||
background-color:#333;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:#252526;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #777;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #333;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:rgba(255,255,255,0.4);
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:rgba(255,255,255,0.3);
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#444;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
border:1px solid #6f7579;
|
||||
color: white;
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#555;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#555;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#c3622c;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
form.win .field-name {
|
||||
color:#43c990;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
td.error {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
border:1px solid gray;
|
||||
background-color:black;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#252526;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:white;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:#1e1e1e;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
color:white;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid black;
|
||||
background-color:#333;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:#252526;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #777;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #333;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:rgba(255,255,255,0.4);
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:rgba(255,255,255,0.3);
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:rgba(255,255,255,0.2);
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#444;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
border:1px solid #6f7579;
|
||||
color: white;
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#555;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#555;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#c3622c;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
form.win .field-name {
|
||||
color:#43c990;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:rgba(0,200,0,0.1);
|
||||
}
|
||||
td.error {
|
||||
background-color:rgba(200,0,0,0.1);
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
border:1px solid gray;
|
||||
background-color:black;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
/* background:#f0f0f0;
|
||||
*/
|
||||
background:#073642;
|
||||
*/
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
border:1px solid gray;
|
||||
background-color:black;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#444;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
header .top-right {
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
||||
.summary_table {
|
||||
font-size:9pt;
|
||||
}
|
||||
.summary_table td {
|
||||
border-bottom:1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
.summary_table tr td:first-child {
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
|
||||
#menu .icon-chart-bar:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-server:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-cubes:before {
|
||||
color:rgba(100,100,255,0.7);
|
||||
}
|
||||
#menu .icon-th-list:before {
|
||||
color:rgba(100,255,255,0.7);
|
||||
}
|
||||
#menu .icon-plug:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-key:before {
|
||||
color:rgba(255,255,100,0.7);
|
||||
}
|
||||
#menu .icon-inbox:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-upload:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-database:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-edit:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-list-alt:before {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
#menu .icon-wpforms:before {
|
||||
background:#073642;
|
||||
*/
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
border:1px solid gray;
|
||||
background-color:black;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#444;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#7cdcf0;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
header .top-right {
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
||||
.summary_table {
|
||||
font-size:9pt;
|
||||
}
|
||||
.summary_table td {
|
||||
border-bottom:1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
.summary_table tr td:first-child {
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
|
||||
#menu .icon-chart-bar:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-server:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-cubes:before {
|
||||
color:rgba(100,100,255,0.7);
|
||||
}
|
||||
#menu .icon-th-list:before {
|
||||
color:rgba(100,255,255,0.7);
|
||||
}
|
||||
#menu .icon-plug:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-key:before {
|
||||
color:rgba(255,255,100,0.7);
|
||||
}
|
||||
#menu .icon-inbox:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-upload:before {
|
||||
color:rgba(255,100,100,0.7);
|
||||
}
|
||||
#menu .icon-database:before {
|
||||
color:rgba(100,255,100,0.7);
|
||||
}
|
||||
#menu .icon-edit:before {
|
||||
color:rgba(255,100,255,0.7);
|
||||
}
|
||||
#menu .icon-list-alt:before {
|
||||
color:rgba(255,255,255,0.7);
|
||||
}
|
||||
#menu .icon-wpforms:before {
|
||||
|
||||
@@ -1,409 +1,409 @@
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#eee;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:#337ab7;
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:gray;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:black;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:white;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid silver;
|
||||
background-color:#eaeaea;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:white;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #f0f0f0;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:#fbfbe3;
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:#fcfccc
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:#fefec0;
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:#fcfccc;
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:Honeydew;
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:Seashell;
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#337ab7;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
/*border:1px solid #337ab7;*/
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#f3f3f3;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#e0e0e0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#ffd5d5;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.win input:invalid:focus {
|
||||
outline-color:red;
|
||||
}
|
||||
form.win input:valid:focus {
|
||||
outline-color:green;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#337ab7;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:Honeydew;
|
||||
}
|
||||
td.error {
|
||||
background-color:Seashell;
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
/*border:1px solid gray;*/
|
||||
background-color:white;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
background:#f0f0f0;
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
/*border:1px solid gray;*/
|
||||
border-bottom-width: 0px;
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color: #f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
div.menu {
|
||||
box-shadow:-7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
background-color:#eee;
|
||||
}
|
||||
ul.menu li a {
|
||||
color:#337ab7;
|
||||
}
|
||||
ul.menu li a:hover span {
|
||||
color:gray;
|
||||
}
|
||||
ul.menu a.sel span {
|
||||
color:black;
|
||||
}
|
||||
ul.menu a:active span {
|
||||
color:red !important;
|
||||
}
|
||||
main {
|
||||
background-color:white;
|
||||
box-shadow:7px 0px 10px 1px rgba(0,0,0,0.65);
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.closer {
|
||||
border:1px solid silver;
|
||||
background-color:#eaeaea;
|
||||
}
|
||||
.header {
|
||||
border-bottom: 5px solid #0F83A0;
|
||||
background-color:white;
|
||||
}
|
||||
.header li {
|
||||
border-right:1px solid #222;
|
||||
}
|
||||
.header li.mhome a {
|
||||
background-color: #0F83A0;
|
||||
}
|
||||
.header li a {
|
||||
color: #D5D5D5;
|
||||
text-shadow: 0 1px 1px black;
|
||||
border-left: 1px solid #383838;
|
||||
}
|
||||
.header #title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
|
||||
.tsimple thead th, .tsimple thead td {
|
||||
border-bottom:3px solid #337ab7;
|
||||
}
|
||||
.tsimple tbody td {
|
||||
border-bottom:1px solid #f0f0f0;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n){
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tsimple tbody tr:nth-child(2n):hover {
|
||||
background-color:#fbfbe3;
|
||||
}
|
||||
.tsimple tbody tr:hover {
|
||||
background-color:#fcfccc
|
||||
}
|
||||
.tsimple tbody tr.del {
|
||||
background-color: #ffe6e6;
|
||||
}
|
||||
.tsimple tbody tr.del:nth-child(2n) {
|
||||
background-color:#fde3e3;
|
||||
}
|
||||
.tsimple .nth0 + .nth1 td, .tsimple .nth1 + .nth0 td {
|
||||
border-top:2px solid #d1e7f3;
|
||||
}
|
||||
.tsimple tr.sel td {
|
||||
background-color:#fefec0;
|
||||
}
|
||||
.tsimple tr.helper:hover {
|
||||
background-color:#fcfccc;
|
||||
}
|
||||
span.icon-cnt:hover .icon-play,
|
||||
span.icon-cnt:hover .icon-stop,
|
||||
.icon-cancel:hover,
|
||||
.icon-cog:hover,
|
||||
.icon-arrows-cw:hover,
|
||||
.icon-download:hover,
|
||||
.icon-export:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-desktop {
|
||||
color:gray;
|
||||
}
|
||||
span.icon-desktop:hover {
|
||||
color:black;
|
||||
}
|
||||
span.icon-spin6 {
|
||||
color:black;
|
||||
}
|
||||
tr.busy .jstatus,
|
||||
tr.busy.s-on .jstatus,
|
||||
tr.busy.s-off .jstatus {
|
||||
background-color:Lavender !important;
|
||||
}
|
||||
tr.s-on td.jstatus {
|
||||
background-color:Honeydew;
|
||||
}
|
||||
tr.s-off td.jstatus {
|
||||
background-color:Seashell;
|
||||
}
|
||||
tr.maintenance td {
|
||||
color:gray;
|
||||
}
|
||||
tr.maintenance td.jstatus {
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
.tsimple .icon-lock {
|
||||
color:silver;
|
||||
}
|
||||
.vnc-grey {
|
||||
color:gray;
|
||||
}
|
||||
.vnc-wait {
|
||||
background-color:white;
|
||||
}
|
||||
#content h1 {
|
||||
color:#337ab7;
|
||||
}
|
||||
dialog {
|
||||
border:1px solid rgba(0,0,0,.3);
|
||||
background-color:#f0f0f0;
|
||||
}
|
||||
dialog::backdrop,
|
||||
#backdrop {
|
||||
background:rgba(0,0,0,.5);
|
||||
}
|
||||
dialog .panel {
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
.window-box {
|
||||
/*border:1px solid #337ab7;*/
|
||||
}
|
||||
.window-box .close-but {
|
||||
background-color:#f3f3f3;
|
||||
}
|
||||
.window-box .buttons {
|
||||
background-color:#e0e0e0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
.buttons .button {
|
||||
color:white;
|
||||
background-color:#337ab7;
|
||||
text-shadow:1px 1px 2px black;
|
||||
box-shadow:0 4px 8px rgba(0,0,0,.3);
|
||||
}
|
||||
.buttons .button.red {
|
||||
background-color:coral;
|
||||
text-shadow:1px 1px 2px black;
|
||||
}
|
||||
|
||||
.window-box h1 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h2 {
|
||||
color:gray;
|
||||
}
|
||||
.window-box h3 {
|
||||
border-bottom:3px solid #387db6;
|
||||
}
|
||||
.window-box h3 small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
.window-box .mrow small {
|
||||
color:gray;
|
||||
}
|
||||
.window-box .mrow.installed,
|
||||
.window-box .mrow.installed small {
|
||||
color:silver;
|
||||
}
|
||||
|
||||
form.win fieldset {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
form.win input[type="text"]:required,
|
||||
form.win input[type="email"]:required,
|
||||
form.win input[type="password"]:required {
|
||||
background-color:#fef7f7;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
form.win input[type="text"]:valid,
|
||||
form.win input[type="email"]:valid,
|
||||
form.win input[type="password"]:valid {
|
||||
border:1px solid green;
|
||||
background-color:Honeydew;
|
||||
}
|
||||
|
||||
form.win input[type="email"]:invalid,
|
||||
form.win input[type="password"]:invalid {
|
||||
background-color:#ffd5d5;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.win input:invalid:focus {
|
||||
outline-color:red;
|
||||
}
|
||||
form.win input:valid:focus {
|
||||
outline-color:green;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label,
|
||||
input[type=radio]:checked + label {
|
||||
color:#337ab7;
|
||||
}
|
||||
form.helper fieldset label {
|
||||
color:black !important;
|
||||
}
|
||||
|
||||
.inp_comment {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.cbsd-str {
|
||||
color:gray;
|
||||
}
|
||||
.cbsd-cmd {
|
||||
color:darkred;
|
||||
}
|
||||
.cbsd-lnch {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.link {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
td.progress {
|
||||
background-color:LemonChiffon;
|
||||
}
|
||||
td.ok {
|
||||
background-color:Honeydew;
|
||||
}
|
||||
td.error {
|
||||
background-color:Seashell;
|
||||
}
|
||||
|
||||
.window-content .helpers-list li {
|
||||
border-bottom:1px dotted silver;
|
||||
}
|
||||
|
||||
#config-menu ul
|
||||
{
|
||||
/*border:1px solid gray;*/
|
||||
background-color:white;
|
||||
}
|
||||
#config-menu li:hover {
|
||||
background:#f0f0f0;
|
||||
}
|
||||
#config-menu .menu-cog {
|
||||
color:#337ab7;
|
||||
/*border:1px solid gray;*/
|
||||
border-bottom-width: 0px;
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
span.top-button {
|
||||
color: white;
|
||||
background-color: #337ab7;
|
||||
text-shadow: 1px 1px 2px black;
|
||||
}
|
||||
|
||||
.noty_bar {
|
||||
box-shadow:3px 3px 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color:#fff0f0;
|
||||
border:1px solid #d7a0a0;
|
||||
}
|
||||
|
||||
form.helper {
|
||||
border:1px solid gray;
|
||||
background-color:#fafafa;
|
||||
box-shadow:3px 3px 6px rgba(0,0,0,0.4);
|
||||
}
|
||||
form.helper div.form-field + h1 {
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper h1 {
|
||||
background-color:#f0f0f0;
|
||||
color:gray !important;
|
||||
border-bottom:1px solid #ccc;
|
||||
}
|
||||
form.helper .buttons {
|
||||
background:#f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
}
|
||||
form.helper fieldset {
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
input[type=range]::-moz-range-track {
|
||||
background-color:white;
|
||||
border:1px solid silver;
|
||||
}
|
||||
.range input[type="text"]:disabled {
|
||||
background-color:#fcfcfc;
|
||||
color:black;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
.online, .offline {
|
||||
background-color:white;
|
||||
}
|
||||
.online:before {color:green;}
|
||||
.offline:before {color:red;}
|
||||
|
||||
.uploader .browser label {
|
||||
background-color:#337ab7;
|
||||
color:white;
|
||||
box-shadow:2px 2px 2px #888888;
|
||||
}
|
||||
.uploader div.browser input {
|
||||
border:solid transparent;
|
||||
}
|
||||
.uploader-progress {
|
||||
background-color:white;
|
||||
}
|
||||
.uploader-progress .file {
|
||||
border:1px solid silver;
|
||||
margin-top:4px;
|
||||
}
|
||||
.uploader-progress .line {
|
||||
background-color:#337ab7;
|
||||
}
|
||||
|
||||
#debug {
|
||||
border:3px double red;
|
||||
background-color:antiquewhite;
|
||||
}
|
||||
#debug h1 {
|
||||
background:darkred;
|
||||
color:white;
|
||||
}
|
||||
|
||||
div.login-area {
|
||||
background-color:rgba(0,0,0,0.9);
|
||||
}
|
||||
dialog .login-header {
|
||||
background-color:#e0e0e0;
|
||||
color:#347ab7;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
.ccopy {
|
||||
color:white;
|
||||
}
|
||||
.login-wait {
|
||||
background-color:rgba(255,255,255,0.9);
|
||||
}
|
||||
.login-error-nouser {
|
||||
color:red;
|
||||
background-color:rgba(255,250,250,0.9);
|
||||
}
|
||||
|
||||
.loadersmall {
|
||||
border:5px solid #f3f3f3;
|
||||
border-top:5px solid #555;
|
||||
}
|
||||
|
||||
|
||||
div.smoothie-chart-tooltip {
|
||||
background: #d0d0d0; /* #fcfccc; */
|
||||
color: black;
|
||||
box-shadow:3px 3px 3px 0px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
body.overview div.smoothie-chart-tooltip {
|
||||
background:#3a3a3a;
|
||||
color:white;
|
||||
}
|
||||
.smoothie-chart-tooltip .black {
|
||||
background-color:#3a3a3a;
|
||||
}
|
||||
.smoothie-chart-tooltip .black .time {
|
||||
color:white;
|
||||
}
|
||||
|
||||
.asplit #cdown {
|
||||
background-color: #f0f0f0;
|
||||
border-top:1px solid silver;
|
||||
box-shadow:inset 0 2px 4px 0px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
#cinfo h2 {
|
||||
color:#337ab7;
|
||||
}
|
||||
|
||||
.copys {
|
||||
background-color:rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
dl#summaryInfo dt {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'keyname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="authkey" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Authkey');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="authkeySettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey name');?>:</span>
|
||||
<input type="text" name="keyname" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey');?>:</span>
|
||||
<textarea name="keysrc" rows="10"></textarea>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'keyname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="authkey" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Authkey');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="authkeySettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey name');?>:</span>
|
||||
<input type="text" name="keyname" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey');?>:</span>
|
||||
<textarea name="keysrc" rows="10"></textarea>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('baseslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="getrepo" class="window-box">
|
||||
<h1><?php echo $this->translate('Compile FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Compile from bases');?></h2>
|
||||
<form class="win" method="post" id="repoSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version number');?>:</span>
|
||||
<input type="text" name="version" value="" pattern="[0-9.]{1,5}" required="required" maxlength="5" />
|
||||
</p>
|
||||
<!--
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version');?>:</span>
|
||||
<input type="radio" name="version" value="release" id="ver1" checked="checked" class="inline"><label for="ver1">Release</label></radio>
|
||||
<input type="radio" name="version" value="stable" id="ver2" class="inline"><label for="ver2">Stable</label></radio>
|
||||
</p>
|
||||
-->
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Repository');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="official"><?php echo $this->translate('Official FreeBSD repository (svn)');?></option>
|
||||
<option value="clonos" selected="selected"><?php echo $this->translate('Clonos repository');?></option>
|
||||
<option value="own"><?php echo $this->translate('Your own repository');?></option>
|
||||
<option value="neighbor"><?php echo $this->translate('Neighbor node');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('baseslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="getrepo" class="window-box">
|
||||
<h1><?php echo $this->translate('Compile FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Compile from bases');?></h2>
|
||||
<form class="win" method="post" id="repoSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version number');?>:</span>
|
||||
<input type="text" name="version" value="" pattern="[0-9.]{1,5}" required="required" maxlength="5" />
|
||||
</p>
|
||||
<!--
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version');?>:</span>
|
||||
<input type="radio" name="version" value="release" id="ver1" checked="checked" class="inline"><label for="ver1">Release</label></radio>
|
||||
<input type="radio" name="version" value="stable" id="ver2" class="inline"><label for="ver2">Stable</label></radio>
|
||||
</p>
|
||||
-->
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Repository');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="official"><?php echo $this->translate('Official FreeBSD repository (svn)');?></option>
|
||||
<option value="clonos" selected="selected"><?php echo $this->translate('Clonos repository');?></option>
|
||||
<option value="own"><?php echo $this->translate('Your own repository');?></option>
|
||||
<option value="neighbor"><?php echo $this->translate('Neighbor node');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('baseslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="basescompile" class="window-box">
|
||||
<h1><?php echo $this->translate('Compile FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Compile from sources');?></h2>
|
||||
<form class="win" method="post" id="basesSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Sources version');?>:</span>
|
||||
<select name="sources">
|
||||
<?php $this->getBasesCompileList(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Source');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="clonos"><?php echo $this->translate('Clonos repository');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('baseslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="basescompile" class="window-box">
|
||||
<h1><?php echo $this->translate('Compile FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Compile from sources');?></h2>
|
||||
<form class="win" method="post" id="basesSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Sources version');?>:</span>
|
||||
<select name="sources">
|
||||
<?php $this->getBasesCompileList(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Source');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="clonos"><?php echo $this->translate('Clonos repository');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="bhyve-clone" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Clone Virtual Machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Cloned Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveCloneSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Clone');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="bhyve-clone" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Clone Virtual Machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Cloned Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveCloneSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Clone');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,102 +1,102 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'vm_size':'You need type «g» char after numbers',
|
||||
'vm_ram':'You need type «g» char after numbers',
|
||||
});
|
||||
<?php
|
||||
//print_r($this->config->os_types);exit;
|
||||
?>
|
||||
</script>
|
||||
<dialog id="bhyve-new" class="window-box">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create Virtual Machine');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit Virtual Machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM OS profile');?>:</span>
|
||||
<select name="vm_os_profile" onchange="clonos.onChangeOsProfile(this,event);">
|
||||
<?php echo $this->config->os_types_create(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM template (cpu, ram, hdd)');?>:</span>
|
||||
<select name="vm_packages" onchange="clonos.onChangePkgTemplate(this,event);">
|
||||
<?php $vm_res=$this->config->vm_packages_list(); echo $vm_res['html']; ?>
|
||||
</select>
|
||||
<script type="text/javascript">clonos.vm_packages_new_min_id=<?php echo $vm_res['min_id']; ?>;</script>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM CPUs');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus" oninput="rngCpusShow.value=rngCpus.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow" value="1" name="vm_cpus_show" />
|
||||
<!-- input type="text" name="vm_cpus" value="" pattern="[0-9]+" placeholder="1" required="required" / -->
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM RAM');?>:</span>
|
||||
<!-- <input type="text" name="vm_ram" value="" pattern="^[0-9]+\s*(g|gb|mb|m|t|tb)$" placeholder="1g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_ram" class="vHorizon" min="1" max="64" value="1" style="margin:6px 0;" id="rngRam" oninput="rngRamShow.value=rngRam.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngRamShow" value="1" name="vm_ram_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM Image size');?>:</span>
|
||||
<!-- <input type="text" name="vm_size" value="" pattern="^[0-9]+(g|gb|t|tb)$" placeholder="10g" required="required" class="edit-disable" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_imgsize" class="vHorizon" min="20" max="866" value="20" style="margin:6px 0;" id="rngImgsize" oninput="rngImgsizeShow.value=rngImgsize.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngImgsizeShow" value="1" name="vm_imgsize_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Attached boot ISO image');?>:</span>
|
||||
<select name="vm_iso_image">
|
||||
<option value="-2"></option>
|
||||
<option value="-1" selected>Profile default ISO</option>
|
||||
<?php echo $this->media_iso_list_html(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC IP address');?>:</span>
|
||||
<input type="radio" name="bhyve_vnc_tcp_bind" value="127.0.0.1" id="vncip0" checked="checked" class="inline"><label for="vncip0">127.0.0.1</label></radio>
|
||||
<input type="radio" name="bhyve_vnc_tcp_bind" value="0.0.0.0" id="vncip1" class="inline"><label for="vncip1">0.0.0.0</label></radio>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC PORT');?>:</span>
|
||||
<input type="text" name="vm_vnc_port" value="" placeholder="0" maxlength="5" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC Password');?>:</span>
|
||||
<input type="password" name="vm_vnc_password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('use to log in VNC console');?></small>
|
||||
</p>
|
||||
<!-- <p>
|
||||
<span class="field-name"><?php echo $this->translate('CD-ROM ISO');?>:</span>
|
||||
<select name="cd-rom">
|
||||
<option value="profile">profile</option>
|
||||
</select>
|
||||
</p>
|
||||
--> <p>
|
||||
<span class="field-name"><?php echo $this->translate('Net Interface');?>:</span>
|
||||
<!-- <input type="radio" name="interface" value="auto" id="rint0" checked="checked" class="inline"><label for="rint0">auto</label></radio> -->
|
||||
<select name="interface">
|
||||
<option value="auto">auto</option>
|
||||
<?php echo $this->get_interfaces_html(); ?>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'vm_size':'You need type «g» char after numbers',
|
||||
'vm_ram':'You need type «g» char after numbers',
|
||||
});
|
||||
<?php
|
||||
//print_r($this->config->os_types);exit;
|
||||
?>
|
||||
</script>
|
||||
<dialog id="bhyve-new" class="window-box">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create Virtual Machine');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit Virtual Machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM OS profile');?>:</span>
|
||||
<select name="vm_os_profile" onchange="clonos.onChangeOsProfile(this,event);">
|
||||
<?php echo $this->config->os_types_create(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM template (cpu, ram, hdd)');?>:</span>
|
||||
<select name="vm_packages" onchange="clonos.onChangePkgTemplate(this,event);">
|
||||
<?php $vm_res=$this->config->vm_packages_list(); echo $vm_res['html']; ?>
|
||||
</select>
|
||||
<script type="text/javascript">clonos.vm_packages_new_min_id=<?php echo $vm_res['min_id']; ?>;</script>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM CPUs');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus" oninput="rngCpusShow.value=rngCpus.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow" value="1" name="vm_cpus_show" />
|
||||
<!-- input type="text" name="vm_cpus" value="" pattern="[0-9]+" placeholder="1" required="required" / -->
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM RAM');?>:</span>
|
||||
<!-- <input type="text" name="vm_ram" value="" pattern="^[0-9]+\s*(g|gb|mb|m|t|tb)$" placeholder="1g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_ram" class="vHorizon" min="1" max="64" value="1" style="margin:6px 0;" id="rngRam" oninput="rngRamShow.value=rngRam.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngRamShow" value="1" name="vm_ram_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('VM Image size');?>:</span>
|
||||
<!-- <input type="text" name="vm_size" value="" pattern="^[0-9]+(g|gb|t|tb)$" placeholder="10g" required="required" class="edit-disable" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_imgsize" class="vHorizon" min="20" max="866" value="20" style="margin:6px 0;" id="rngImgsize" oninput="rngImgsizeShow.value=rngImgsize.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngImgsizeShow" value="1" name="vm_imgsize_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Attached boot ISO image');?>:</span>
|
||||
<select name="vm_iso_image">
|
||||
<option value="-2"></option>
|
||||
<option value="-1" selected>Profile default ISO</option>
|
||||
<?php echo $this->media_iso_list_html(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC IP address');?>:</span>
|
||||
<input type="radio" name="bhyve_vnc_tcp_bind" value="127.0.0.1" id="vncip0" checked="checked" class="inline"><label for="vncip0">127.0.0.1</label></radio>
|
||||
<input type="radio" name="bhyve_vnc_tcp_bind" value="0.0.0.0" id="vncip1" class="inline"><label for="vncip1">0.0.0.0</label></radio>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC PORT');?>:</span>
|
||||
<input type="text" name="vm_vnc_port" value="" placeholder="0" maxlength="5" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC Password');?>:</span>
|
||||
<input type="password" name="vm_vnc_password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('use to log in VNC console');?></small>
|
||||
</p>
|
||||
<!-- <p>
|
||||
<span class="field-name"><?php echo $this->translate('CD-ROM ISO');?>:</span>
|
||||
<select name="cd-rom">
|
||||
<option value="profile">profile</option>
|
||||
</select>
|
||||
</p>
|
||||
--> <p>
|
||||
<span class="field-name"><?php echo $this->translate('Net Interface');?>:</span>
|
||||
<!-- <input type="radio" name="interface" value="auto" id="rint0" checked="checked" class="inline"><label for="rint0">auto</label></radio> -->
|
||||
<select name="interface">
|
||||
<option value="auto">auto</option>
|
||||
<?php echo $this->get_interfaces_html(); ?>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,84 +1,84 @@
|
||||
<dialog id="bhyve-obtain" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Virtual Machine from Library');?></h1>
|
||||
<h2><?php echo $this->translate('Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveObtSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM OS profile');?>:</span>
|
||||
<select name="vm_os_profile" onchange="clonos.onChangeOsProfile(this,event);">
|
||||
<?php echo $this->config->os_types_create('obtain'); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM template (cpu, ram, hdd)');?>:</span>
|
||||
<select name="vm_packages" onchange="clonos.onChangePkgTemplate(this,event);">
|
||||
<?php $vm_res=$this->config->vm_packages_list(); echo $vm_res['html']; ?>
|
||||
</select>
|
||||
<script type="text/javascript">clonos.vm_packages_obtain_min_id=<?php echo $vm_res['min_id']; ?>;</script>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM CPUs');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus1" oninput="rngCpusShow1.value=rngCpus1.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow1" value="1" name="vm_cpus_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM RAM');?>:</span>
|
||||
<!-- <input type="text" name="vm_ram" value="" pattern="^[0-9]+(g|gb|mb|m)$" placeholder="1g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_ram" class="vHorizon" min="1" max="64" value="1" style="margin:6px 0;" id="rngRam1" oninput="rngRamShow1.value=rngRam1.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngRamShow1" value="1" name="vm_ram_show" />
|
||||
</span>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM Image size');?>:</span>
|
||||
<!-- <input type="text" name="vm_size" value="" pattern="^[0-9]+(g|gb|mb|m|t|tb)$" placeholder="10g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_size" class="vHorizon" min="20" max="866" value="20" style="margin:6px 0;" id="rngImgsize1" oninput="rngImgsizeShow1.value=rngImgsize1.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngImgsizeShow1" value="1" name="vm_imgsize_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Gateway');?>:</span>
|
||||
<input type="text" name="gateway" value="10.0.0.1" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Mask');?>:</span>
|
||||
<input type="text" name="mask" value="255.255.255.0" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM Password');?>:</span>
|
||||
<input type="password" name="vm_password" value="cbsd" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('default is');?>: «cbsd»</small>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('USER Password');?>:</span>
|
||||
<input type="password" name="user_password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('напиши осознанный текст');?></small>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey');?>:</span>
|
||||
<select name="vm_authkey">
|
||||
<?php echo $this->config->authkeys_list(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC Password');?>:</span>
|
||||
<input type="password" name="vnc_password" value="cbsd" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('use to log in VNC. Default is');?>: cbsd</small>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
<dialog id="bhyve-obtain" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Virtual Machine from Library');?></h1>
|
||||
<h2><?php echo $this->translate('Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveObtSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM OS profile');?>:</span>
|
||||
<select name="vm_os_profile" onchange="clonos.onChangeOsProfile(this,event);">
|
||||
<?php echo $this->config->os_types_create('obtain'); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Virtual Machine name');?>:</span>
|
||||
<input type="text" name="vm_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{1,}" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM template (cpu, ram, hdd)');?>:</span>
|
||||
<select name="vm_packages" onchange="clonos.onChangePkgTemplate(this,event);">
|
||||
<?php $vm_res=$this->config->vm_packages_list(); echo $vm_res['html']; ?>
|
||||
</select>
|
||||
<script type="text/javascript">clonos.vm_packages_obtain_min_id=<?php echo $vm_res['min_id']; ?>;</script>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM CPUs');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus1" oninput="rngCpusShow1.value=rngCpus1.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow1" value="1" name="vm_cpus_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM RAM');?>:</span>
|
||||
<!-- <input type="text" name="vm_ram" value="" pattern="^[0-9]+(g|gb|mb|m)$" placeholder="1g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_ram" class="vHorizon" min="1" max="64" value="1" style="margin:6px 0;" id="rngRam1" oninput="rngRamShow1.value=rngRam1.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngRamShow1" value="1" name="vm_ram_show" />
|
||||
</span>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM Image size');?>:</span>
|
||||
<!-- <input type="text" name="vm_size" value="" pattern="^[0-9]+(g|gb|mb|m|t|tb)$" placeholder="10g" required="required" /> -->
|
||||
<span class="range">
|
||||
<input type="range" name="vm_size" class="vHorizon" min="20" max="866" value="20" style="margin:6px 0;" id="rngImgsize1" oninput="rngImgsizeShow1.value=rngImgsize1.value+'g'" />
|
||||
<input type="text" disabled="disabled" id="rngImgsizeShow1" value="1" name="vm_imgsize_show" />
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Gateway');?>:</span>
|
||||
<input type="text" name="gateway" value="10.0.0.1" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Mask');?>:</span>
|
||||
<input type="text" name="mask" value="255.255.255.0" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM Password');?>:</span>
|
||||
<input type="password" name="vm_password" value="cbsd" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('default is');?>: «cbsd»</small>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('USER Password');?>:</span>
|
||||
<input type="password" name="user_password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('напиши осознанный текст');?></small>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Authkey');?>:</span>
|
||||
<select name="vm_authkey">
|
||||
<?php echo $this->config->authkeys_list(); ?>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VNC Password');?>:</span>
|
||||
<input type="password" name="vnc_password" value="cbsd" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input> <small>— <?php echo $this->translate('use to log in VNC. Default is');?>: cbsd</small>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="bhyve-rename" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Rename virtual machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Renamed Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveRenameSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@rename_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Rename');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="bhyve-rename" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Rename virtual machine');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Renamed Virtual Machine Settings');?></h2>
|
||||
<form class="win" method="post" id="bhyveRenameSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@rename_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('VM name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Rename');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<dialog id="helpers-add" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Helpers add');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Select helpers for install');?></h2>
|
||||
<form class="win" method="post" id="helpersAddSettings" onsubmit="return false;">
|
||||
<div class="window-content"></div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog id="helpers-add" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Helpers add');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Select helpers for install');?></h2>
|
||||
<form class="win" method="post" id="helpersAddSettings" onsubmit="return false;">
|
||||
<div class="window-content"></div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="image-import" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Image Import');?></span>
|
||||
<!-- <span class="edit"><?php echo $this->translate('Edit jail');?></span> -->
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="imageImportSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('New name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
<div class="inp_comment" id="name_comment"></div>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<input type="hidden" name="file_id" value="" />
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Import');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="image-import" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Image Import');?></span>
|
||||
<!-- <span class="edit"><?php echo $this->translate('Edit jail');?></span> -->
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="imageImportSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('New name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
<div class="inp_comment" id="name_comment"></div>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<input type="hidden" name="file_id" value="" />
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Import');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'host_hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-clone" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Clone jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Cloned Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailCloneSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@clone_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Clone');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'host_hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-clone" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Clone jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Cloned Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailCloneSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@clone_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Clone');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-import" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Import jail');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Jail Import');?></h2>
|
||||
<form class="win" method="post" id="jailImport" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<!-- D&D Markup -->
|
||||
<div id="drag-and-drop-zone" class="uploader">
|
||||
<div>Drag & Drop Files Here</div>
|
||||
<div class="or">-or-</div>
|
||||
<div class="browser">
|
||||
<label>
|
||||
<span>Click to open the file Browser</span>
|
||||
<input type="file" name="jimp_files[]" multiple="multiple" title='Click to add Files'>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uploader-progress"></div>
|
||||
<!-- /D&D Markup -->
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-import" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Import jail');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Jail Import');?></h2>
|
||||
<form class="win" method="post" id="jailImport" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<!-- D&D Markup -->
|
||||
<div id="drag-and-drop-zone" class="uploader">
|
||||
<div>Drag & Drop Files Here</div>
|
||||
<div class="or">-or-</div>
|
||||
<div class="browser">
|
||||
<label>
|
||||
<span>Click to open the file Browser</span>
|
||||
<input type="file" name="jimp_files[]" multiple="multiple" title='Click to add Files'>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uploader-progress"></div>
|
||||
<!-- /D&D Markup -->
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">clonos.fileUploadPrepare();</script>
|
||||
@@ -1,36 +1,36 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-rename" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Rename jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Renamed Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailRenameSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@rename_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Rename');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-rename" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Rename jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Renamed Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailRenameSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p class="warning" style="width:400px;">
|
||||
<?php echo $this->translate('@rename_warning@'); ?>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Rename');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<div id="config-menu" style="display:none;">
|
||||
<span class="icon-cog menu-cog"></span>
|
||||
<ul>
|
||||
<li class="icon-edit" id="jddm-rename"> <?php echo $this->translate('rename');?></li>
|
||||
<li class="icon-pencil" id="jddm-edit"> <?php echo $this->translate('edit');?></li>
|
||||
<li class="icon-docs" id="jddm-clone"> <?php echo $this->translate('clone');?></li>
|
||||
<li class="icon-gift" id="jddm-export"> <?php echo $this->translate('export');?></li>
|
||||
<li class="icon-cubes" id="jddm-helpers"> <?php echo $this->translate('helpers');?></li>
|
||||
</ul>
|
||||
<div id="config-menu" style="display:none;">
|
||||
<span class="icon-cog menu-cog"></span>
|
||||
<ul>
|
||||
<li class="icon-edit" id="jddm-rename"> <?php echo $this->translate('rename');?></li>
|
||||
<li class="icon-pencil" id="jddm-edit"> <?php echo $this->translate('edit');?></li>
|
||||
<li class="icon-docs" id="jddm-clone"> <?php echo $this->translate('clone');?></li>
|
||||
<li class="icon-gift" id="jddm-export"> <?php echo $this->translate('export');?></li>
|
||||
<li class="icon-cubes" id="jddm-helpers"> <?php echo $this->translate('helpers');?></li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -1,75 +1,75 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
'rootpass':'<?php echo $this->translate("Password can not be less than 3 symbols");?>',
|
||||
'rootpass1':'<?php echo $this->translate("Please retype password correctly");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-settings" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create jail');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
<!--
|
||||
<small class="astart-warn">— <?php echo $this->translate('available on the jail is not running');?></small>
|
||||
-->
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Root password');?>:</span>
|
||||
<input type="password" name="user_pw_root" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Root password (again)');?>:</span>
|
||||
<input type="password" name="user_pw_root_1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Net Interface');?>:</span>
|
||||
<input type="radio" name="interface" value="auto" id="rint0" checked="checked" class="inline"><label for="rint0">auto</label></radio>
|
||||
<input type="radio" name="interface" value="lo0" id="rint2" class="inline"><label for="rint2">lo0</label></radio>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Parameters');?>:</span>
|
||||
<input type="checkbox" name="baserw" id="bwritable-id" /><label for="bwritable-id"> <?php echo $this->translate('Base writable');?>?</label>
|
||||
<br />
|
||||
<input type="checkbox" name="mount_ports" id="mount-id" /><label for="mount-id"> <?php echo $this->translate('Mount');?> /usr/ports?</label>
|
||||
<br />
|
||||
<input type="checkbox" name="astart" id="astart-id" /><label for="astart-id"> <?php echo $this->translate('Autostart jail at system startup');?></label>
|
||||
<br />
|
||||
<input type="checkbox" name="vnet" id="vnet-id" /><label for="vnet-id"> <?php echo $this->translate('Virtual network stack (VIMAGE)');?></label>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Enabled services');?>:</span>
|
||||
<input type="checkbox" name="serv-ftpd" value="ftpd" id="esrv0" class="inline"><label for="esrv0">ftpd</label></checkbox>
|
||||
<input type="checkbox" name="serv-sshd" value="sshd" id="esrv1" class="inline"><label for="esrv1">sshd</label></checkbox>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
|
||||
/*
|
||||
сложное правило для пароля: цифры, буквы маленькие и заглавные, плюс спецсимволы
|
||||
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,20}$
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'jname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'hostname':'<?php echo $this->translate("This field can not be empty");?>',
|
||||
'ip':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
'rootpass':'<?php echo $this->translate("Password can not be less than 3 symbols");?>',
|
||||
'rootpass1':'<?php echo $this->translate("Please retype password correctly");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="jail-settings" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create jail');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit jail');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Jail Settings');?></h2>
|
||||
<form class="win" method="post" id="jailSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Jail name');?>:</span>
|
||||
<input type="text" name="jname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Hostname');?> (FQDN):</span>
|
||||
<input type="text" name="host_hostname" value="" required="required" />
|
||||
<!--
|
||||
<small class="astart-warn">— <?php echo $this->translate('available on the jail is not running');?></small>
|
||||
-->
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('IP address');?>:</span>
|
||||
<input type="text" name="ip4_addr" value="DHCP" pattern="^DHCP$|^DHCP[vV]6$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Root password');?>:</span>
|
||||
<input type="password" name="user_pw_root" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Root password (again)');?>:</span>
|
||||
<input type="password" name="user_pw_root_1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20"></input>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Net Interface');?>:</span>
|
||||
<input type="radio" name="interface" value="auto" id="rint0" checked="checked" class="inline"><label for="rint0">auto</label></radio>
|
||||
<input type="radio" name="interface" value="lo0" id="rint2" class="inline"><label for="rint2">lo0</label></radio>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Parameters');?>:</span>
|
||||
<input type="checkbox" name="baserw" id="bwritable-id" /><label for="bwritable-id"> <?php echo $this->translate('Base writable');?>?</label>
|
||||
<br />
|
||||
<input type="checkbox" name="mount_ports" id="mount-id" /><label for="mount-id"> <?php echo $this->translate('Mount');?> /usr/ports?</label>
|
||||
<br />
|
||||
<input type="checkbox" name="astart" id="astart-id" /><label for="astart-id"> <?php echo $this->translate('Autostart jail at system startup');?></label>
|
||||
<br />
|
||||
<input type="checkbox" name="vnet" id="vnet-id" /><label for="vnet-id"> <?php echo $this->translate('Virtual network stack (VIMAGE)');?></label>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('Enabled services');?>:</span>
|
||||
<input type="checkbox" name="serv-ftpd" value="ftpd" id="esrv0" class="inline"><label for="esrv0">ftpd</label></checkbox>
|
||||
<input type="checkbox" name="serv-sshd" value="sshd" id="esrv1" class="inline"><label for="esrv1">sshd</label></checkbox>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
|
||||
/*
|
||||
сложное правило для пароля: цифры, буквы маленькие и заглавные, плюс спецсимволы
|
||||
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,20}$
|
||||
*/
|
||||
@@ -1,87 +1,87 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="k8s-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create Kubernetes');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('create master node and workers');?></h2>
|
||||
<form class="win" method="post" id="k8sNewSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Cluster name');?>:</span>
|
||||
<input type="text" name="cname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Nodes count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_nodes" class="vHorizon" min="1" max="7" value="1" style="margin:6px 0;" id="rngMNodes" oninput="rngMNodesShow.value=rngMNodes.value">
|
||||
<input type="text" disabled="disabled" id="rngMNodesShow" value="1" name="master_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Nodes RAM size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_ram" class="vHorizon" min="1" max="8" value="1" style="margin:6px 0;" id="rngMRam" oninput="rngMRamShow.value=rngMRam.value+'g'">
|
||||
<input type="text" disabled="disabled" id="rngMRamShow" value="1g" name="master_ram_size">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Node CPUs count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngMCpus" oninput="rngMCpusShow.value=rngMCpus.value">
|
||||
<input type="text" disabled="disabled" id="rngMCpusShow" value="1" name="master_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Node Image size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_img" class="vHorizon" min="10" max="40" value="10" style="margin:6px 0;" id="rngMImg" oninput="rngMImgShow.value=rngMImg.value+'gb'">
|
||||
<input type="text" disabled="disabled" id="rngMImgShow" value="10gb" name="master_img_size">
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_nodes" class="vHorizon" min="0" max="8" value="0" style="margin:6px 0;" id="rngWNodes" oninput="rngWNodesShow.value=rngWNodes.value">
|
||||
<input type="text" disabled="disabled" id="rngWNodesShow" value="0" name="worker_nodes_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes RAM size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_ram" class="vHorizon" min="1" max="8" value="1" style="margin:6px 0;" id="rngWRam" oninput="rngWRamShow.value=rngWRam.value+'g'">
|
||||
<input type="text" disabled="disabled" id="rngWRamShow" value="1g" name="worker_ram_size">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes CPUs count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngWCpus" oninput="rngWCpusShow.value=rngWCpus.value">
|
||||
<input type="text" disabled="disabled" id="rngWCpusShow" value="1" name="worker_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes Image size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_img" class="vHorizon" min="10" max="40" value="10" style="margin:6px 0;" id="rngWImg" oninput="rngWImgShow.value=rngWImg.value+'gb'">
|
||||
<input type="text" disabled="disabled" id="rngWImgShow" value="10gb" name="worker_img_size">
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Parameters');?>:</span>
|
||||
<input type="checkbox" name="pv_enable" id="pvenable-id"><label for="pvenable-id"> <?php echo $this->translate('PV on or off');?></label>
|
||||
<br>
|
||||
<input type="checkbox" name="kubelet_master" id="kubmaster-id"><label for="kubmaster-id"> <?php echo $this->translate('Master and Worker is a same thing');?></label>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'vm_name':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="k8s-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Create Kubernetes');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('create master node and workers');?></h2>
|
||||
<form class="win" method="post" id="k8sNewSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Cluster name');?>:</span>
|
||||
<input type="text" name="cname" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-disable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Nodes count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_nodes" class="vHorizon" min="1" max="7" value="1" style="margin:6px 0;" id="rngMNodes" oninput="rngMNodesShow.value=rngMNodes.value">
|
||||
<input type="text" disabled="disabled" id="rngMNodesShow" value="1" name="master_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Nodes RAM size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_ram" class="vHorizon" min="1" max="8" value="1" style="margin:6px 0;" id="rngMRam" oninput="rngMRamShow.value=rngMRam.value+'g'">
|
||||
<input type="text" disabled="disabled" id="rngMRamShow" value="1g" name="master_ram_size">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Node CPUs count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngMCpus" oninput="rngMCpusShow.value=rngMCpus.value">
|
||||
<input type="text" disabled="disabled" id="rngMCpusShow" value="1" name="master_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Master Node Image size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="master_img" class="vHorizon" min="10" max="40" value="10" style="margin:6px 0;" id="rngMImg" oninput="rngMImgShow.value=rngMImg.value+'gb'">
|
||||
<input type="text" disabled="disabled" id="rngMImgShow" value="10gb" name="master_img_size">
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_nodes" class="vHorizon" min="0" max="8" value="0" style="margin:6px 0;" id="rngWNodes" oninput="rngWNodesShow.value=rngWNodes.value">
|
||||
<input type="text" disabled="disabled" id="rngWNodesShow" value="0" name="worker_nodes_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes RAM size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_ram" class="vHorizon" min="1" max="8" value="1" style="margin:6px 0;" id="rngWRam" oninput="rngWRamShow.value=rngWRam.value+'g'">
|
||||
<input type="text" disabled="disabled" id="rngWRamShow" value="1g" name="worker_ram_size">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes CPUs count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngWCpus" oninput="rngWCpusShow.value=rngWCpus.value">
|
||||
<input type="text" disabled="disabled" id="rngWCpusShow" value="1" name="worker_cpus_count">
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Worker Nodes Image size');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="worker_img" class="vHorizon" min="10" max="40" value="10" style="margin:6px 0;" id="rngWImg" oninput="rngWImgShow.value=rngWImg.value+'gb'">
|
||||
<input type="text" disabled="disabled" id="rngWImgShow" value="10gb" name="worker_img_size">
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Parameters');?>:</span>
|
||||
<input type="checkbox" name="pv_enable" id="pvenable-id"><label for="pvenable-id"> <?php echo $this->translate('PV on or off');?></label>
|
||||
<br>
|
||||
<input type="checkbox" name="kubelet_master" id="kubmaster-id"><label for="kubmaster-id"> <?php echo $this->translate('Master and Worker is a same thing');?></label>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({});
|
||||
</script>
|
||||
<dialog id="media-upload" class="window-box">
|
||||
<h1><?php echo $this->translate('Add Storage Media');?></h1>
|
||||
<h2><?php echo $this->translate('Upload ISO');?></h2>
|
||||
<form class="win" method="post" id="mediaSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<!-- D&D Markup -->
|
||||
<div id="drag-and-drop-zone" class="uploader">
|
||||
<div>Drag & Drop Files Here</div>
|
||||
<div class="or">-or-</div>
|
||||
<div class="browser">
|
||||
<label>
|
||||
<span>Click to open the file Browser</span>
|
||||
<input type="file" name="files[]" multiple="multiple" title='Click to add Files'>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uploader-progress"></div>
|
||||
<!-- /D&D Markup -->
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">clonos.fileUploadPrepare();</script>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({});
|
||||
</script>
|
||||
<dialog id="media-upload" class="window-box">
|
||||
<h1><?php echo $this->translate('Add Storage Media');?></h1>
|
||||
<h2><?php echo $this->translate('Upload ISO');?></h2>
|
||||
<form class="win" method="post" id="mediaSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<!-- D&D Markup -->
|
||||
<div id="drag-and-drop-zone" class="uploader">
|
||||
<div>Drag & Drop Files Here</div>
|
||||
<div class="or">-or-</div>
|
||||
<div class="browser">
|
||||
<label>
|
||||
<span>Click to open the file Browser</span>
|
||||
<input type="file" name="files[]" multiple="multiple" title='Click to add Files'>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uploader-progress"></div>
|
||||
<!-- /D&D Markup -->
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">clonos.fileUploadPrepare();</script>
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'netname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'network':'<?php echo $this->translate("Write something");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="media" class="window-box">
|
||||
<h1><?php echo $this->translate('Add Storage Media');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="mediaSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Media name');?>:</span>
|
||||
<input type="text" name="medianame" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Path');?>:</span>
|
||||
<input type="text" name="mediapath" value="" pattern=".+" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'netname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'network':'<?php echo $this->translate("Write something");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="media" class="window-box">
|
||||
<h1><?php echo $this->translate('Add Storage Media');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="mediaSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Media name');?>:</span>
|
||||
<input type="text" name="medianame" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Path');?>:</span>
|
||||
<input type="text" name="mediapath" value="" pattern=".+" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<dialog id="settings-getupdate" class="window-box tasklog">
|
||||
<h1><?php echo $this->translate('Settings update');?></h1>
|
||||
<div class="window-content">
|
||||
Check for updates…
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get updates');?>" class="new button ok-but hidden">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog id="settings-getupdate" class="window-box tasklog">
|
||||
<h1><?php echo $this->translate('Settings update');?></h1>
|
||||
<div class="window-content">
|
||||
Check for updates…
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get updates');?>" class="new button ok-but hidden">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('srcslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="srcget" class="window-box">
|
||||
<h1><?php echo $this->translate('Get Sources FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Get Version');?></h2>
|
||||
<form class="win" method="post" id="srcSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version number');?>:</span>
|
||||
<input type="text" name="version" value="" pattern="[0-9.]{1,5}" required="required" maxlength="5" />
|
||||
</p>
|
||||
<!--
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version');?>:</span>
|
||||
<input type="radio" name="version" value="release" id="ver1" checked="checked" class="inline"><label for="ver1">Release</label></radio>
|
||||
<input type="radio" name="version" value="stable" id="ver2" class="inline"><label for="ver2">Stable</label></radio>
|
||||
</p>
|
||||
-->
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Repository');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="official"><?php echo $this->translate('Official FreeBSD repository (svn)');?></option>
|
||||
<option value="clonos"><?php echo $this->translate('Clonos repository');?></option>
|
||||
<option value="own"><?php echo $this->translate('Your own repository');?></option>
|
||||
<option value="neighbor"><?php echo $this->translate('Neighbor node');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,20}$
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'version':'<?php echo $this->translate("Can not be empty. Name must be with a numbers and dot symbol");?>',
|
||||
});
|
||||
src_table_pattern='<?php $res=$this->getTableChunk('srcslist','tbody'); echo str_replace(array("\n","\r","\t"),'',$res[1]);?>';
|
||||
</script>
|
||||
<dialog id="srcget" class="window-box">
|
||||
<h1><?php echo $this->translate('Get Sources FreeBSD');?></h1>
|
||||
<h2><?php echo $this->translate('Get Version');?></h2>
|
||||
<form class="win" method="post" id="srcSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version number');?>:</span>
|
||||
<input type="text" name="version" value="" pattern="[0-9.]{1,5}" required="required" maxlength="5" />
|
||||
</p>
|
||||
<!--
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Version');?>:</span>
|
||||
<input type="radio" name="version" value="release" id="ver1" checked="checked" class="inline"><label for="ver1">Release</label></radio>
|
||||
<input type="radio" name="version" value="stable" id="ver2" class="inline"><label for="ver2">Stable</label></radio>
|
||||
</p>
|
||||
-->
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Repository');?>:</span>
|
||||
<select name="repository" disabled="disabled">
|
||||
<option value="official"><?php echo $this->translate('Official FreeBSD repository (svn)');?></option>
|
||||
<option value="clonos"><?php echo $this->translate('Clonos repository');?></option>
|
||||
<option value="own"><?php echo $this->translate('Your own repository');?></option>
|
||||
<option value="neighbor"><?php echo $this->translate('Neighbor node');?></option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Get');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<?php
|
||||
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,20}$
|
||||
*/
|
||||
@@ -1,20 +1,20 @@
|
||||
<dialog id="login" class="window-box">
|
||||
<div class="login-wait hide"><div class="loadersmall"></div></div>
|
||||
<div class="login-error-nouser hide"><?php echo $this->translate('<span class="icon-attention" style="font-size:large;"></span> Error! User not found!'); ?></div>
|
||||
<div class="login-header"><span class="icon-expeditedssl"></span><?php echo $this->translate('Login');?></div>
|
||||
<form class="win" method="post" id="loginData" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Login');?>:</span>
|
||||
<input type="text" name="login" value="" autofocus />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Password');?>:</span>
|
||||
<input type="password" name="password" value="" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Go to the system');?>" class="button ok-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog id="login" class="window-box">
|
||||
<div class="login-wait hide"><div class="loadersmall"></div></div>
|
||||
<div class="login-error-nouser hide"><?php echo $this->translate('<span class="icon-attention" style="font-size:large;"></span> Error! User not found!'); ?></div>
|
||||
<div class="login-header"><span class="icon-expeditedssl"></span><?php echo $this->translate('Login');?></div>
|
||||
<form class="win" method="post" id="loginData" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Login');?>:</span>
|
||||
<input type="text" name="login" value="" autofocus />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Password');?>:</span>
|
||||
<input type="password" name="password" value="" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Go to the system');?>" class="button ok-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<dialog id="tasklog" class="window-box tasklog">
|
||||
<h1><?php echo $this->translate('Task log');?></h1>
|
||||
<div class="window-content">
|
||||
Task log here…
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog id="tasklog" class="window-box tasklog">
|
||||
<h1><?php echo $this->translate('Task log');?></h1>
|
||||
<div class="window-content">
|
||||
Task log here…
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Close');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,57 +1,57 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'username':'<?php echo $this->translate("CHANGE THIS TEXT!!! Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'first_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
'last_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="users-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Add new user');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit user info');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('User Settings');?></h2>
|
||||
<form class="win" method="post" id="userSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User name');?>:</span>
|
||||
<input type="text" name="username" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('User password');?>:</span>
|
||||
<input type="password" name="password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" class="edit-disable"></input>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('User password (again)');?>:</span>
|
||||
<input type="password" name="password1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" class="edit-disable"></input>
|
||||
</p>
|
||||
<fieldset class="edit full">
|
||||
<legend><input type="checkbox" id="letsedit-1" class="letsedit" /><label for="letsedit-1"> <?php echo $this->translate('Change the password');?>:</label></legend>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User password');?>:</span>
|
||||
<input type="password" name="password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" disabled></input>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User password (again)');?>:</span>
|
||||
<input type="password" name="password1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" disabled></input>
|
||||
</p>
|
||||
</fieldset>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('First name');?>:</span>
|
||||
<input type="text" name="first_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Last name');?>:</span>
|
||||
<input type="text" name="last_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" name="actuser" id="actuser" /><label for="actuser"> <?php echo $this->translate('Activate user');?></label>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'username':'<?php echo $this->translate("CHANGE THIS TEXT!!! Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'first_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
'last_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="users-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Add new user');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit user info');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('User Settings');?></h2>
|
||||
<form class="win" method="post" id="userSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User name');?>:</span>
|
||||
<input type="text" name="username" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('User password');?>:</span>
|
||||
<input type="password" name="password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" class="edit-disable"></input>
|
||||
</p>
|
||||
<p class="new">
|
||||
<span class="field-name"><?php echo $this->translate('User password (again)');?>:</span>
|
||||
<input type="password" name="password1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" class="edit-disable"></input>
|
||||
</p>
|
||||
<fieldset class="edit full">
|
||||
<legend><input type="checkbox" id="letsedit-1" class="letsedit" /><label for="letsedit-1"> <?php echo $this->translate('Change the password');?>:</label></legend>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User password');?>:</span>
|
||||
<input type="password" name="password" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" disabled></input>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('User password (again)');?>:</span>
|
||||
<input type="password" name="password1" value="" placeholder="3-20 symbols" pattern=".{3,20}" maxlength="20" disabled></input>
|
||||
</p>
|
||||
</fieldset>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('First name');?>:</span>
|
||||
<input type="text" name="first_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Last name');?>:</span>
|
||||
<input type="text" name="last_name" value="" pattern="[^0-9]{1}[a-zA-Z0-9]{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" name="actuser" id="actuser" /><label for="actuser"> <?php echo $this->translate('Activate user');?></label>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
@@ -1,46 +1,46 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'name':'<?php echo $this->translate("CHANGE THIS TEXT!!! Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'first_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
'last_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="vm_packages-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Add new template');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit template');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Template Settings');?></h2>
|
||||
<form class="win" method="post" id="templateSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Name');?>:</span>
|
||||
<input type="text" name="name" value="" pattern=".{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Description');?>:</span>
|
||||
<textarea name="description" rows="3"></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('RAM Size');?>:</span>
|
||||
<input type="text" name="pkg_vm_ram" value="" pattern="^[0-9]+\s*(g|G|gb|GB|mb|MB|m|M)$" placeholder="1g" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('HDD Size');?>:</span>
|
||||
<input type="text" name="pkg_vm_disk" value="" pattern="^[0-9]+\s*(g|G|gb|GB|mb|MB|m|M)$" placeholder="10g" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('CPUs Count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="pkg_vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus" oninput="rngCpusShow.value=rngCpus.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow" value="1" />
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'name':'<?php echo $this->translate("CHANGE THIS TEXT!!! Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'first_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
'last_name':'<?php echo $this->translate("TYPE THIS TEXT!!!");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="vm_packages-new" class="window-box new">
|
||||
<h1>
|
||||
<span class="new"><?php echo $this->translate('Add new template');?></span>
|
||||
<span class="edit"><?php echo $this->translate('Edit template');?></span>
|
||||
</h1>
|
||||
<h2><?php echo $this->translate('Template Settings');?></h2>
|
||||
<form class="win" method="post" id="templateSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Name');?>:</span>
|
||||
<input type="text" name="name" value="" pattern=".{2,}" required="required" class="edit-enable" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Description');?>:</span>
|
||||
<textarea name="description" rows="3"></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('RAM Size');?>:</span>
|
||||
<input type="text" name="pkg_vm_ram" value="" pattern="^[0-9]+\s*(g|G|gb|GB|mb|MB|m|M)$" placeholder="1g" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('HDD Size');?>:</span>
|
||||
<input type="text" name="pkg_vm_disk" value="" pattern="^[0-9]+\s*(g|G|gb|GB|mb|MB|m|M)$" placeholder="10g" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('CPUs Count');?>:</span>
|
||||
<span class="range">
|
||||
<input type="range" name="pkg_vm_cpus" class="vHorizon" min="1" max="16" value="1" style="margin:6px 0;" id="rngCpus" oninput="rngCpusShow.value=rngCpus.value" />
|
||||
<input type="text" disabled="disabled" id="rngCpusShow" value="1" />
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Add');?>" class="new button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Save');?>" class="edit button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
@@ -1,19 +1,19 @@
|
||||
<dialog id="vnc">
|
||||
<div class="panel" style="text-align:right;">
|
||||
<span onclick="clonos.dialogFullscreen(this);" style="font-size:130%;cursor:pointer;"
|
||||
<span class="dialog-fullscreen"></span>
|
||||
</span>
|
||||
<span onclick="clonos.dialogClose();" style="font-size:150%;font-weight:bold;cursor:pointer;">
|
||||
<span class="dialog-close"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="vnc-wait">
|
||||
<div class="outer">
|
||||
<div class="inner">
|
||||
<span class="icon-spin5 animate-spin"></span><?php echo $this->translate('Please, wait for initialize Virtual Machine');?>
|
||||
<br /><small style="display: block;font-size: small;margin-top: 20px;"><?php echo $this->translate('You can click here, or wait');?>: <span id="vnc-countdown"><?php echo $this->translate('some time');?></span></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<iframe src="about:blank" id="vnc-iframe" border="0" width="1026" height="802"></iframe>
|
||||
<dialog id="vnc">
|
||||
<div class="panel" style="text-align:right;">
|
||||
<span onclick="clonos.dialogFullscreen(this);" style="font-size:130%;cursor:pointer;"
|
||||
<span class="dialog-fullscreen"></span>
|
||||
</span>
|
||||
<span onclick="clonos.dialogClose();" style="font-size:150%;font-weight:bold;cursor:pointer;">
|
||||
<span class="dialog-close"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="vnc-wait">
|
||||
<div class="outer">
|
||||
<div class="inner">
|
||||
<span class="icon-spin5 animate-spin"></span><?php echo $this->translate('Please, wait for initialize Virtual Machine');?>
|
||||
<br /><small style="display: block;font-size: small;margin-top: 20px;"><?php echo $this->translate('You can click here, or wait');?>: <span id="vnc-countdown"><?php echo $this->translate('some time');?></span></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<iframe src="about:blank" id="vnc-iframe" border="0" width="1026" height="802"></iframe>
|
||||
</dialog>
|
||||
@@ -1,9 +1,9 @@
|
||||
<dialog id="vnc">
|
||||
<div class="panel" style="text-align:right;">
|
||||
<span onclick="clonos.dialogClose();" style="font-size:150%;font-weight:bold;cursor:pointer;">
|
||||
<span class="dialog-fullscreen"></span>
|
||||
<span class="dialog-close"></span>
|
||||
</span>
|
||||
</div>
|
||||
<iframe src="about:blank" id="vnc-iframe" border="0" width="800" height="600"></iframe> <!-- 760 436 -->
|
||||
<dialog id="vnc">
|
||||
<div class="panel" style="text-align:right;">
|
||||
<span onclick="clonos.dialogClose();" style="font-size:150%;font-weight:bold;cursor:pointer;">
|
||||
<span class="dialog-fullscreen"></span>
|
||||
<span class="dialog-close"></span>
|
||||
</span>
|
||||
</div>
|
||||
<iframe src="about:blank" id="vnc-iframe" border="0" width="800" height="600"></iframe> <!-- 760 436 -->
|
||||
</dialog>
|
||||
@@ -1,26 +1,26 @@
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'netname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'network':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="vpnet" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Network');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="vpnetSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Network name');?>:</span>
|
||||
<input type="text" name="netname" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Network');?>:</span>
|
||||
<input type="text" name="network" value="" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
<script type="text/javascript">
|
||||
err_messages.add({
|
||||
'netname':'<?php echo $this->translate("Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%");?>',
|
||||
'network':'<?php echo $this->translate("Write correct ip address, e.g: 10.0.0.2");?>',
|
||||
});
|
||||
</script>
|
||||
<dialog id="vpnet" class="window-box">
|
||||
<h1><?php echo $this->translate('Create Network');?></h1>
|
||||
<h2><?php echo $this->translate('Settings');?></h2>
|
||||
<form class="win" method="post" id="vpnetSettings" onsubmit="return false;">
|
||||
<div class="window-content">
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Network name');?>:</span>
|
||||
<input type="text" name="netname" value="" pattern="[\x20-\x21\x23-\x26\x28-\x7F]+" required="required" />
|
||||
</p>
|
||||
<p>
|
||||
<span class="field-name"><?php echo $this->translate('Network');?>:</span>
|
||||
<input type="text" name="network" value="" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}(\/[\d]{1,3})?$" required="required" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons">
|
||||
<input type="button" value="<?php echo $this->translate('Create');?>" class="button ok-but" />
|
||||
<input type="button" value="<?php echo $this->translate('Cancel');?>" class="button red cancel-but" />
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
<?php
|
||||
if(isset($_GET['file'])){
|
||||
$file=$_GET['file'];
|
||||
$filename=$file;
|
||||
}else{
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
exit;
|
||||
}
|
||||
|
||||
$res=$clonos->userAutologin();
|
||||
|
||||
if(isset($res['id']) && $res['id']>0){
|
||||
|
||||
$file=$clonos->media_import.$file;
|
||||
|
||||
header('Content-disposition: attachment; filename='.$filename);
|
||||
header('Content-type: application/octet-stream');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: '.filesize($file));
|
||||
header("Pragma: no-cache");
|
||||
header("Expires: 0");
|
||||
|
||||
$chunkSize = 1024 * 1024;
|
||||
$handle = fopen($file, 'rb');
|
||||
while (!feof($handle))
|
||||
{
|
||||
$buffer = fread($handle, $chunkSize);
|
||||
echo $buffer;
|
||||
ob_flush();
|
||||
flush();
|
||||
}
|
||||
fclose($handle);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
header('HTTP/1.1 401 Unauthorized');
|
||||
<?php
|
||||
if(isset($_GET['file'])){
|
||||
$file=$_GET['file'];
|
||||
$filename=$file;
|
||||
}else{
|
||||
header('HTTP/1.0 404 Not Found');
|
||||
exit;
|
||||
}
|
||||
|
||||
$res=$clonos->userAutologin();
|
||||
|
||||
if(isset($res['id']) && $res['id']>0){
|
||||
|
||||
$file=$clonos->media_import.$file;
|
||||
|
||||
header('Content-disposition: attachment; filename='.$filename);
|
||||
header('Content-type: application/octet-stream');
|
||||
header('Cache-Control: must-revalidate');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: '.filesize($file));
|
||||
header("Pragma: no-cache");
|
||||
header("Expires: 0");
|
||||
|
||||
$chunkSize = 1024 * 1024;
|
||||
$handle = fopen($file, 'rb');
|
||||
while (!feof($handle))
|
||||
{
|
||||
$buffer = fread($handle, $chunkSize);
|
||||
echo $buffer;
|
||||
ob_flush();
|
||||
flush();
|
||||
}
|
||||
fclose($handle);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
header('HTTP/1.1 401 Unauthorized');
|
||||
exit;
|
||||
370
public/index.php
370
public/index.php
@@ -1,189 +1,189 @@
|
||||
<?php
|
||||
if(preg_match('/(?i)msie [5-9]/',$_SERVER['HTTP_USER_AGENT']))
|
||||
{
|
||||
echo '<!DOCTYPE html><div style="margin-top:10%;text-align:center;font-size:large;color:darkred;"><p>Sorry, your browser is not supported!</p><p>Please, use last version of any browser.</p></html>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$_real_path=realpath('../');
|
||||
$uri=trim($_SERVER['REQUEST_URI'],'/');
|
||||
require_once($_real_path.'/php/clonos.php');
|
||||
require_once($_real_path.'/php/menu.php');
|
||||
$chunks=Utils::gen_uri_chunks($uri);
|
||||
$clonos=new ClonOS($_real_path, $chunks);
|
||||
$locale = new Localization($_real_path.'/public/'); # /usr/home/web/cp/clonos/public/
|
||||
$menu=new Menu($locale, $chunks);
|
||||
|
||||
if(isset($_GET['upload'])){
|
||||
include('upload.php');
|
||||
CBSD::register_media($path,$file,$ext);
|
||||
exit;
|
||||
}
|
||||
if(isset($_GET['download'])){
|
||||
include('download.php');
|
||||
CBSD::register_media($path,$file,$ext);
|
||||
exit;
|
||||
}
|
||||
|
||||
$lang=$locale->get_lang();
|
||||
$_ds=DIRECTORY_SEPARATOR;
|
||||
$root=trim($_SERVER['DOCUMENT_ROOT'], $_ds);
|
||||
|
||||
if(!empty($chunks)) $uri=$chunks[0];
|
||||
|
||||
$file_path=$_ds.$root.$_ds.'pages'.$_ds.$uri.$_ds;
|
||||
$file_name=$file_path.$lang.'.index.php';
|
||||
$json_name=$file_path.'a.json.php';
|
||||
<?php
|
||||
if(preg_match('/(?i)msie [5-9]/',$_SERVER['HTTP_USER_AGENT']))
|
||||
{
|
||||
echo '<!DOCTYPE html><div style="margin-top:10%;text-align:center;font-size:large;color:darkred;"><p>Sorry, your browser is not supported!</p><p>Please, use last version of any browser.</p></html>';
|
||||
exit;
|
||||
}
|
||||
|
||||
if(empty($uri)){
|
||||
header('Location: /'.$menu->first_key.'/',true);
|
||||
exit;
|
||||
}
|
||||
$_real_path=realpath('../');
|
||||
$uri=trim($_SERVER['REQUEST_URI'],'/');
|
||||
require_once($_real_path.'/php/clonos.php');
|
||||
require_once($_real_path.'/php/menu.php');
|
||||
$chunks=Utils::gen_uri_chunks($uri);
|
||||
$clonos=new ClonOS($_real_path, $chunks);
|
||||
$locale = new Localization($_real_path.'/public/'); # /usr/home/web/cp/clonos/public/
|
||||
$menu=new Menu($locale, $chunks);
|
||||
|
||||
error_reporting(E_ALL);
|
||||
|
||||
$user_info=$clonos->userAutologin();
|
||||
if(!$user_info['error']){
|
||||
$user_info_txt="user_id='${user_info['id']}';user_login='${user_info['username']}';";
|
||||
}else{
|
||||
$user_info['username']='guest';
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>ClonOS — <?php echo $menu->title; ?></title>
|
||||
<link href="/images/favicon.ico?" rel="shortcut icon" type="image/x-icon" />
|
||||
<script src="/js/jquery.js" type="text/javascript"></script>
|
||||
<script src="/js/clonos.js" type="text/javascript"></script>
|
||||
<script src="/js/dmuploader.js" type="text/javascript"></script>
|
||||
<script src="/js/smoothie.js" type="text/javascript"></script>
|
||||
<script src="/js/noty/packaged/jquery.noty.packaged.min.js" type="text/javascript"></script>
|
||||
<link type="text/css" href="/css/reset.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/css/styles.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/font/clonos.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/font/animation.css" rel="stylesheet" />
|
||||
<script src="/lang/<?php echo $lang; ?>.js" type="text/javascript"></script>
|
||||
<style type="text/css">html{background-color:#aaa;} .hide{display:none;}</style>
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="" />
|
||||
<script type="text/javascript">
|
||||
_first_start=true;
|
||||
err_messages={add:function(arr){for(n in arr){err_messages[n]=arr[n];}}};
|
||||
<?php if(isset($user_info_txt)) echo $user_info_txt; ?>
|
||||
</script>
|
||||
</head>
|
||||
<script type="text/javascript">
|
||||
try{
|
||||
var theme=localStorage.getItem('Theme') || 'light';
|
||||
var cs=['light','dark'];
|
||||
for(c=0,cl=cs.length;c<cl;c++)
|
||||
{
|
||||
var css=cs[c];
|
||||
var disabled=(theme==css)?'':' disabled="disabled"';
|
||||
var hcss=$('<link rel="stylesheet" href="/css/themes/'+css+'.css" id="'+css+'" class="alternate"'+disabled+'>');
|
||||
$('head').append(hcss);
|
||||
$('#'+css).get(0).disabled=(theme!=css);
|
||||
}
|
||||
}catch(e){}
|
||||
</script>
|
||||
<body class="gadget1 login <?php echo $uri;?>">
|
||||
|
||||
<main>
|
||||
<div class="main"><div id="content">
|
||||
<div id="ctop">
|
||||
<?php
|
||||
if(file_exists($file_name)){
|
||||
include($file_name);
|
||||
} else {
|
||||
echo '<h1>'.$locale->translate('Not implemented yet').'!</h1>';
|
||||
}
|
||||
$clonos->placeDialogs();
|
||||
?>
|
||||
</div>
|
||||
<div id="cdown"><span class="split-close"></span>
|
||||
<div id="cinfo">
|
||||
<div class="left">
|
||||
<dl id="summaryInfo">
|
||||
<dt>Имя клетки:</dt>
|
||||
<dd>Jail1</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="right">
|
||||
<h2><?php echo $locale->translate('CPU usage');?>, %:</h2>
|
||||
<div class="graph v-black g--summary-cpu l-cpu"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('Memory usage');?>, %:</h2>
|
||||
<div class="graph v-black g--summary-mem l-mem"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('I/O storage');?>, iops:</h2>
|
||||
<div class="graph v-black g--summary-iops l-read,write pr-no te-iops"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('I/O storage');?>, bit per seconds:</h2>
|
||||
<div class="graph v-black g--summary-bps l-read,write pr-no te-bps"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</main>
|
||||
|
||||
<div class="menu">
|
||||
<div id="menu">
|
||||
<div class="closer"></div>
|
||||
<?php
|
||||
echo $menu->html;
|
||||
?>
|
||||
<div id="console"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header>
|
||||
<div class="top-right">
|
||||
<span class="txt">
|
||||
<a href="https://www.patreon.com/clonos" target="_blank"><?php echo $locale->translate('DONATE'); ?></a>
|
||||
<span class="space"></span>
|
||||
<?php echo $locale->translate('VERSION'),': ',file_get_contents($clonos->realpath.'version'); ?>
|
||||
<span class="space"></span>
|
||||
<?php echo $locale->translate('THEMES'); ?>:
|
||||
</span>
|
||||
<span class="ch_theme">
|
||||
<span class="light"></span><span class="dark"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="header">
|
||||
<span id="title"><?php echo $menu->title; ?></span>
|
||||
<ul>
|
||||
<li class="mhome"><a href="/">Home</a></li>
|
||||
<?php // if($clonos->environment=='development') { ?>
|
||||
<li><a href="/settings/"><?php echo $locale->translate('Settings'); ?></a></li>
|
||||
<?php // } ?>
|
||||
<li><a href="/users/"><?php echo $locale->translate('Users'); ?></a></li>
|
||||
if(isset($_GET['upload'])){
|
||||
include('upload.php');
|
||||
CBSD::register_media($path,$file,$ext);
|
||||
exit;
|
||||
}
|
||||
if(isset($_GET['download'])){
|
||||
include('download.php');
|
||||
CBSD::register_media($path,$file,$ext);
|
||||
exit;
|
||||
}
|
||||
|
||||
$lang=$locale->get_lang();
|
||||
$_ds=DIRECTORY_SEPARATOR;
|
||||
$root=trim($_SERVER['DOCUMENT_ROOT'], $_ds);
|
||||
|
||||
if(!empty($chunks)) $uri=$chunks[0];
|
||||
|
||||
$file_path=$_ds.$root.$_ds.'pages'.$_ds.$uri.$_ds;
|
||||
$file_name=$file_path.$lang.'.index.php';
|
||||
$json_name=$file_path.'a.json.php';
|
||||
|
||||
if(empty($uri)){
|
||||
header('Location: /'.$menu->first_key.'/',true);
|
||||
exit;
|
||||
}
|
||||
|
||||
error_reporting(E_ALL);
|
||||
|
||||
$user_info=$clonos->userAutologin();
|
||||
if(!$user_info['error']){
|
||||
$user_info_txt="user_id='${user_info['id']}';user_login='${user_info['username']}';";
|
||||
}else{
|
||||
$user_info['username']='guest';
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>ClonOS — <?php echo $menu->title; ?></title>
|
||||
<link href="/images/favicon.ico?" rel="shortcut icon" type="image/x-icon" />
|
||||
<script src="/js/jquery.js" type="text/javascript"></script>
|
||||
<script src="/js/clonos.js" type="text/javascript"></script>
|
||||
<script src="/js/dmuploader.js" type="text/javascript"></script>
|
||||
<script src="/js/smoothie.js" type="text/javascript"></script>
|
||||
<script src="/js/noty/packaged/jquery.noty.packaged.min.js" type="text/javascript"></script>
|
||||
<link type="text/css" href="/css/reset.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/css/styles.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/font/clonos.css" rel="stylesheet" />
|
||||
<link type="text/css" href="/font/animation.css" rel="stylesheet" />
|
||||
<script src="/lang/<?php echo $lang; ?>.js" type="text/javascript"></script>
|
||||
<style type="text/css">html{background-color:#aaa;} .hide{display:none;}</style>
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="description" content="" />
|
||||
<script type="text/javascript">
|
||||
_first_start=true;
|
||||
err_messages={add:function(arr){for(n in arr){err_messages[n]=arr[n];}}};
|
||||
<?php if(isset($user_info_txt)) echo $user_info_txt; ?>
|
||||
</script>
|
||||
</head>
|
||||
<script type="text/javascript">
|
||||
try{
|
||||
var theme=localStorage.getItem('Theme') || 'light';
|
||||
var cs=['light','dark'];
|
||||
for(c=0,cl=cs.length;c<cl;c++)
|
||||
{
|
||||
var css=cs[c];
|
||||
var disabled=(theme==css)?'':' disabled="disabled"';
|
||||
var hcss=$('<link rel="stylesheet" href="/css/themes/'+css+'.css" id="'+css+'" class="alternate"'+disabled+'>');
|
||||
$('head').append(hcss);
|
||||
$('#'+css).get(0).disabled=(theme!=css);
|
||||
}
|
||||
}catch(e){}
|
||||
</script>
|
||||
<body class="gadget1 login <?php echo $uri;?>">
|
||||
|
||||
<main>
|
||||
<div class="main"><div id="content">
|
||||
<div id="ctop">
|
||||
<?php
|
||||
if(file_exists($file_name)){
|
||||
include($file_name);
|
||||
} else {
|
||||
echo '<h1>'.$locale->translate('Not implemented yet').'!</h1>';
|
||||
}
|
||||
$clonos->placeDialogs();
|
||||
?>
|
||||
</div>
|
||||
<div id="cdown"><span class="split-close"></span>
|
||||
<div id="cinfo">
|
||||
<div class="left">
|
||||
<dl id="summaryInfo">
|
||||
<dt>Имя клетки:</dt>
|
||||
<dd>Jail1</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="right">
|
||||
<h2><?php echo $locale->translate('CPU usage');?>, %:</h2>
|
||||
<div class="graph v-black g--summary-cpu l-cpu"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('Memory usage');?>, %:</h2>
|
||||
<div class="graph v-black g--summary-mem l-mem"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('I/O storage');?>, iops:</h2>
|
||||
<div class="graph v-black g--summary-iops l-read,write pr-no te-iops"></div>
|
||||
<br />
|
||||
<h2><?php echo $locale->translate('I/O storage');?>, bit per seconds:</h2>
|
||||
<div class="graph v-black g--summary-bps l-read,write pr-no te-bps"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</main>
|
||||
|
||||
<div class="menu">
|
||||
<div id="menu">
|
||||
<div class="closer"></div>
|
||||
<?php
|
||||
echo $menu->html;
|
||||
?>
|
||||
<div id="console"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header>
|
||||
<div class="top-right">
|
||||
<span class="txt">
|
||||
<a href="https://www.patreon.com/clonos" target="_blank"><?php echo $locale->translate('DONATE'); ?></a>
|
||||
<span class="space"></span>
|
||||
<?php echo $locale->translate('VERSION'),': ',file_get_contents($clonos->realpath.'version'); ?>
|
||||
<span class="space"></span>
|
||||
<?php echo $locale->translate('THEMES'); ?>:
|
||||
</span>
|
||||
<span class="ch_theme">
|
||||
<span class="light"></span><span class="dark"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="header">
|
||||
<span id="title"><?php echo $menu->title; ?></span>
|
||||
<ul>
|
||||
<li class="mhome"><a href="/">Home</a></li>
|
||||
<?php // if($clonos->environment=='development') { ?>
|
||||
<li><a href="/settings/"><?php echo $locale->translate('Settings'); ?></a></li>
|
||||
<?php // } ?>
|
||||
<li><a href="/users/"><?php echo $locale->translate('Users'); ?></a></li>
|
||||
<li><a target="_blank" href="/shell/">>><?php echo $locale->translate('Console'); ?></a></li>
|
||||
<!--
|
||||
<li><a href="/profile/"><?php echo $locale->translate('Profile'); ?></a></li>
|
||||
<li><a href="/support/"><?php echo $locale->translate('Support'); ?></a></li>
|
||||
-->
|
||||
<li><a name="">
|
||||
<select id="lng-sel">
|
||||
<?php
|
||||
foreach(Config::$languages as $lng=>$lngname){
|
||||
$sel = ($lang==$lng) ? ' selected="selected"' : '';
|
||||
echo ' <option value="'.$lng.'"'.$sel.'>'.$lngname.'</option>'.PHP_EOL;
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</a></li>
|
||||
<li><a onclick="clonos.logout();" class="link" id="user-login"><?php echo $user_info['username']; ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="login-area<?php if(!$user_info['error']) echo ' hide'; ?>"><?php echo $clonos->placeDialogByName('system-login'); ?>
|
||||
<div class="ccopy">ClonOS — is a powerfull system for…</div>
|
||||
<div class="ccopy">Cloud computing, Lightweight containerization, Virtualization, etc…</div>
|
||||
</div>
|
||||
|
||||
<div class="spinner"></div>
|
||||
<div class="online icon-online" id="net-stat" onclick="ws_debug();"></div>
|
||||
</body>
|
||||
<!--
|
||||
<li><a href="/profile/"><?php echo $locale->translate('Profile'); ?></a></li>
|
||||
<li><a href="/support/"><?php echo $locale->translate('Support'); ?></a></li>
|
||||
-->
|
||||
<li><a name="">
|
||||
<select id="lng-sel">
|
||||
<?php
|
||||
foreach(Config::$languages as $lng=>$lngname){
|
||||
$sel = ($lang==$lng) ? ' selected="selected"' : '';
|
||||
echo ' <option value="'.$lng.'"'.$sel.'>'.$lngname.'</option>'.PHP_EOL;
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</a></li>
|
||||
<li><a onclick="clonos.logout();" class="link" id="user-login"><?php echo $user_info['username']; ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="login-area<?php if(!$user_info['error']) echo ' hide'; ?>"><?php echo $clonos->placeDialogByName('system-login'); ?>
|
||||
<div class="ccopy">ClonOS — is a powerfull system for…</div>
|
||||
<div class="ccopy">Cloud computing, Lightweight containerization, Virtualization, etc…</div>
|
||||
</div>
|
||||
|
||||
<div class="spinner"></div>
|
||||
<div class="online icon-online" id="net-stat" onclick="ws_debug();"></div>
|
||||
</body>
|
||||
</html>
|
||||
7202
public/js/clonos-o
7202
public/js/clonos-o
File diff suppressed because it is too large
Load Diff
7802
public/js/clonos.js
7802
public/js/clonos.js
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* dmuploader.min.js - Jquery File Uploader - 0.1
|
||||
* http://www.daniel.com.uy/projects/jquery-file-uploader/
|
||||
*
|
||||
* Copyright (c) 2013 Daniel Morales
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* http://www.daniel.com.uy/doc/license/
|
||||
*/
|
||||
/*
|
||||
* dmuploader.min.js - Jquery File Uploader - 0.1
|
||||
* http://www.daniel.com.uy/projects/jquery-file-uploader/
|
||||
*
|
||||
* Copyright (c) 2013 Daniel Morales
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* http://www.daniel.com.uy/doc/license/
|
||||
*/
|
||||
(function(t){var n="dmUploader";var r={url:document.URL,method:"POST",extraData:{},maxFileSize:0,allowedTypes:"*",extFilter:null,dataType:null,fileName:"file",onInit:function(){},onFallbackMode:function(){message},onNewFile:function(e,t){},onBeforeUpload:function(e){},onComplete:function(){},onUploadProgress:function(e,t){},onUploadSuccess:function(e,t){},onUploadError:function(e,t){},onFileTypeError:function(e){},onFileSizeError:function(e){},onFileExtError:function(e){}};var i=function(e,n){this.element=t(e);this.settings=t.extend({},r,n);if(!this.checkBrowser()){return false}this.init();return true};i.prototype.checkBrowser=function(){if(window.FormData===undefined){this.settings.onFallbackMode.call(this.element,"Browser doesn't support Form API");return false}if(this.element.find("input[type=file]").length>0){return true}if(!this.checkEvent("drop",this.element)||!this.checkEvent("dragstart",this.element)){this.settings.onFallbackMode.call(this.element,"Browser doesn't support Ajax Drag and Drop");return false}return true};i.prototype.checkEvent=function(e,t){var t=t||document.createElement("div");var e="on"+e;var n=e in t;if(!n){if(!t.setAttribute){t=document.createElement("div")}if(t.setAttribute&&t.removeAttribute){t.setAttribute(e,"");n=typeof t[e]=="function";if(typeof t[e]!="undefined"){t[e]=undefined}t.removeAttribute(e)}}t=null;return n};i.prototype.init=function(){var e=this;e.queue=new Array;e.queuePos=-1;e.queueRunning=false;e.element.on("drop",function(t){t.preventDefault();var n=t.originalEvent.dataTransfer.files;e.queueFiles(n)});e.element.find("input[type=file]").on("change",function(n){var r=n.target.files;e.queueFiles(r);t(this).val("")});this.settings.onInit.call(this.element)};i.prototype.queueFiles=function(e){var n=this.queue.length;for(var r=0;r<e.length;r++){var i=e[r];if(this.settings.maxFileSize>0&&i.size>this.settings.maxFileSize){this.settings.onFileSizeError.call(this.element,i);continue}if(this.settings.allowedTypes!="*"&&!i.type.match(this.settings.allowedTypes)){this.settings.onFileTypeError.call(this.element,i);continue}if(this.settings.extFilter!=null){var s=this.settings.extFilter.toLowerCase().split(";");var o=i.name.toLowerCase().split(".").pop();if(t.inArray(o,s)<0){this.settings.onFileExtError.call(this.element,i);continue}}this.queue.push(i);var u=this.queue.length-1;this.settings.onNewFile.call(this.element,u,i)}if(this.queueRunning){return false}if(this.queue.length==n){return false}this.processQueue();return true};i.prototype.processQueue=function(){var n=this;n.queuePos++;if(n.queuePos>=n.queue.length){n.settings.onComplete.call(n.element);n.queuePos=n.queue.length-1;n.queueRunning=false;return}var r=n.queue[n.queuePos];var i=new FormData;i.append(n.settings.fileName,r);n.settings.onBeforeUpload.call(n.element,n.queuePos);t.each(n.settings.extraData,function(e,t){i.append(e,t)});n.queueRunning=true;t.ajax({url:n.settings.url,type:n.settings.method,dataType:n.settings.dataType,data:i,cache:false,contentType:false,processData:false,forceSync:false,xhr:function(){var r=t.ajaxSettings.xhr();if(r.upload){r.upload.addEventListener("progress",function(t){var r=0;var i=t.loaded||t.position;var s=t.total||e.totalSize;if(t.lengthComputable){r=Math.ceil(i/s*100)}n.settings.onUploadProgress.call(n.element,n.queuePos,r)},false)}return r},success:function(e,t,r){n.settings.onUploadSuccess.call(n.element,n.queuePos,e)},error:function(e,t,r){n.settings.onUploadError.call(n.element,n.queuePos,r)},complete:function(e,t){n.processQueue()}})};t.fn.dmUploader=function(e){return this.each(function(){if(!t.data(this,n)){t.data(this,n,new i(this,e))}})};t(document).on("dragenter",function(e){e.stopPropagation();e.preventDefault()});t(document).on("dragover",function(e){e.stopPropagation();e.preventDefault()});t(document).on("drop",function(e){e.stopPropagation();e.preventDefault()})})(jQuery)
|
||||
2
public/js/jquery.js
vendored
2
public/js/jquery.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,106 +1,106 @@
|
||||
/*
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.12/p5.min.js" type="text/javascript"></script>
|
||||
*/
|
||||
/*
|
||||
cool matrix effect
|
||||
http://creativetier.com/code-rain-js/templates/rain-message/index.php?n=1
|
||||
*/
|
||||
/*
|
||||
one more
|
||||
https://dev.to/gnsp/making-the-matrix-effect-in-javascript-din
|
||||
*/
|
||||
var streams = [];
|
||||
var fadeInterval = 1.6;
|
||||
var symbolSize = 14;
|
||||
|
||||
function setup() {
|
||||
createCanvas(
|
||||
window.innerWidth,
|
||||
window.innerHeight
|
||||
);
|
||||
background(0);
|
||||
var x = 0;
|
||||
for (var i = 0; i <= width / symbolSize; i++) {
|
||||
var stream = new Stream();
|
||||
stream.generateSymbols(x, random(-2000, 0));
|
||||
streams.push(stream);
|
||||
x += symbolSize
|
||||
}
|
||||
|
||||
textFont('Consolas');
|
||||
textSize(symbolSize);
|
||||
}
|
||||
|
||||
function draw() {
|
||||
background(0, 150);
|
||||
streams.forEach(function(stream) {
|
||||
stream.render();
|
||||
});
|
||||
}
|
||||
|
||||
function Symbol(x, y, speed, first, opacity) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.value;
|
||||
this.speed = speed;
|
||||
this.first = first;
|
||||
this.opacity = opacity;
|
||||
this.switchInterval = round(random(2, 25));
|
||||
this.setToRandomSymbol = function() {
|
||||
var charType = round(random(0, 5));
|
||||
if (frameCount % this.switchInterval == 0) {
|
||||
if (charType > 1) {
|
||||
// set it to Katakana
|
||||
this.value = String.fromCharCode(
|
||||
0x30A0 + round(random(0, 96))
|
||||
);
|
||||
} else {
|
||||
// set it to numeric
|
||||
this.value = round(random(0,9));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.rain = function() {
|
||||
this.y = (this.y >= height) ? 0 : this.y += this.speed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function Stream() {
|
||||
this.symbols = [];
|
||||
this.totalSymbols = round(random(5, 35));
|
||||
this.speed = random(5, 22);
|
||||
|
||||
this.generateSymbols = function(x, y) {
|
||||
var opacity = 255;
|
||||
var first = round(random(0, 4)) == 1;
|
||||
for (var i =0; i <= this.totalSymbols; i++) {
|
||||
symbol = new Symbol(
|
||||
x,
|
||||
y,
|
||||
this.speed,
|
||||
first,
|
||||
opacity
|
||||
);
|
||||
symbol.setToRandomSymbol();
|
||||
this.symbols.push(symbol);
|
||||
opacity -= (255 / this.totalSymbols) / fadeInterval;
|
||||
y -= symbolSize;
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.render = function() {
|
||||
this.symbols.forEach(function(symbol) {
|
||||
if (symbol.first) {
|
||||
fill(140, 255, 170, symbol.opacity);
|
||||
} else {
|
||||
fill(0, 255, 70, symbol.opacity);
|
||||
}
|
||||
text(symbol.value, symbol.x, symbol.y);
|
||||
symbol.rain();
|
||||
symbol.setToRandomSymbol();
|
||||
});
|
||||
}
|
||||
}
|
||||
/*
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.12/p5.min.js" type="text/javascript"></script>
|
||||
*/
|
||||
/*
|
||||
cool matrix effect
|
||||
http://creativetier.com/code-rain-js/templates/rain-message/index.php?n=1
|
||||
*/
|
||||
/*
|
||||
one more
|
||||
https://dev.to/gnsp/making-the-matrix-effect-in-javascript-din
|
||||
*/
|
||||
var streams = [];
|
||||
var fadeInterval = 1.6;
|
||||
var symbolSize = 14;
|
||||
|
||||
function setup() {
|
||||
createCanvas(
|
||||
window.innerWidth,
|
||||
window.innerHeight
|
||||
);
|
||||
background(0);
|
||||
var x = 0;
|
||||
for (var i = 0; i <= width / symbolSize; i++) {
|
||||
var stream = new Stream();
|
||||
stream.generateSymbols(x, random(-2000, 0));
|
||||
streams.push(stream);
|
||||
x += symbolSize
|
||||
}
|
||||
|
||||
textFont('Consolas');
|
||||
textSize(symbolSize);
|
||||
}
|
||||
|
||||
function draw() {
|
||||
background(0, 150);
|
||||
streams.forEach(function(stream) {
|
||||
stream.render();
|
||||
});
|
||||
}
|
||||
|
||||
function Symbol(x, y, speed, first, opacity) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.value;
|
||||
this.speed = speed;
|
||||
this.first = first;
|
||||
this.opacity = opacity;
|
||||
this.switchInterval = round(random(2, 25));
|
||||
this.setToRandomSymbol = function() {
|
||||
var charType = round(random(0, 5));
|
||||
if (frameCount % this.switchInterval == 0) {
|
||||
if (charType > 1) {
|
||||
// set it to Katakana
|
||||
this.value = String.fromCharCode(
|
||||
0x30A0 + round(random(0, 96))
|
||||
);
|
||||
} else {
|
||||
// set it to numeric
|
||||
this.value = round(random(0,9));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.rain = function() {
|
||||
this.y = (this.y >= height) ? 0 : this.y += this.speed;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function Stream() {
|
||||
this.symbols = [];
|
||||
this.totalSymbols = round(random(5, 35));
|
||||
this.speed = random(5, 22);
|
||||
|
||||
this.generateSymbols = function(x, y) {
|
||||
var opacity = 255;
|
||||
var first = round(random(0, 4)) == 1;
|
||||
for (var i =0; i <= this.totalSymbols; i++) {
|
||||
symbol = new Symbol(
|
||||
x,
|
||||
y,
|
||||
this.speed,
|
||||
first,
|
||||
opacity
|
||||
);
|
||||
symbol.setToRandomSymbol();
|
||||
this.symbols.push(symbol);
|
||||
opacity -= (255 / this.totalSymbols) / fadeInterval;
|
||||
y -= symbolSize;
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.render = function() {
|
||||
this.symbols.forEach(function(symbol) {
|
||||
if (symbol.first) {
|
||||
fill(140, 255, 170, symbol.opacity);
|
||||
} else {
|
||||
fill(0, 255, 70, symbol.opacity);
|
||||
}
|
||||
text(symbol.value, symbol.x, symbol.y);
|
||||
symbol.rain();
|
||||
symbol.setToRandomSymbol();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,432 +1,432 @@
|
||||
/*!
|
||||
* Noty Helpers Javascript From JQuery Javascript Library
|
||||
*
|
||||
* Ported by Maksim Pecherskiy. Original Licensing:
|
||||
*
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2011, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2011, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Mon Nov 21 21:11:03 2011 -0500
|
||||
*/
|
||||
|
||||
|
||||
(function(){
|
||||
|
||||
// String to Object flags format cache
|
||||
var flagsCache = {};
|
||||
|
||||
// Convert String-formatted flags into Object-formatted ones and store in cache
|
||||
function createFlags( flags ) {
|
||||
var object = flagsCache[ flags ] = {},
|
||||
i, length;
|
||||
flags = flags.split( /\s+/ );
|
||||
for ( i = 0, length = flags.length; i < length; i++ ) {
|
||||
object[ flags[i] ] = true;
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
jQuery.extend({
|
||||
|
||||
_mark: function( elem, type ) {
|
||||
if ( elem ) {
|
||||
type = (type || "fx") + "mark";
|
||||
jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
|
||||
}
|
||||
},
|
||||
|
||||
_unmark: function( force, elem, type ) {
|
||||
if ( force !== true ) {
|
||||
type = elem;
|
||||
elem = force;
|
||||
force = false;
|
||||
}
|
||||
if ( elem ) {
|
||||
type = type || "fx";
|
||||
var key = type + "mark",
|
||||
count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
|
||||
if ( count ) {
|
||||
jQuery.data( elem, key, count, true );
|
||||
} else {
|
||||
jQuery.removeData( elem, key, true );
|
||||
handleQueueMarkDefer( elem, type, "mark" );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
queue: function( elem, type, data ) {
|
||||
if ( elem ) {
|
||||
type = (type || "fx") + "queue";
|
||||
var q = jQuery.data( elem, type, undefined, true );
|
||||
// Speed up dequeue by getting out quickly if this is just a lookup
|
||||
if ( data ) {
|
||||
if ( !q || jQuery.isArray(data) ) {
|
||||
q = jQuery.data( elem, type, jQuery.makeArray(data), true );
|
||||
} else {
|
||||
q.push( data );
|
||||
}
|
||||
}
|
||||
return q || [];
|
||||
}
|
||||
},
|
||||
|
||||
dequeue: function( elem, type ) {
|
||||
type = type || "fx";
|
||||
|
||||
var queue = jQuery.queue( elem, type ),
|
||||
fn = queue.shift(),
|
||||
defer;
|
||||
|
||||
// If the fx queue is dequeued, always remove the progress sentinel
|
||||
if ( fn === "inprogress" ) {
|
||||
fn = queue.shift();
|
||||
}
|
||||
|
||||
if ( fn ) {
|
||||
// Add a progress sentinel to prevent the fx queue from being
|
||||
// automatically dequeued
|
||||
if ( type === "fx" ) {
|
||||
queue.unshift("inprogress");
|
||||
}
|
||||
|
||||
fn.call(elem, function() {
|
||||
jQuery.dequeue(elem, type);
|
||||
});
|
||||
}
|
||||
|
||||
if ( !queue.length ) {
|
||||
jQuery.removeData( elem, type + "queue", true );
|
||||
handleQueueMarkDefer( elem, type, "queue" );
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.extend({
|
||||
queue: function( type, data ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
data = type;
|
||||
type = "fx";
|
||||
}
|
||||
|
||||
if ( data === undefined ) {
|
||||
return jQuery.queue( this[0], type );
|
||||
}
|
||||
return this.each(function() {
|
||||
var queue = jQuery.queue( this, type, data );
|
||||
|
||||
if ( type === "fx" && queue[0] !== "inprogress" ) {
|
||||
jQuery.dequeue( this, type );
|
||||
}
|
||||
});
|
||||
},
|
||||
dequeue: function( type ) {
|
||||
return this.each(function() {
|
||||
jQuery.dequeue( this, type );
|
||||
});
|
||||
},
|
||||
// Based off of the plugin by Clint Helfers, with permission.
|
||||
// http://blindsignals.com/index.php/2009/07/jquery-delay/
|
||||
delay: function( time, type ) {
|
||||
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
|
||||
type = type || "fx";
|
||||
|
||||
return this.queue( type, function() {
|
||||
var elem = this;
|
||||
setTimeout(function() {
|
||||
jQuery.dequeue( elem, type );
|
||||
}, time );
|
||||
});
|
||||
},
|
||||
clearQueue: function( type ) {
|
||||
return this.queue( type || "fx", [] );
|
||||
},
|
||||
// Get a promise resolved when queues of a certain type
|
||||
// are emptied (fx is the type by default)
|
||||
promise: function( type, object ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
object = type;
|
||||
type = undefined;
|
||||
}
|
||||
type = type || "fx";
|
||||
var defer = jQuery.Deferred(),
|
||||
elements = this,
|
||||
i = elements.length,
|
||||
count = 1,
|
||||
deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
tmp;
|
||||
function resolve() {
|
||||
if ( !( --count ) ) {
|
||||
defer.resolveWith( elements, [ elements ] );
|
||||
}
|
||||
}
|
||||
while( i-- ) {
|
||||
if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
|
||||
( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
|
||||
jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
|
||||
jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
|
||||
count++;
|
||||
tmp.done( resolve );
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
return defer.promise();
|
||||
}
|
||||
});
|
||||
|
||||
function handleQueueMarkDefer( elem, type, src ) {
|
||||
var deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
defer = jQuery._data( elem, deferDataKey );
|
||||
if ( defer &&
|
||||
( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
|
||||
( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
|
||||
// Give room for hard-coded callbacks to fire first
|
||||
// and eventually mark/queue something else on the element
|
||||
setTimeout( function() {
|
||||
if ( !jQuery._data( elem, queueDataKey ) &&
|
||||
!jQuery._data( elem, markDataKey ) ) {
|
||||
jQuery.removeData( elem, deferDataKey, true );
|
||||
defer.fire();
|
||||
}
|
||||
}, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
jQuery.Callbacks = function( flags ) {
|
||||
|
||||
// Convert flags from String-formatted to Object-formatted
|
||||
// (we check in cache first)
|
||||
flags = flags ? ( /*flagsCache[ flags ] || */createFlags( flags ) ) : {};
|
||||
|
||||
var // Actual callback list
|
||||
list = [],
|
||||
// Stack of fire calls for repeatable lists
|
||||
stack = [],
|
||||
// Last fire value (for non-forgettable lists)
|
||||
memory,
|
||||
// Flag to know if list is currently firing
|
||||
firing,
|
||||
// First callback to fire (used internally by add and fireWith)
|
||||
firingStart,
|
||||
// End of the loop when firing
|
||||
firingLength,
|
||||
// Index of currently firing callback (modified by remove if needed)
|
||||
firingIndex,
|
||||
// Add one or several callbacks to the list
|
||||
add = function( args ) {
|
||||
var i,
|
||||
length,
|
||||
elem,
|
||||
type,
|
||||
actual;
|
||||
for ( i = 0, length = args.length; i < length; i++ ) {
|
||||
elem = args[ i ];
|
||||
type = jQuery.type( elem );
|
||||
if ( type === "array" ) {
|
||||
// Inspect recursively
|
||||
add( elem );
|
||||
} else if ( type === "function" ) {
|
||||
// Add if not in unique mode and callback is not in
|
||||
if ( !flags.unique || !self.has( elem ) ) {
|
||||
list.push( elem );
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// Fire callbacks
|
||||
fire = function( context, args ) {
|
||||
args = args || [];
|
||||
memory = !flags.memory || [ context, args ];
|
||||
firing = true;
|
||||
firingIndex = firingStart || 0;
|
||||
firingStart = 0;
|
||||
firingLength = list.length;
|
||||
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
|
||||
if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
|
||||
memory = true; // Mark as halted
|
||||
break;
|
||||
}
|
||||
}
|
||||
firing = false;
|
||||
if ( list ) {
|
||||
if ( !flags.once ) {
|
||||
if ( stack && stack.length ) {
|
||||
memory = stack.shift();
|
||||
self.fireWith( memory[ 0 ], memory[ 1 ] );
|
||||
}
|
||||
} else if ( memory === true ) {
|
||||
self.disable();
|
||||
} else {
|
||||
list = [];
|
||||
}
|
||||
}
|
||||
},
|
||||
// Actual Callbacks object
|
||||
self = {
|
||||
// Add a callback or a collection of callbacks to the list
|
||||
add: function() {
|
||||
if ( list ) {
|
||||
var length = list.length;
|
||||
add( arguments );
|
||||
// Do we need to add the callbacks to the
|
||||
// current firing batch?
|
||||
if ( firing ) {
|
||||
firingLength = list.length;
|
||||
// With memory, if we're not firing then
|
||||
// we should call right away, unless previous
|
||||
// firing was halted (stopOnFalse)
|
||||
} else if ( memory && memory !== true ) {
|
||||
firingStart = length;
|
||||
fire( memory[ 0 ], memory[ 1 ] );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Remove a callback from the list
|
||||
remove: function() {
|
||||
if ( list ) {
|
||||
var args = arguments,
|
||||
argIndex = 0,
|
||||
argLength = args.length;
|
||||
for ( ; argIndex < argLength ; argIndex++ ) {
|
||||
for ( var i = 0; i < list.length; i++ ) {
|
||||
if ( args[ argIndex ] === list[ i ] ) {
|
||||
// Handle firingIndex and firingLength
|
||||
if ( firing ) {
|
||||
if ( i <= firingLength ) {
|
||||
firingLength--;
|
||||
if ( i <= firingIndex ) {
|
||||
firingIndex--;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Remove the element
|
||||
list.splice( i--, 1 );
|
||||
// If we have some unicity property then
|
||||
// we only need to do this once
|
||||
if ( flags.unique ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Control if a given callback is in the list
|
||||
has: function( fn ) {
|
||||
if ( list ) {
|
||||
var i = 0,
|
||||
length = list.length;
|
||||
for ( ; i < length; i++ ) {
|
||||
if ( fn === list[ i ] ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
// Remove all callbacks from the list
|
||||
empty: function() {
|
||||
list = [];
|
||||
return this;
|
||||
},
|
||||
// Have the list do nothing anymore
|
||||
disable: function() {
|
||||
list = stack = memory = undefined;
|
||||
return this;
|
||||
},
|
||||
// Is it disabled?
|
||||
disabled: function() {
|
||||
return !list;
|
||||
},
|
||||
// Lock the list in its current state
|
||||
lock: function() {
|
||||
stack = undefined;
|
||||
if ( !memory || memory === true ) {
|
||||
self.disable();
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Is it locked?
|
||||
locked: function() {
|
||||
return !stack;
|
||||
},
|
||||
// Call all callbacks with the given context and arguments
|
||||
fireWith: function( context, args ) {
|
||||
if ( stack ) {
|
||||
if ( firing ) {
|
||||
if ( !flags.once ) {
|
||||
stack.push( [ context, args ] );
|
||||
}
|
||||
} else if ( !( flags.once && memory ) ) {
|
||||
fire( context, args );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Call all the callbacks with the given arguments
|
||||
fire: function() {
|
||||
self.fireWith( this, arguments );
|
||||
return this;
|
||||
},
|
||||
// To know if the callbacks have already been called at least once
|
||||
fired: function() {
|
||||
return !!memory;
|
||||
}
|
||||
};
|
||||
|
||||
return self;
|
||||
};
|
||||
|
||||
|
||||
|
||||
jQuery.fn.extend({
|
||||
// Get a promise resolved when queues of a certain type
|
||||
// are emptied (fx is the type by default)
|
||||
promise: function( type, object ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
object = type;
|
||||
type = undefined;
|
||||
}
|
||||
type = type || "fx";
|
||||
var defer = jQuery.Deferred(),
|
||||
elements = this,
|
||||
i = elements.length,
|
||||
count = 1,
|
||||
deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
tmp;
|
||||
function resolve() {
|
||||
if ( !( --count ) ) {
|
||||
defer.resolveWith( elements, [ elements ] );
|
||||
}
|
||||
}
|
||||
while( i-- ) {
|
||||
if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
|
||||
( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
|
||||
jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
|
||||
jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
|
||||
count++;
|
||||
tmp.add( resolve );
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
return defer.promise();
|
||||
}
|
||||
});
|
||||
/*!
|
||||
* Noty Helpers Javascript From JQuery Javascript Library
|
||||
*
|
||||
* Ported by Maksim Pecherskiy. Original Licensing:
|
||||
*
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2011, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2011, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Mon Nov 21 21:11:03 2011 -0500
|
||||
*/
|
||||
|
||||
|
||||
(function(){
|
||||
|
||||
// String to Object flags format cache
|
||||
var flagsCache = {};
|
||||
|
||||
// Convert String-formatted flags into Object-formatted ones and store in cache
|
||||
function createFlags( flags ) {
|
||||
var object = flagsCache[ flags ] = {},
|
||||
i, length;
|
||||
flags = flags.split( /\s+/ );
|
||||
for ( i = 0, length = flags.length; i < length; i++ ) {
|
||||
object[ flags[i] ] = true;
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
jQuery.extend({
|
||||
|
||||
_mark: function( elem, type ) {
|
||||
if ( elem ) {
|
||||
type = (type || "fx") + "mark";
|
||||
jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
|
||||
}
|
||||
},
|
||||
|
||||
_unmark: function( force, elem, type ) {
|
||||
if ( force !== true ) {
|
||||
type = elem;
|
||||
elem = force;
|
||||
force = false;
|
||||
}
|
||||
if ( elem ) {
|
||||
type = type || "fx";
|
||||
var key = type + "mark",
|
||||
count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
|
||||
if ( count ) {
|
||||
jQuery.data( elem, key, count, true );
|
||||
} else {
|
||||
jQuery.removeData( elem, key, true );
|
||||
handleQueueMarkDefer( elem, type, "mark" );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
queue: function( elem, type, data ) {
|
||||
if ( elem ) {
|
||||
type = (type || "fx") + "queue";
|
||||
var q = jQuery.data( elem, type, undefined, true );
|
||||
// Speed up dequeue by getting out quickly if this is just a lookup
|
||||
if ( data ) {
|
||||
if ( !q || jQuery.isArray(data) ) {
|
||||
q = jQuery.data( elem, type, jQuery.makeArray(data), true );
|
||||
} else {
|
||||
q.push( data );
|
||||
}
|
||||
}
|
||||
return q || [];
|
||||
}
|
||||
},
|
||||
|
||||
dequeue: function( elem, type ) {
|
||||
type = type || "fx";
|
||||
|
||||
var queue = jQuery.queue( elem, type ),
|
||||
fn = queue.shift(),
|
||||
defer;
|
||||
|
||||
// If the fx queue is dequeued, always remove the progress sentinel
|
||||
if ( fn === "inprogress" ) {
|
||||
fn = queue.shift();
|
||||
}
|
||||
|
||||
if ( fn ) {
|
||||
// Add a progress sentinel to prevent the fx queue from being
|
||||
// automatically dequeued
|
||||
if ( type === "fx" ) {
|
||||
queue.unshift("inprogress");
|
||||
}
|
||||
|
||||
fn.call(elem, function() {
|
||||
jQuery.dequeue(elem, type);
|
||||
});
|
||||
}
|
||||
|
||||
if ( !queue.length ) {
|
||||
jQuery.removeData( elem, type + "queue", true );
|
||||
handleQueueMarkDefer( elem, type, "queue" );
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.extend({
|
||||
queue: function( type, data ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
data = type;
|
||||
type = "fx";
|
||||
}
|
||||
|
||||
if ( data === undefined ) {
|
||||
return jQuery.queue( this[0], type );
|
||||
}
|
||||
return this.each(function() {
|
||||
var queue = jQuery.queue( this, type, data );
|
||||
|
||||
if ( type === "fx" && queue[0] !== "inprogress" ) {
|
||||
jQuery.dequeue( this, type );
|
||||
}
|
||||
});
|
||||
},
|
||||
dequeue: function( type ) {
|
||||
return this.each(function() {
|
||||
jQuery.dequeue( this, type );
|
||||
});
|
||||
},
|
||||
// Based off of the plugin by Clint Helfers, with permission.
|
||||
// http://blindsignals.com/index.php/2009/07/jquery-delay/
|
||||
delay: function( time, type ) {
|
||||
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
|
||||
type = type || "fx";
|
||||
|
||||
return this.queue( type, function() {
|
||||
var elem = this;
|
||||
setTimeout(function() {
|
||||
jQuery.dequeue( elem, type );
|
||||
}, time );
|
||||
});
|
||||
},
|
||||
clearQueue: function( type ) {
|
||||
return this.queue( type || "fx", [] );
|
||||
},
|
||||
// Get a promise resolved when queues of a certain type
|
||||
// are emptied (fx is the type by default)
|
||||
promise: function( type, object ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
object = type;
|
||||
type = undefined;
|
||||
}
|
||||
type = type || "fx";
|
||||
var defer = jQuery.Deferred(),
|
||||
elements = this,
|
||||
i = elements.length,
|
||||
count = 1,
|
||||
deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
tmp;
|
||||
function resolve() {
|
||||
if ( !( --count ) ) {
|
||||
defer.resolveWith( elements, [ elements ] );
|
||||
}
|
||||
}
|
||||
while( i-- ) {
|
||||
if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
|
||||
( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
|
||||
jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
|
||||
jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
|
||||
count++;
|
||||
tmp.done( resolve );
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
return defer.promise();
|
||||
}
|
||||
});
|
||||
|
||||
function handleQueueMarkDefer( elem, type, src ) {
|
||||
var deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
defer = jQuery._data( elem, deferDataKey );
|
||||
if ( defer &&
|
||||
( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
|
||||
( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
|
||||
// Give room for hard-coded callbacks to fire first
|
||||
// and eventually mark/queue something else on the element
|
||||
setTimeout( function() {
|
||||
if ( !jQuery._data( elem, queueDataKey ) &&
|
||||
!jQuery._data( elem, markDataKey ) ) {
|
||||
jQuery.removeData( elem, deferDataKey, true );
|
||||
defer.fire();
|
||||
}
|
||||
}, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
jQuery.Callbacks = function( flags ) {
|
||||
|
||||
// Convert flags from String-formatted to Object-formatted
|
||||
// (we check in cache first)
|
||||
flags = flags ? ( /*flagsCache[ flags ] || */createFlags( flags ) ) : {};
|
||||
|
||||
var // Actual callback list
|
||||
list = [],
|
||||
// Stack of fire calls for repeatable lists
|
||||
stack = [],
|
||||
// Last fire value (for non-forgettable lists)
|
||||
memory,
|
||||
// Flag to know if list is currently firing
|
||||
firing,
|
||||
// First callback to fire (used internally by add and fireWith)
|
||||
firingStart,
|
||||
// End of the loop when firing
|
||||
firingLength,
|
||||
// Index of currently firing callback (modified by remove if needed)
|
||||
firingIndex,
|
||||
// Add one or several callbacks to the list
|
||||
add = function( args ) {
|
||||
var i,
|
||||
length,
|
||||
elem,
|
||||
type,
|
||||
actual;
|
||||
for ( i = 0, length = args.length; i < length; i++ ) {
|
||||
elem = args[ i ];
|
||||
type = jQuery.type( elem );
|
||||
if ( type === "array" ) {
|
||||
// Inspect recursively
|
||||
add( elem );
|
||||
} else if ( type === "function" ) {
|
||||
// Add if not in unique mode and callback is not in
|
||||
if ( !flags.unique || !self.has( elem ) ) {
|
||||
list.push( elem );
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// Fire callbacks
|
||||
fire = function( context, args ) {
|
||||
args = args || [];
|
||||
memory = !flags.memory || [ context, args ];
|
||||
firing = true;
|
||||
firingIndex = firingStart || 0;
|
||||
firingStart = 0;
|
||||
firingLength = list.length;
|
||||
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
|
||||
if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
|
||||
memory = true; // Mark as halted
|
||||
break;
|
||||
}
|
||||
}
|
||||
firing = false;
|
||||
if ( list ) {
|
||||
if ( !flags.once ) {
|
||||
if ( stack && stack.length ) {
|
||||
memory = stack.shift();
|
||||
self.fireWith( memory[ 0 ], memory[ 1 ] );
|
||||
}
|
||||
} else if ( memory === true ) {
|
||||
self.disable();
|
||||
} else {
|
||||
list = [];
|
||||
}
|
||||
}
|
||||
},
|
||||
// Actual Callbacks object
|
||||
self = {
|
||||
// Add a callback or a collection of callbacks to the list
|
||||
add: function() {
|
||||
if ( list ) {
|
||||
var length = list.length;
|
||||
add( arguments );
|
||||
// Do we need to add the callbacks to the
|
||||
// current firing batch?
|
||||
if ( firing ) {
|
||||
firingLength = list.length;
|
||||
// With memory, if we're not firing then
|
||||
// we should call right away, unless previous
|
||||
// firing was halted (stopOnFalse)
|
||||
} else if ( memory && memory !== true ) {
|
||||
firingStart = length;
|
||||
fire( memory[ 0 ], memory[ 1 ] );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Remove a callback from the list
|
||||
remove: function() {
|
||||
if ( list ) {
|
||||
var args = arguments,
|
||||
argIndex = 0,
|
||||
argLength = args.length;
|
||||
for ( ; argIndex < argLength ; argIndex++ ) {
|
||||
for ( var i = 0; i < list.length; i++ ) {
|
||||
if ( args[ argIndex ] === list[ i ] ) {
|
||||
// Handle firingIndex and firingLength
|
||||
if ( firing ) {
|
||||
if ( i <= firingLength ) {
|
||||
firingLength--;
|
||||
if ( i <= firingIndex ) {
|
||||
firingIndex--;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Remove the element
|
||||
list.splice( i--, 1 );
|
||||
// If we have some unicity property then
|
||||
// we only need to do this once
|
||||
if ( flags.unique ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Control if a given callback is in the list
|
||||
has: function( fn ) {
|
||||
if ( list ) {
|
||||
var i = 0,
|
||||
length = list.length;
|
||||
for ( ; i < length; i++ ) {
|
||||
if ( fn === list[ i ] ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
// Remove all callbacks from the list
|
||||
empty: function() {
|
||||
list = [];
|
||||
return this;
|
||||
},
|
||||
// Have the list do nothing anymore
|
||||
disable: function() {
|
||||
list = stack = memory = undefined;
|
||||
return this;
|
||||
},
|
||||
// Is it disabled?
|
||||
disabled: function() {
|
||||
return !list;
|
||||
},
|
||||
// Lock the list in its current state
|
||||
lock: function() {
|
||||
stack = undefined;
|
||||
if ( !memory || memory === true ) {
|
||||
self.disable();
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Is it locked?
|
||||
locked: function() {
|
||||
return !stack;
|
||||
},
|
||||
// Call all callbacks with the given context and arguments
|
||||
fireWith: function( context, args ) {
|
||||
if ( stack ) {
|
||||
if ( firing ) {
|
||||
if ( !flags.once ) {
|
||||
stack.push( [ context, args ] );
|
||||
}
|
||||
} else if ( !( flags.once && memory ) ) {
|
||||
fire( context, args );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// Call all the callbacks with the given arguments
|
||||
fire: function() {
|
||||
self.fireWith( this, arguments );
|
||||
return this;
|
||||
},
|
||||
// To know if the callbacks have already been called at least once
|
||||
fired: function() {
|
||||
return !!memory;
|
||||
}
|
||||
};
|
||||
|
||||
return self;
|
||||
};
|
||||
|
||||
|
||||
|
||||
jQuery.fn.extend({
|
||||
// Get a promise resolved when queues of a certain type
|
||||
// are emptied (fx is the type by default)
|
||||
promise: function( type, object ) {
|
||||
if ( typeof type !== "string" ) {
|
||||
object = type;
|
||||
type = undefined;
|
||||
}
|
||||
type = type || "fx";
|
||||
var defer = jQuery.Deferred(),
|
||||
elements = this,
|
||||
i = elements.length,
|
||||
count = 1,
|
||||
deferDataKey = type + "defer",
|
||||
queueDataKey = type + "queue",
|
||||
markDataKey = type + "mark",
|
||||
tmp;
|
||||
function resolve() {
|
||||
if ( !( --count ) ) {
|
||||
defer.resolveWith( elements, [ elements ] );
|
||||
}
|
||||
}
|
||||
while( i-- ) {
|
||||
if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
|
||||
( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
|
||||
jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
|
||||
jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
|
||||
count++;
|
||||
tmp.add( resolve );
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
return defer.promise();
|
||||
}
|
||||
});
|
||||
})();
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,19 @@
|
||||
<?php
|
||||
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) ||
|
||||
strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])!='xmlhttprequest' ||
|
||||
!isset($_POST['path']))
|
||||
{echo '{}';exit;}
|
||||
|
||||
$_ds=DIRECTORY_SEPARATOR;
|
||||
$path=trim($_POST['path'],$_ds);
|
||||
|
||||
$_REALPATH=realpath('../');
|
||||
include($_REALPATH.'/php/clonos.php');
|
||||
$clonos=new ClonOS($_REALPATH);
|
||||
$clonos->json_req=true;
|
||||
|
||||
//$file_path=$_REALPATH.$_ds.'public/pages'.$_ds.$path.$_ds;
|
||||
//$clonos->json_name=$file_path.'a.json.php';
|
||||
|
||||
//if(file_exists($json_name)) include($json_name); else echo '{}';
|
||||
<?php
|
||||
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) ||
|
||||
strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])!='xmlhttprequest' ||
|
||||
!isset($_POST['path']))
|
||||
{echo '{}';exit;}
|
||||
|
||||
$_ds=DIRECTORY_SEPARATOR;
|
||||
$path=trim($_POST['path'],$_ds);
|
||||
|
||||
$_REALPATH=realpath('../');
|
||||
include($_REALPATH.'/php/clonos.php');
|
||||
$clonos=new ClonOS($_REALPATH);
|
||||
$clonos->json_req=true;
|
||||
|
||||
//$file_path=$_REALPATH.$_ds.'public/pages'.$_ds.$path.$_ds;
|
||||
//$clonos->json_name=$file_path.'a.json.php';
|
||||
|
||||
//if(file_exists($json_name)) include($json_name); else echo '{}';
|
||||
exit;
|
||||
@@ -1,49 +1,49 @@
|
||||
clonos.lang={
|
||||
"Error": "Fehler",
|
||||
"No data, add something": "Keine Daten vorhanden. Bitte wählen Sie etwas aus.",
|
||||
"available on the jail is not running": "Nur verfügbar, wenn die Jail nicht in Betrieb ist",
|
||||
"Log is empty": "Kein Inhalt in der Log-Datei",
|
||||
"Exported jails": "Exportierte jails",
|
||||
"Download": "Herunterladen",
|
||||
"Jail is created": "Jail wurde erstellt",
|
||||
"Jail already launched": "Jail ist bereits aktiv",
|
||||
"Jail already stopped": "Jail aist bereit gestoppt",
|
||||
"Export not available on launched jail": "Export einer laufenden Jail ist nicht möglich",
|
||||
"This field cannot be left blank": "Dieses Feld muss ausgefüllt sein",
|
||||
"You need to select one or more jails for clone": "Eine oder mehrere Jails müssen zum kopieren ausgewählt werden",
|
||||
"You want to restart selected jail! Are you sure?":"Möchten Sie die ausgewählten Jails wirklich neustarten?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Möchten Sie die ausgewählten VMs wirklich neustarten?",
|
||||
"You want to delete selected jail! Are you sure?":"Möchten Sie die ausgewählten Jails wirklich löschen?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Möchten Sie die ausgewählten VMs wirklich neustarten?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Möchten Sie den ausgewählten Schlüssel wirklich löschen?",
|
||||
|
||||
|
||||
"Not running":"Nicht in Betrieb",
|
||||
"Not Launched":"Nicht gestartet",
|
||||
"Launched":"Gestartet",
|
||||
"Stopping":"Gestoppt",
|
||||
"Stopped":"Stoppe",
|
||||
"Removing":"Lösche",
|
||||
"Removed":"Gelöscht",
|
||||
"Creating":"Erstelle",
|
||||
"Created":"Erstellt",
|
||||
"Starting":"Starte",
|
||||
"Exporting":"Exportiere",
|
||||
"Cloning":"Kopiere",
|
||||
"Cloned":"Kopiert",
|
||||
"Restarting":"Start neu",
|
||||
"Restarted":"Neugestartet",
|
||||
"Update":"Aktualisieren",
|
||||
"Updating":"Aktulisiere",
|
||||
"Updated":"Aktualisiert",
|
||||
"Delete":"Löschen",
|
||||
"Save":"Speichern",
|
||||
|
||||
"end":"Beenden",
|
||||
|
||||
"This name is already exists!":"Dieser Name besteht bereits",
|
||||
"Passwords must match!":"Die Kennwörter müssen gleich sein!",
|
||||
|
||||
"@redirect_alert@":"Sie werden in 3s zur Jail Übersicht weitergeleitet!",
|
||||
clonos.lang={
|
||||
"Error": "Fehler",
|
||||
"No data, add something": "Keine Daten vorhanden. Bitte wählen Sie etwas aus.",
|
||||
"available on the jail is not running": "Nur verfügbar, wenn die Jail nicht in Betrieb ist",
|
||||
"Log is empty": "Kein Inhalt in der Log-Datei",
|
||||
"Exported jails": "Exportierte jails",
|
||||
"Download": "Herunterladen",
|
||||
"Jail is created": "Jail wurde erstellt",
|
||||
"Jail already launched": "Jail ist bereits aktiv",
|
||||
"Jail already stopped": "Jail aist bereit gestoppt",
|
||||
"Export not available on launched jail": "Export einer laufenden Jail ist nicht möglich",
|
||||
"This field cannot be left blank": "Dieses Feld muss ausgefüllt sein",
|
||||
"You need to select one or more jails for clone": "Eine oder mehrere Jails müssen zum kopieren ausgewählt werden",
|
||||
"You want to restart selected jail! Are you sure?":"Möchten Sie die ausgewählten Jails wirklich neustarten?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Möchten Sie die ausgewählten VMs wirklich neustarten?",
|
||||
"You want to delete selected jail! Are you sure?":"Möchten Sie die ausgewählten Jails wirklich löschen?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Möchten Sie die ausgewählten VMs wirklich neustarten?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Möchten Sie den ausgewählten Schlüssel wirklich löschen?",
|
||||
|
||||
|
||||
"Not running":"Nicht in Betrieb",
|
||||
"Not Launched":"Nicht gestartet",
|
||||
"Launched":"Gestartet",
|
||||
"Stopping":"Gestoppt",
|
||||
"Stopped":"Stoppe",
|
||||
"Removing":"Lösche",
|
||||
"Removed":"Gelöscht",
|
||||
"Creating":"Erstelle",
|
||||
"Created":"Erstellt",
|
||||
"Starting":"Starte",
|
||||
"Exporting":"Exportiere",
|
||||
"Cloning":"Kopiere",
|
||||
"Cloned":"Kopiert",
|
||||
"Restarting":"Start neu",
|
||||
"Restarted":"Neugestartet",
|
||||
"Update":"Aktualisieren",
|
||||
"Updating":"Aktulisiere",
|
||||
"Updated":"Aktualisiert",
|
||||
"Delete":"Löschen",
|
||||
"Save":"Speichern",
|
||||
|
||||
"end":"Beenden",
|
||||
|
||||
"This name is already exists!":"Dieser Name besteht bereits",
|
||||
"Passwords must match!":"Die Kennwörter müssen gleich sein!",
|
||||
|
||||
"@redirect_alert@":"Sie werden in 3s zur Jail Übersicht weitergeleitet!",
|
||||
}
|
||||
@@ -1,159 +1,159 @@
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Einstellungen',
|
||||
'Profile'=>'Profile',
|
||||
'Support'=>'Hilfe',
|
||||
|
||||
'Overview'=>'Übersicht',
|
||||
'Summary Overview'=>'Zusammenfassung Übersicht',
|
||||
'Jails containers'=>'Jail containers',
|
||||
'Jails containers control panel'=>'Jail containers Einstellungen',
|
||||
'Template for jail'=>'Template für jail',
|
||||
'Helpers and wizard for containers'=>'Hilfe und Assistenten für Containers',
|
||||
'Helpers of jails'=>'Unterstützung of jails',
|
||||
'Virtual machine control panel'=>'Virtual Machine Einstellungen',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Virtual Machine Einstellungen',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Nodes Einstellungen',
|
||||
'VM Packages'=>'VM Pakete',
|
||||
'Manage for virtual machine packages'=>'Einrichten von VM Paketen',
|
||||
'Virtual Private Network'=>'Virtual Private Network',
|
||||
'Manage for virtual private networks'=>'Einstellungen für VPNs',
|
||||
'Authkeys'=>'Authkeys',
|
||||
'Manage for SSH auth key'=>'Einstellungen für SSH Schlüssel',
|
||||
'Storage Media'=>'Speichermedien',
|
||||
'Virtual Media Manager'=>'Virtual Media Verwaltung',
|
||||
'Repository'=>'Repository',
|
||||
'Remote repository'=>'Remote repository',
|
||||
'FreeBSD Bases'=>'FreeBSD Verwaltung',
|
||||
'FreeBSD bases manager'=>'FreeBSD Bases Verwaltung',
|
||||
'FreeBSD Sources'=>'FreeBSD Sources',
|
||||
'FreeBSD sources manager'=>'FreeBSD Sources Verwaltung',
|
||||
'Jail Marketplace'=>'Jail Marktplatz',
|
||||
'Public remote containers marketplace'=>'Öffentlicher Container Marktplatz',
|
||||
'Bhyve Marketplace'=>'Bhyve Marktplatz',
|
||||
'Public remote virtual machine marketplace'=>'Öffentlicher VM Marktplatz',
|
||||
'TaskLog'=>'TaskLog',
|
||||
'System task log'=>'System Prozess log',
|
||||
|
||||
'Not implemented yet'=>'Noch nicht implementiert',
|
||||
|
||||
|
||||
'Not Launched'=>'Nicht gestartet',
|
||||
'Starting'=>'Starte',
|
||||
'Launched'=>'Gestartet',
|
||||
'Creating'=>'Erstellen',
|
||||
'Created'=>'Erstellen',
|
||||
'Stopping'=>'Stoppen',
|
||||
'Stopped'=>'Gestoppt',
|
||||
'Removing'=>'Entfernen',
|
||||
'Exporting'=>'Exportieren',
|
||||
'Cloning'=>'Kopieren',
|
||||
'Cloned'=>'Kopiert',
|
||||
'Restarting'=>'Neustarten',
|
||||
'Restarted'=>'Negestartet',
|
||||
'Maintenance'=>'Wartung',
|
||||
|
||||
'Create jail'=>'Erstelle jail',
|
||||
'Edit jail'=>'Modifiziere jail',
|
||||
'Jail Settings'=>'Jail Einstellungen',
|
||||
'Jail name'=>'Jail Name',
|
||||
'Hostname'=>'Hostname',
|
||||
'available on the jail is not running'=>'Nur verfügbar, wenn die Jail nicht läuft',
|
||||
'IP address'=>'IP address',
|
||||
'Root password'=>'Root password (optional)',
|
||||
'Root password (again)'=>'Root password (again)',
|
||||
'Description'=>'Beschreibung',
|
||||
'Net Interface'=>'Netzwerk Interface',
|
||||
'Parameters'=>'Parameter',
|
||||
'Autostart'=>'Autostart',
|
||||
'Autostart jail at system startup'=>'Starte Jail beim Systemstart',
|
||||
'Base writable'=>'Base beschreibbar',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual Network Stack (VIMAGE)',
|
||||
'Mount'=>'Mount',
|
||||
'Enabled services'=>'Aktiviere services',
|
||||
'Create'=>'Erstellen',
|
||||
'Cancel'=>'Abbrechen',
|
||||
'Save'=>'Speichern',
|
||||
|
||||
'Delete'=>'Löschen',
|
||||
'Protected jail'=>'Geschützte jai',
|
||||
'Open VNC'=>'Open VNC',
|
||||
'Restart jail'=>'Starte Jail neu',
|
||||
'Restart bhyve'=>'Starte VM neu',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Kann nicht leer sein und muss starten mit / a-z / und darf keiner Sonderzeichen enthalten: -,.=%',
|
||||
'This field can not be empty'=>'Das Feld dard nicht leer sein',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Bitte valide IP-Adresse angeben wie z.B.: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Passwort darf nicht unter 3 Zeichen sein',
|
||||
'Please retype password correctly'=>'Bitte Passwort korrekt neu eingeben',
|
||||
|
||||
'edit'=>'Bearbeiten',
|
||||
'clone'=>'Kopieren',
|
||||
'export'=>'Exportieren',
|
||||
'helpers'=>'Hilfe',
|
||||
'rename'=>'Umbenennen',
|
||||
|
||||
'default is'=>'Stadnard ist',
|
||||
|
||||
'Create Virtual Machine'=>'Erstelle Virtual Machine',
|
||||
'Create Virtual Machine from Library'=>'Erstelle Virtual Machine aus Bibliothek',
|
||||
'Virtual Machine Settings'=>'Virtual Machine Einstellungen',
|
||||
'Virtual Machine name'=>'Virtual Machine Name',
|
||||
'VM OS profile'=>'VM OS Profil',
|
||||
'Authkey'=>'Authkey',
|
||||
'VM CPUs'=>'vCPU core',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Image Disk Größe',
|
||||
'VNC PORT'=>'VNC port ( 0 - ist Standard )',
|
||||
'VM Password'=>'Root Passwort',
|
||||
|
||||
'Create Authkey'=>'Erstelle Authkey',
|
||||
'Authkey name'=>'Authkey Name',
|
||||
'Authkey'=>'Authkey',
|
||||
|
||||
'Open'=>'Öffne',
|
||||
'Close'=>'Schließe',
|
||||
'Get'=>'Erhalte',
|
||||
'Update'=>'Aktualisieren',
|
||||
|
||||
'Updating'=>'Aktualisiere',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Versions Nummer (z.B.: 12.2, 13)',
|
||||
|
||||
'Source'=>'Quelle',
|
||||
|
||||
'@clone_warning@'=>'<strong>ACHTUNG!</strong> Kopieren eines laufenden Containers kann zu Dateninkonsistenz führen. Bitte stoppen Sie erst den Container!',
|
||||
|
||||
'edit_title'=>'Anpassen',
|
||||
'delete_title'=>'Löschen',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Bitte warten Sie, bis die VM initialisiert wurde',
|
||||
'You can click here, or wait'=>'Hier klicken oder warten',
|
||||
'some time'=>'einige Zeit',
|
||||
|
||||
'host_hostname'=>'Jail Fully Qualified Domain Name',
|
||||
'ip4_addr'=>'Jail IPv4 und/oder IPv6 Addresse',
|
||||
'allow_mount'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von Dateisystemen',
|
||||
'allow_nullfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail NULLFS Dateisystem',
|
||||
'allow_fdescfs'=>'Jail darf das fdescfs file system einbinden',
|
||||
'interface'=>'Automatisches Erstllen und Entfernen von IP Adressen auf ausgewählten NICs. 0 zum deaktivieren',
|
||||
'baserw'=>'Jail hat eine vollständige Kopie des Basis-Systemens. Kein NULLFS mount',
|
||||
'mount_ports'=>'Jail hat /usr/ports /usr/ports tree nur lesend',
|
||||
'astart'=>'Starte Jail beim Systemstart',
|
||||
'vnet'=>'Aktiviere Virtual Network Stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Binde ein FDESCFS Dateisystem ein',
|
||||
'allow_tmpfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von TMPFS Dateisystemen',
|
||||
'allow_zfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von ZFS Dateisystemen',
|
||||
'protected'=>'Erstellen von geschützten und nicht löschbaren Umgebungen',
|
||||
'allow_reserved_ports'=>'Erlaube der Jail Ports unterhalb von 1024 zu binden',
|
||||
'allow_raw_sockets'=>'Erlaube der Jail RAW Sockets zu erstellen',
|
||||
'allow_fusefs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von FUSE Dateisysteme',
|
||||
'allow_read_msgbuf'=>'Erlaube unpriviligierte Benutzern den Kernel Buffer zu lesen',
|
||||
'allow_vmm'=>'Jail darf auf vmm(4) zugreifen',
|
||||
'allow_unprivileged_proc_debug'=>'Erlaube unpriviligierten Prozessen Debug Optionen zu nutzen',
|
||||
|
||||
//''=>'',
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Einstellungen',
|
||||
'Profile'=>'Profile',
|
||||
'Support'=>'Hilfe',
|
||||
|
||||
'Overview'=>'Übersicht',
|
||||
'Summary Overview'=>'Zusammenfassung Übersicht',
|
||||
'Jails containers'=>'Jail containers',
|
||||
'Jails containers control panel'=>'Jail containers Einstellungen',
|
||||
'Template for jail'=>'Template für jail',
|
||||
'Helpers and wizard for containers'=>'Hilfe und Assistenten für Containers',
|
||||
'Helpers of jails'=>'Unterstützung of jails',
|
||||
'Virtual machine control panel'=>'Virtual Machine Einstellungen',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Virtual Machine Einstellungen',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Nodes Einstellungen',
|
||||
'VM Packages'=>'VM Pakete',
|
||||
'Manage for virtual machine packages'=>'Einrichten von VM Paketen',
|
||||
'Virtual Private Network'=>'Virtual Private Network',
|
||||
'Manage for virtual private networks'=>'Einstellungen für VPNs',
|
||||
'Authkeys'=>'Authkeys',
|
||||
'Manage for SSH auth key'=>'Einstellungen für SSH Schlüssel',
|
||||
'Storage Media'=>'Speichermedien',
|
||||
'Virtual Media Manager'=>'Virtual Media Verwaltung',
|
||||
'Repository'=>'Repository',
|
||||
'Remote repository'=>'Remote repository',
|
||||
'FreeBSD Bases'=>'FreeBSD Verwaltung',
|
||||
'FreeBSD bases manager'=>'FreeBSD Bases Verwaltung',
|
||||
'FreeBSD Sources'=>'FreeBSD Sources',
|
||||
'FreeBSD sources manager'=>'FreeBSD Sources Verwaltung',
|
||||
'Jail Marketplace'=>'Jail Marktplatz',
|
||||
'Public remote containers marketplace'=>'Öffentlicher Container Marktplatz',
|
||||
'Bhyve Marketplace'=>'Bhyve Marktplatz',
|
||||
'Public remote virtual machine marketplace'=>'Öffentlicher VM Marktplatz',
|
||||
'TaskLog'=>'TaskLog',
|
||||
'System task log'=>'System Prozess log',
|
||||
|
||||
'Not implemented yet'=>'Noch nicht implementiert',
|
||||
|
||||
|
||||
'Not Launched'=>'Nicht gestartet',
|
||||
'Starting'=>'Starte',
|
||||
'Launched'=>'Gestartet',
|
||||
'Creating'=>'Erstellen',
|
||||
'Created'=>'Erstellen',
|
||||
'Stopping'=>'Stoppen',
|
||||
'Stopped'=>'Gestoppt',
|
||||
'Removing'=>'Entfernen',
|
||||
'Exporting'=>'Exportieren',
|
||||
'Cloning'=>'Kopieren',
|
||||
'Cloned'=>'Kopiert',
|
||||
'Restarting'=>'Neustarten',
|
||||
'Restarted'=>'Negestartet',
|
||||
'Maintenance'=>'Wartung',
|
||||
|
||||
'Create jail'=>'Erstelle jail',
|
||||
'Edit jail'=>'Modifiziere jail',
|
||||
'Jail Settings'=>'Jail Einstellungen',
|
||||
'Jail name'=>'Jail Name',
|
||||
'Hostname'=>'Hostname',
|
||||
'available on the jail is not running'=>'Nur verfügbar, wenn die Jail nicht läuft',
|
||||
'IP address'=>'IP address',
|
||||
'Root password'=>'Root password (optional)',
|
||||
'Root password (again)'=>'Root password (again)',
|
||||
'Description'=>'Beschreibung',
|
||||
'Net Interface'=>'Netzwerk Interface',
|
||||
'Parameters'=>'Parameter',
|
||||
'Autostart'=>'Autostart',
|
||||
'Autostart jail at system startup'=>'Starte Jail beim Systemstart',
|
||||
'Base writable'=>'Base beschreibbar',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual Network Stack (VIMAGE)',
|
||||
'Mount'=>'Mount',
|
||||
'Enabled services'=>'Aktiviere services',
|
||||
'Create'=>'Erstellen',
|
||||
'Cancel'=>'Abbrechen',
|
||||
'Save'=>'Speichern',
|
||||
|
||||
'Delete'=>'Löschen',
|
||||
'Protected jail'=>'Geschützte jai',
|
||||
'Open VNC'=>'Open VNC',
|
||||
'Restart jail'=>'Starte Jail neu',
|
||||
'Restart bhyve'=>'Starte VM neu',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Kann nicht leer sein und muss starten mit / a-z / und darf keiner Sonderzeichen enthalten: -,.=%',
|
||||
'This field can not be empty'=>'Das Feld dard nicht leer sein',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Bitte valide IP-Adresse angeben wie z.B.: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Passwort darf nicht unter 3 Zeichen sein',
|
||||
'Please retype password correctly'=>'Bitte Passwort korrekt neu eingeben',
|
||||
|
||||
'edit'=>'Bearbeiten',
|
||||
'clone'=>'Kopieren',
|
||||
'export'=>'Exportieren',
|
||||
'helpers'=>'Hilfe',
|
||||
'rename'=>'Umbenennen',
|
||||
|
||||
'default is'=>'Stadnard ist',
|
||||
|
||||
'Create Virtual Machine'=>'Erstelle Virtual Machine',
|
||||
'Create Virtual Machine from Library'=>'Erstelle Virtual Machine aus Bibliothek',
|
||||
'Virtual Machine Settings'=>'Virtual Machine Einstellungen',
|
||||
'Virtual Machine name'=>'Virtual Machine Name',
|
||||
'VM OS profile'=>'VM OS Profil',
|
||||
'Authkey'=>'Authkey',
|
||||
'VM CPUs'=>'vCPU core',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Image Disk Größe',
|
||||
'VNC PORT'=>'VNC port ( 0 - ist Standard )',
|
||||
'VM Password'=>'Root Passwort',
|
||||
|
||||
'Create Authkey'=>'Erstelle Authkey',
|
||||
'Authkey name'=>'Authkey Name',
|
||||
'Authkey'=>'Authkey',
|
||||
|
||||
'Open'=>'Öffne',
|
||||
'Close'=>'Schließe',
|
||||
'Get'=>'Erhalte',
|
||||
'Update'=>'Aktualisieren',
|
||||
|
||||
'Updating'=>'Aktualisiere',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Versions Nummer (z.B.: 12.2, 13)',
|
||||
|
||||
'Source'=>'Quelle',
|
||||
|
||||
'@clone_warning@'=>'<strong>ACHTUNG!</strong> Kopieren eines laufenden Containers kann zu Dateninkonsistenz führen. Bitte stoppen Sie erst den Container!',
|
||||
|
||||
'edit_title'=>'Anpassen',
|
||||
'delete_title'=>'Löschen',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Bitte warten Sie, bis die VM initialisiert wurde',
|
||||
'You can click here, or wait'=>'Hier klicken oder warten',
|
||||
'some time'=>'einige Zeit',
|
||||
|
||||
'host_hostname'=>'Jail Fully Qualified Domain Name',
|
||||
'ip4_addr'=>'Jail IPv4 und/oder IPv6 Addresse',
|
||||
'allow_mount'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von Dateisystemen',
|
||||
'allow_nullfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail NULLFS Dateisystem',
|
||||
'allow_fdescfs'=>'Jail darf das fdescfs file system einbinden',
|
||||
'interface'=>'Automatisches Erstllen und Entfernen von IP Adressen auf ausgewählten NICs. 0 zum deaktivieren',
|
||||
'baserw'=>'Jail hat eine vollständige Kopie des Basis-Systemens. Kein NULLFS mount',
|
||||
'mount_ports'=>'Jail hat /usr/ports /usr/ports tree nur lesend',
|
||||
'astart'=>'Starte Jail beim Systemstart',
|
||||
'vnet'=>'Aktiviere Virtual Network Stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Binde ein FDESCFS Dateisystem ein',
|
||||
'allow_tmpfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von TMPFS Dateisystemen',
|
||||
'allow_zfs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von ZFS Dateisystemen',
|
||||
'protected'=>'Erstellen von geschützten und nicht löschbaren Umgebungen',
|
||||
'allow_reserved_ports'=>'Erlaube der Jail Ports unterhalb von 1024 zu binden',
|
||||
'allow_raw_sockets'=>'Erlaube der Jail RAW Sockets zu erstellen',
|
||||
'allow_fusefs'=>'Erlaube priviligierten Benutzern innerhalb der Jail das Einbinden von FUSE Dateisysteme',
|
||||
'allow_read_msgbuf'=>'Erlaube unpriviligierte Benutzern den Kernel Buffer zu lesen',
|
||||
'allow_vmm'=>'Jail darf auf vmm(4) zugreifen',
|
||||
'allow_unprivileged_proc_debug'=>'Erlaube unpriviligierten Prozessen Debug Optionen zu nutzen',
|
||||
|
||||
//''=>'',
|
||||
);
|
||||
@@ -1,49 +1,49 @@
|
||||
clonos.lang={
|
||||
"Error": "Error",
|
||||
"No data, add something": "No data, add something",
|
||||
"available on the jail is not running": "available when jail is not running",
|
||||
"Log is empty": "Log is empty",
|
||||
"Exported jails": "Exported jails",
|
||||
"Download": "Download",
|
||||
"Jail is created": "Jail is created",
|
||||
"Jail already launched": "Jail already launched",
|
||||
"Jail already stopped": "Jail already stopped",
|
||||
"Export not available on launched jail": "Export not available on launched jail",
|
||||
"This field cannot be left blank": "This field cannot be left blank",
|
||||
"You need to select one or more jails for clone": "You need to select one or more jails for clone",
|
||||
"You want to restart selected jail! Are you sure?":"You want to restart selected jail! Are you sure?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"You want to restart selected virtual machine! Are you sure?",
|
||||
"You want to delete selected jail! Are you sure?":"You want to delete selected jail! Are you sure?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"You want to delete selected virtual machine! Are you sure?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"You want to delete selected authkey! Are you sure?",
|
||||
|
||||
|
||||
"Not running":"Not running",
|
||||
"Not Launched":"Not Launched",
|
||||
"Launched":"Launched",
|
||||
"Stopping":"Stopping",
|
||||
"Stopped":"Stopped",
|
||||
"Removing":"Removing",
|
||||
"Removed":"Removed",
|
||||
"Creating":"Creating",
|
||||
"Created":"Created",
|
||||
"Starting":"Starting",
|
||||
"Exporting":"Exporting",
|
||||
"Cloning":"Cloning",
|
||||
"Cloned":"Cloned",
|
||||
"Restarting":"Restarting",
|
||||
"Restarted":"Restarted",
|
||||
"Update":"Update",
|
||||
"Updating":"Updating",
|
||||
"Updated":"Updated",
|
||||
"Delete":"Delete",
|
||||
"Save":"Save",
|
||||
|
||||
"end":"end",
|
||||
|
||||
"This name is already exists!":"This name is already exists!",
|
||||
"Passwords must match!":"Passwords must match!",
|
||||
|
||||
"@redirect_alert@":"You will be redirected to jails list in 3 seconds!",
|
||||
clonos.lang={
|
||||
"Error": "Error",
|
||||
"No data, add something": "No data, add something",
|
||||
"available on the jail is not running": "available when jail is not running",
|
||||
"Log is empty": "Log is empty",
|
||||
"Exported jails": "Exported jails",
|
||||
"Download": "Download",
|
||||
"Jail is created": "Jail is created",
|
||||
"Jail already launched": "Jail already launched",
|
||||
"Jail already stopped": "Jail already stopped",
|
||||
"Export not available on launched jail": "Export not available on launched jail",
|
||||
"This field cannot be left blank": "This field cannot be left blank",
|
||||
"You need to select one or more jails for clone": "You need to select one or more jails for clone",
|
||||
"You want to restart selected jail! Are you sure?":"You want to restart selected jail! Are you sure?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"You want to restart selected virtual machine! Are you sure?",
|
||||
"You want to delete selected jail! Are you sure?":"You want to delete selected jail! Are you sure?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"You want to delete selected virtual machine! Are you sure?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"You want to delete selected authkey! Are you sure?",
|
||||
|
||||
|
||||
"Not running":"Not running",
|
||||
"Not Launched":"Not Launched",
|
||||
"Launched":"Launched",
|
||||
"Stopping":"Stopping",
|
||||
"Stopped":"Stopped",
|
||||
"Removing":"Removing",
|
||||
"Removed":"Removed",
|
||||
"Creating":"Creating",
|
||||
"Created":"Created",
|
||||
"Starting":"Starting",
|
||||
"Exporting":"Exporting",
|
||||
"Cloning":"Cloning",
|
||||
"Cloned":"Cloned",
|
||||
"Restarting":"Restarting",
|
||||
"Restarted":"Restarted",
|
||||
"Update":"Update",
|
||||
"Updating":"Updating",
|
||||
"Updated":"Updated",
|
||||
"Delete":"Delete",
|
||||
"Save":"Save",
|
||||
|
||||
"end":"end",
|
||||
|
||||
"This name is already exists!":"This name is already exists!",
|
||||
"Passwords must match!":"Passwords must match!",
|
||||
|
||||
"@redirect_alert@":"You will be redirected to jails list in 3 seconds!",
|
||||
}
|
||||
@@ -1,159 +1,159 @@
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Settings',
|
||||
'Profile'=>'Profile',
|
||||
'Support'=>'Support',
|
||||
|
||||
'Overview'=>'Overview',
|
||||
'Summary Overview'=>'Summary Overview',
|
||||
'Jails containers'=>'Jail containers',
|
||||
'Jails containers control panel'=>'Jail containers control panel',
|
||||
'Template for jail'=>'Template for jail',
|
||||
'Helpers and wizard for containers'=>'Helpers and wizard for containers',
|
||||
'Helpers of jails'=>'Helpers of jails',
|
||||
'Virtual machine control panel'=>'Virtual machine control panel',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Virtual machine control panel',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Nodes control panel',
|
||||
'VM Packages'=>'VM Packages',
|
||||
'Manage for virtual machine packages'=>'Manage for virtual machine packages',
|
||||
'Virtual Private Network'=>'Virtual Private Network',
|
||||
'Manage for virtual private networks'=>'Manage for virtual private networks',
|
||||
'Authkeys'=>'Authkeys',
|
||||
'Manage for SSH auth key'=>'Manage for SSH auth key',
|
||||
'Storage Media'=>'Storage Media',
|
||||
'Virtual Media Manager'=>'Virtual Media Manager',
|
||||
'Repository'=>'Repository',
|
||||
'Remote repository'=>'Remote repository',
|
||||
'FreeBSD Bases'=>'FreeBSD Bases',
|
||||
'FreeBSD bases manager'=>'FreeBSD bases manager',
|
||||
'FreeBSD Sources'=>'FreeBSD Sources',
|
||||
'FreeBSD sources manager'=>'FreeBSD sources manager',
|
||||
'Jail Marketplace'=>'Jail Marketplace',
|
||||
'Public remote containers marketplace'=>'Public remote containers marketplace',
|
||||
'Bhyve Marketplace'=>'Bhyve Marketplace',
|
||||
'Public remote virtual machine marketplace'=>'Public remote virtual machine marketplace',
|
||||
'TaskLog'=>'TaskLog',
|
||||
'System task log'=>'System task log',
|
||||
|
||||
'Not implemented yet'=>'Not yet implemented',
|
||||
|
||||
|
||||
'Not Launched'=>'Not Launched',
|
||||
'Starting'=>'Starting',
|
||||
'Launched'=>'Launched',
|
||||
'Creating'=>'Creating',
|
||||
'Created'=>'Created',
|
||||
'Stopping'=>'Stopping',
|
||||
'Stopped'=>'Stopped',
|
||||
'Removing'=>'Removing',
|
||||
'Exporting'=>'Exporting',
|
||||
'Cloning'=>'Cloning',
|
||||
'Cloned'=>'Cloned',
|
||||
'Restarting'=>'Restarting',
|
||||
'Restarted'=>'Restarted',
|
||||
'Maintenance'=>'Maintenance',
|
||||
|
||||
'Create jail'=>'Create jail',
|
||||
'Edit jail'=>'Edit jail',
|
||||
'Jail Settings'=>'Jail Settings',
|
||||
'Jail name'=>'Jail name',
|
||||
'Hostname'=>'Hostname',
|
||||
'available on the jail is not running'=>'Available when the jail is not running',
|
||||
'IP address'=>'IP address',
|
||||
'Root password'=>'Root password (optional)',
|
||||
'Root password (again)'=>'Root password (again)',
|
||||
'Description'=>'Description',
|
||||
'Net Interface'=>'Net Interface',
|
||||
'Parameters'=>'Parameters',
|
||||
'Autostart'=>'Autostart',
|
||||
'Autostart jail at system startup'=>'Autostart jail at system startup',
|
||||
'Base writable'=>'Base writable',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual network stack (VIMAGE)',
|
||||
'Mount'=>'Mount',
|
||||
'Enabled services'=>'Enabled services',
|
||||
'Create'=>'Create',
|
||||
'Cancel'=>'Cancel',
|
||||
'Save'=>'Save',
|
||||
|
||||
'Delete'=>'Delete',
|
||||
'Protected jail'=>'Protected jail',
|
||||
'Open VNC'=>'Open VNC',
|
||||
'Restart jail'=>'Restart jail',
|
||||
'Restart bhyve'=>'Restart VM',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Can not be empty. Name must begin with a letter / a-z / and may not have any special symbols: -,.=%',
|
||||
'This field can not be empty'=>'This field cannot be empty',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Write the correct ip address, e.g: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Password can not be less than 3 symbols',
|
||||
'Please retype password correctly'=>'Please retype password correctly',
|
||||
|
||||
'edit'=>'edit',
|
||||
'clone'=>'clone',
|
||||
'export'=>'export',
|
||||
'helpers'=>'helpers',
|
||||
'rename'=>'rename',
|
||||
|
||||
'default is'=>'default is',
|
||||
|
||||
'Create Virtual Machine'=>'Create Virtual Machine',
|
||||
'Create Virtual Machine from Library'=>'Obtain Virtual Machine from Library',
|
||||
'Virtual Machine Settings'=>'Virtual Machine Settings',
|
||||
'Virtual Machine name'=>'Virtual Machine name',
|
||||
'VM OS profile'=>'VM OS profile',
|
||||
'Authkey'=>'Authkey',
|
||||
'VM CPUs'=>'vCPU core',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Image disk size',
|
||||
'VNC PORT'=>'VNC port ( 0 - is auto )',
|
||||
'VM Password'=>'Root password',
|
||||
|
||||
'Create Authkey'=>'Create Authkey',
|
||||
'Authkey name'=>'Authkey name',
|
||||
'Authkey'=>'Authkey',
|
||||
|
||||
'Open'=>'Open',
|
||||
'Close'=>'Close',
|
||||
'Get'=>'Get',
|
||||
'Update'=>'Update',
|
||||
|
||||
'Updating'=>'Updating',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Version number (e.g: 12.2, 13)',
|
||||
|
||||
'Source'=>'Source',
|
||||
|
||||
'@clone_warning@'=>'<strong>ATTENTION!</strong> Cloning a running container can lead into data inconsistency in clones (e.g. environments with active databases). Stop the container for safe cloning or continue, if you are confident in the security operation!',
|
||||
|
||||
'edit_title'=>'Edit',
|
||||
'delete_title'=>'Delete',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Please, wait for initializing the Virtual Machine',
|
||||
'You can click here, or wait'=>'You can click here, or wait',
|
||||
'some time'=>'some time',
|
||||
|
||||
'host_hostname'=>'Jail Fully Qualified Domain Name',
|
||||
'ip4_addr'=>'Jail IPv4 and/or IPv6 address',
|
||||
'allow_mount'=>'Allow privileged users inside the jail to mount and unmount file system',
|
||||
'allow_nullfs'=>'Allow privileged users inside the jail to mount and unmount NULLFS file system',
|
||||
'allow_fdescfs'=>'Jail may mount the fdescfs file system',
|
||||
'interface'=>'Auto create and auto remove IP on selected NICs. 0 for disable',
|
||||
'baserw'=>'Jail has personal copy of base system with write access, no NULLFS mount',
|
||||
'mount_ports'=>'Jail has /usr/ports /usr/ports tree in read-only',
|
||||
'astart'=>'Autostart jail at system startup',
|
||||
'vnet'=>'Enable virtual network stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Mount a FDESCFS filesystem on the chrooted',
|
||||
'allow_tmpfs'=>'Allow privileged users inside the jail mount and unmount TMPFS file system',
|
||||
'allow_zfs'=>'Privileged users inside the jail will be able to mount and unmount the ZFS file system',
|
||||
'protected'=>'Prevent modification or deletion of an environment',
|
||||
'allow_reserved_ports'=>'Allow the jail root user to bind to ports lower than 1024',
|
||||
'allow_raw_sockets'=>'The jail root user is allowed to create raw sockets',
|
||||
'allow_fusefs'=>'Allow privileged users inside the jail to mount and unmount fuse-based file systems',
|
||||
'allow_read_msgbuf'=>'Allow an unprivileged user to read the kernel message buffer',
|
||||
'allow_vmm'=>'The jail may access vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Unprivileged processes in the jail may use debugging facilities',
|
||||
|
||||
//''=>'',
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Settings',
|
||||
'Profile'=>'Profile',
|
||||
'Support'=>'Support',
|
||||
|
||||
'Overview'=>'Overview',
|
||||
'Summary Overview'=>'Summary Overview',
|
||||
'Jails containers'=>'Jail containers',
|
||||
'Jails containers control panel'=>'Jail containers control panel',
|
||||
'Template for jail'=>'Template for jail',
|
||||
'Helpers and wizard for containers'=>'Helpers and wizard for containers',
|
||||
'Helpers of jails'=>'Helpers of jails',
|
||||
'Virtual machine control panel'=>'Virtual machine control panel',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Virtual machine control panel',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Nodes control panel',
|
||||
'VM Packages'=>'VM Packages',
|
||||
'Manage for virtual machine packages'=>'Manage for virtual machine packages',
|
||||
'Virtual Private Network'=>'Virtual Private Network',
|
||||
'Manage for virtual private networks'=>'Manage for virtual private networks',
|
||||
'Authkeys'=>'Authkeys',
|
||||
'Manage for SSH auth key'=>'Manage for SSH auth key',
|
||||
'Storage Media'=>'Storage Media',
|
||||
'Virtual Media Manager'=>'Virtual Media Manager',
|
||||
'Repository'=>'Repository',
|
||||
'Remote repository'=>'Remote repository',
|
||||
'FreeBSD Bases'=>'FreeBSD Bases',
|
||||
'FreeBSD bases manager'=>'FreeBSD bases manager',
|
||||
'FreeBSD Sources'=>'FreeBSD Sources',
|
||||
'FreeBSD sources manager'=>'FreeBSD sources manager',
|
||||
'Jail Marketplace'=>'Jail Marketplace',
|
||||
'Public remote containers marketplace'=>'Public remote containers marketplace',
|
||||
'Bhyve Marketplace'=>'Bhyve Marketplace',
|
||||
'Public remote virtual machine marketplace'=>'Public remote virtual machine marketplace',
|
||||
'TaskLog'=>'TaskLog',
|
||||
'System task log'=>'System task log',
|
||||
|
||||
'Not implemented yet'=>'Not yet implemented',
|
||||
|
||||
|
||||
'Not Launched'=>'Not Launched',
|
||||
'Starting'=>'Starting',
|
||||
'Launched'=>'Launched',
|
||||
'Creating'=>'Creating',
|
||||
'Created'=>'Created',
|
||||
'Stopping'=>'Stopping',
|
||||
'Stopped'=>'Stopped',
|
||||
'Removing'=>'Removing',
|
||||
'Exporting'=>'Exporting',
|
||||
'Cloning'=>'Cloning',
|
||||
'Cloned'=>'Cloned',
|
||||
'Restarting'=>'Restarting',
|
||||
'Restarted'=>'Restarted',
|
||||
'Maintenance'=>'Maintenance',
|
||||
|
||||
'Create jail'=>'Create jail',
|
||||
'Edit jail'=>'Edit jail',
|
||||
'Jail Settings'=>'Jail Settings',
|
||||
'Jail name'=>'Jail name',
|
||||
'Hostname'=>'Hostname',
|
||||
'available on the jail is not running'=>'Available when the jail is not running',
|
||||
'IP address'=>'IP address',
|
||||
'Root password'=>'Root password (optional)',
|
||||
'Root password (again)'=>'Root password (again)',
|
||||
'Description'=>'Description',
|
||||
'Net Interface'=>'Net Interface',
|
||||
'Parameters'=>'Parameters',
|
||||
'Autostart'=>'Autostart',
|
||||
'Autostart jail at system startup'=>'Autostart jail at system startup',
|
||||
'Base writable'=>'Base writable',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual network stack (VIMAGE)',
|
||||
'Mount'=>'Mount',
|
||||
'Enabled services'=>'Enabled services',
|
||||
'Create'=>'Create',
|
||||
'Cancel'=>'Cancel',
|
||||
'Save'=>'Save',
|
||||
|
||||
'Delete'=>'Delete',
|
||||
'Protected jail'=>'Protected jail',
|
||||
'Open VNC'=>'Open VNC',
|
||||
'Restart jail'=>'Restart jail',
|
||||
'Restart bhyve'=>'Restart VM',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Can not be empty. Name must begin with a letter / a-z / and may not have any special symbols: -,.=%',
|
||||
'This field can not be empty'=>'This field cannot be empty',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Write the correct ip address, e.g: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Password can not be less than 3 symbols',
|
||||
'Please retype password correctly'=>'Please retype password correctly',
|
||||
|
||||
'edit'=>'edit',
|
||||
'clone'=>'clone',
|
||||
'export'=>'export',
|
||||
'helpers'=>'helpers',
|
||||
'rename'=>'rename',
|
||||
|
||||
'default is'=>'default is',
|
||||
|
||||
'Create Virtual Machine'=>'Create Virtual Machine',
|
||||
'Create Virtual Machine from Library'=>'Obtain Virtual Machine from Library',
|
||||
'Virtual Machine Settings'=>'Virtual Machine Settings',
|
||||
'Virtual Machine name'=>'Virtual Machine name',
|
||||
'VM OS profile'=>'VM OS profile',
|
||||
'Authkey'=>'Authkey',
|
||||
'VM CPUs'=>'vCPU core',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Image disk size',
|
||||
'VNC PORT'=>'VNC port ( 0 - is auto )',
|
||||
'VM Password'=>'Root password',
|
||||
|
||||
'Create Authkey'=>'Create Authkey',
|
||||
'Authkey name'=>'Authkey name',
|
||||
'Authkey'=>'Authkey',
|
||||
|
||||
'Open'=>'Open',
|
||||
'Close'=>'Close',
|
||||
'Get'=>'Get',
|
||||
'Update'=>'Update',
|
||||
|
||||
'Updating'=>'Updating',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Version number (e.g: 12.2, 13)',
|
||||
|
||||
'Source'=>'Source',
|
||||
|
||||
'@clone_warning@'=>'<strong>ATTENTION!</strong> Cloning a running container can lead into data inconsistency in clones (e.g. environments with active databases). Stop the container for safe cloning or continue, if you are confident in the security operation!',
|
||||
|
||||
'edit_title'=>'Edit',
|
||||
'delete_title'=>'Delete',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Please, wait for initializing the Virtual Machine',
|
||||
'You can click here, or wait'=>'You can click here, or wait',
|
||||
'some time'=>'some time',
|
||||
|
||||
'host_hostname'=>'Jail Fully Qualified Domain Name',
|
||||
'ip4_addr'=>'Jail IPv4 and/or IPv6 address',
|
||||
'allow_mount'=>'Allow privileged users inside the jail to mount and unmount file system',
|
||||
'allow_nullfs'=>'Allow privileged users inside the jail to mount and unmount NULLFS file system',
|
||||
'allow_fdescfs'=>'Jail may mount the fdescfs file system',
|
||||
'interface'=>'Auto create and auto remove IP on selected NICs. 0 for disable',
|
||||
'baserw'=>'Jail has personal copy of base system with write access, no NULLFS mount',
|
||||
'mount_ports'=>'Jail has /usr/ports /usr/ports tree in read-only',
|
||||
'astart'=>'Autostart jail at system startup',
|
||||
'vnet'=>'Enable virtual network stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Mount a FDESCFS filesystem on the chrooted',
|
||||
'allow_tmpfs'=>'Allow privileged users inside the jail mount and unmount TMPFS file system',
|
||||
'allow_zfs'=>'Privileged users inside the jail will be able to mount and unmount the ZFS file system',
|
||||
'protected'=>'Prevent modification or deletion of an environment',
|
||||
'allow_reserved_ports'=>'Allow the jail root user to bind to ports lower than 1024',
|
||||
'allow_raw_sockets'=>'The jail root user is allowed to create raw sockets',
|
||||
'allow_fusefs'=>'Allow privileged users inside the jail to mount and unmount fuse-based file systems',
|
||||
'allow_read_msgbuf'=>'Allow an unprivileged user to read the kernel message buffer',
|
||||
'allow_vmm'=>'The jail may access vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Unprivileged processes in the jail may use debugging facilities',
|
||||
|
||||
//''=>'',
|
||||
);
|
||||
@@ -1,49 +1,49 @@
|
||||
clonos.lang={
|
||||
"Error": "Error",
|
||||
"No data, add something": "Sin datos, añade algo",
|
||||
"available on the jail is not running": "disponible cuando la jaula no está en ejecución",
|
||||
"Log is empty": "Registro vacío",
|
||||
"Exported jails": "Jaulas exportadas",
|
||||
"Download": "Descarga",
|
||||
"Jail is created": "Jaula creada",
|
||||
"Jail already launched": "Jaula ya lanzada",
|
||||
"Jail already stopped": "Jaula ya detenida",
|
||||
"Export not available on launched jail": "Exportar no disponible con la jaula en ejecución",
|
||||
"This field cannot be left blank": "Este campo no puede dejarse en blanco",
|
||||
"You need to select one or more jails for clone": "Debes seleccionar una o más jaulas para clonar",
|
||||
"You want to restart selected jail! Are you sure?":"Deseas reiniciar la jaula seleccionada. ¿Estás seguro?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Deseas reiniciar la máquina virtual seleccionada. ¿Estás seguro?",
|
||||
"You want to delete selected jail! Are you sure?":"Deseas eliminar la jaula seleccionada. ¿Estás seguro?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Deseas eliminar la máquina virtual seleccionada. ¿Estás seguro?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Deseas eliminar la clave de autenticación seleccionada. ¿Estás seguro?",
|
||||
|
||||
|
||||
"Not running":"No está en ejecución",
|
||||
"Not Launched":"No Lanzado",
|
||||
"Launched":"Lanzado",
|
||||
"Stopping":"Deteniendo",
|
||||
"Stopped":"Detenido",
|
||||
"Removing":"Eliminando",
|
||||
"Removed":"Eliminado",
|
||||
"Creating":"Creando",
|
||||
"Created":"Creado",
|
||||
"Starting":"Iniciando",
|
||||
"Exporting":"Exportando",
|
||||
"Cloning":"Clonando",
|
||||
"Cloned":"Clonado",
|
||||
"Restarting":"Reiniciando",
|
||||
"Restarted":"Reiniciado",
|
||||
"Update":"Actualizar",
|
||||
"Updating":"Actualizando",
|
||||
"Updated":"Actualizado",
|
||||
"Delete":"Eliminar",
|
||||
"Save":"Guardar",
|
||||
|
||||
"end":"fin",
|
||||
|
||||
"This name is already exists!":"¡Este nombre ya existe!",
|
||||
"Passwords must match!":"¡Las contraseñas deben coincidir!",
|
||||
|
||||
"@redirect_alert@":"¡Vas a ser redirigido a la lista de jaulas en 3 segundos!",
|
||||
}
|
||||
clonos.lang={
|
||||
"Error": "Error",
|
||||
"No data, add something": "Sin datos, añade algo",
|
||||
"available on the jail is not running": "disponible cuando la jaula no está en ejecución",
|
||||
"Log is empty": "Registro vacío",
|
||||
"Exported jails": "Jaulas exportadas",
|
||||
"Download": "Descarga",
|
||||
"Jail is created": "Jaula creada",
|
||||
"Jail already launched": "Jaula ya lanzada",
|
||||
"Jail already stopped": "Jaula ya detenida",
|
||||
"Export not available on launched jail": "Exportar no disponible con la jaula en ejecución",
|
||||
"This field cannot be left blank": "Este campo no puede dejarse en blanco",
|
||||
"You need to select one or more jails for clone": "Debes seleccionar una o más jaulas para clonar",
|
||||
"You want to restart selected jail! Are you sure?":"Deseas reiniciar la jaula seleccionada. ¿Estás seguro?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Deseas reiniciar la máquina virtual seleccionada. ¿Estás seguro?",
|
||||
"You want to delete selected jail! Are you sure?":"Deseas eliminar la jaula seleccionada. ¿Estás seguro?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Deseas eliminar la máquina virtual seleccionada. ¿Estás seguro?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Deseas eliminar la clave de autenticación seleccionada. ¿Estás seguro?",
|
||||
|
||||
|
||||
"Not running":"No está en ejecución",
|
||||
"Not Launched":"No Lanzado",
|
||||
"Launched":"Lanzado",
|
||||
"Stopping":"Deteniendo",
|
||||
"Stopped":"Detenido",
|
||||
"Removing":"Eliminando",
|
||||
"Removed":"Eliminado",
|
||||
"Creating":"Creando",
|
||||
"Created":"Creado",
|
||||
"Starting":"Iniciando",
|
||||
"Exporting":"Exportando",
|
||||
"Cloning":"Clonando",
|
||||
"Cloned":"Clonado",
|
||||
"Restarting":"Reiniciando",
|
||||
"Restarted":"Reiniciado",
|
||||
"Update":"Actualizar",
|
||||
"Updating":"Actualizando",
|
||||
"Updated":"Actualizado",
|
||||
"Delete":"Eliminar",
|
||||
"Save":"Guardar",
|
||||
|
||||
"end":"fin",
|
||||
|
||||
"This name is already exists!":"¡Este nombre ya existe!",
|
||||
"Passwords must match!":"¡Las contraseñas deben coincidir!",
|
||||
|
||||
"@redirect_alert@":"¡Vas a ser redirigido a la lista de jaulas en 3 segundos!",
|
||||
}
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Ajustes',
|
||||
'Profile'=>'Perfil',
|
||||
'Support'=>'Soporte',
|
||||
|
||||
'Overview'=>'Resumen',
|
||||
'Summary Overview'=>'Resumen General',
|
||||
'Jails containers'=>'Jaulas contenedores',
|
||||
'Jails containers control panel'=>'Panel de control de Jaulas',
|
||||
'Template for jail'=>'Plantilla de jaula',
|
||||
'Helpers and wizard for containers'=>'Asistentes para contenedores',
|
||||
'Helpers of jails'=>'Asistentes para jaulas',
|
||||
'Virtual machine control panel'=>'Panel de control de Máquinas Virtuales',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Panel de control de Máquinas Virtuales',
|
||||
'Nodes'=>'Nodos',
|
||||
'Nodes control panel'=>'Panel de control de Nodos',
|
||||
'VM Packages'=>'Paquetes VM',
|
||||
'Manager for virtual machine packages'=>'Gestor de paquetes de Máquinas Virtuales',
|
||||
'Virtual Private Network'=>'Red Privada Virtual',
|
||||
'Manager for virtual private networks'=>'Gestor de redes privadas virtuales',
|
||||
'Authkeys'=>'Claves de autenticación',
|
||||
'Manager for SSH auth key'=>'Gestor de claves de autenticación de SSH',
|
||||
'Storage Media'=>'Medios de Almacenamiento',
|
||||
'Virtual Media Manager'=>'Gestor de Medios Virtuales',
|
||||
'Repository'=>'Repositorio',
|
||||
'Remote repository'=>'Repositorio remoto',
|
||||
'FreeBSD Bases'=>'Bases FreeBSD',
|
||||
'FreeBSD bases manager'=>'Gestor de bases FreeBSD',
|
||||
'FreeBSD Sources'=>'Fuentes FreeBSD',
|
||||
'FreeBSD sources manager'=>'Gestor de fuentes FreeBSD',
|
||||
'Jail Marketplace'=>'Mercado de Jaulas',
|
||||
'Public remote containers marketplace'=>'Mercado de contenedores públicos remotos',
|
||||
'Bhyve Marketplace'=>'Mercado Bhyve',
|
||||
'Public remote virtual machine marketplace'=>'Mercado de máquinas virtuales públicas remotas',
|
||||
'TaskLog'=>'Registro de Tareas',
|
||||
'System task log'=>'Registro de Tareas del Sistema',
|
||||
|
||||
'Not implemented yet'=>'Sin implementación',
|
||||
|
||||
|
||||
'Not Launched'=>'No Lanzado',
|
||||
'Starting'=>'Iniciando',
|
||||
'Launched'=>'Lanzado',
|
||||
'Creating'=>'Creando',
|
||||
'Created'=>'Creado',
|
||||
'Stopping'=>'Deteniendo',
|
||||
'Stopped'=>'Detenido',
|
||||
'Removing'=>'Eliminando',
|
||||
'Exporting'=>'Exportando',
|
||||
'Cloning'=>'Clonando',
|
||||
'Cloned'=>'Clonado',
|
||||
'Restarting'=>'Reiniciando',
|
||||
'Restarted'=>'Reniniciado',
|
||||
'Maintenance'=>'Mantenimiento',
|
||||
|
||||
'Create jail'=>'Crear Jaula',
|
||||
'Edit jail'=>'Editar Jaula',
|
||||
'Jail Settings'=>'Ajustes de la Jaula',
|
||||
'Jail name'=>'Nombre de la Jaula',
|
||||
'Hostname'=>'Nombre de Host',
|
||||
'available on the jail is not running'=>'available on the jail is not running',
|
||||
'IP address'=>'Dirección IP',
|
||||
'Root password'=>'Contraseña Root (opcional)',
|
||||
'Root password (again)'=>'Contraseña Root (otra vez)',
|
||||
'Description'=>'Descripción',
|
||||
'Net Interface'=>'Interfaz de Red',
|
||||
'Parameters'=>'Parámetros',
|
||||
'Autostart'=>'Autoiniciar',
|
||||
'Autostart jail at system startup'=>'Autoiniciar jaula al arranque del sistema',
|
||||
'Base writable'=>'Base escribible',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual network stack (VIMAGE)',
|
||||
'Mount'=>'Montar',
|
||||
'Enabled services'=>'Servicios activados',
|
||||
'Create'=>'Crear',
|
||||
'Cancel'=>'Cancelar',
|
||||
'Save'=>'Guardar',
|
||||
|
||||
'Delete'=>'Eliminar',
|
||||
'Protected jail'=>'Jaula Protegida',
|
||||
'Open VNC'=>'Abrir VNC',
|
||||
'Restart jail'=>'Reiniciar jaula',
|
||||
'Restart bhyve'=>'Reiniciar MV',
|
||||
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'No puede estar vacío. El nombre debe empezar por una letra / a-z / y no tener símbolos especiales: -,.=%',
|
||||
'This field can not be empty'=>'Este campo no puede estar vacío',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Escriba la dirección IP correcta, ejemplo: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'La contraseña no puede ser menos de 3 símbolos',
|
||||
'Please retype password correctly'=>'Por favor, reescribe la contraseña correctamente',
|
||||
|
||||
'edit'=>'editar',
|
||||
'clone'=>'clonar',
|
||||
'export'=>'exportar',
|
||||
'helpers'=>'asistentes',
|
||||
'rename'=>'renombrar',
|
||||
|
||||
'default is'=>'por defecto es',
|
||||
|
||||
'Create Virtual Machine'=>'Crear Máquina Virtual',
|
||||
'Create Virtual Machine from Library'=>'Obtener Máquina Virtual from Biblioteca',
|
||||
'Virtual Machine Settings'=>'Ajustes de Máquina Virtual',
|
||||
'Virtual Machine name'=>'Nombre de la Máquina Virtual',
|
||||
'VM OS profile'=>'Perfil MV SO',
|
||||
'Authkey'=>'Clave de Autenticación',
|
||||
'VM CPUs'=>'MV CPUs',
|
||||
'VM RAM'=>'MV RAM',
|
||||
'VM Image size'=>'Tamaño de la imagen de disco',
|
||||
'VNC PORT'=>'Puerto VNC ( 0 - is auto )',
|
||||
'VM Password'=>'Contraseña MV',
|
||||
|
||||
'Create Authkey'=>'Crear Clave de Autenticación',
|
||||
'Authkey name'=>'Nombre de Clave de Autenticación',
|
||||
'Authkey'=>'Clave de Autenticación',
|
||||
|
||||
'Open'=>'Abrir',
|
||||
'Close'=>'Cerrar',
|
||||
'Get'=>'Conseguir',
|
||||
'Update'=>'Actualizar',
|
||||
|
||||
'Updating'=>'Actualizando',
|
||||
'Version'=>'Versión',
|
||||
'Version number'=>'Número de versión(ejemplo:: 12.2, 13)',
|
||||
|
||||
'Source'=>'Fuente',
|
||||
|
||||
'@clone_warning@'=>'<strong>¡ATENCIÓN!</strong> ¡Clonar del contenedor en ejecución puede llevar a inconsistencias de datos en los clones, (por ejemplo en entornos con bases de datos activas). Detenga el contenedor para una clonación segura, o continúe si está conforme con la seguridad de la operación!',
|
||||
|
||||
'edit_title'=>'Editar',
|
||||
'delete_title'=>'Eliminar',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Por favor, espere a la inicialización de la Máquina Virtual',
|
||||
'You can click here, or wait'=>'Puede hacer click aquí, o esperar',
|
||||
'some time'=>'algún tiempo',
|
||||
|
||||
'host_hostname'=>'Nombre de Dominio Completo de la Jaula (FQDN)',
|
||||
'ip4_addr'=>'todas las direcciones IPv4 y/o IPv6',
|
||||
'allow_mount'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros dentro de la jaula',
|
||||
'allow_nullfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros NULLFS dentro de la jaula',
|
||||
'allow_fdescfs'=>'La jaula puede montar el sistema de ficheros fdescfs',
|
||||
'interface'=>'Crear y eliminar automáticamente IP en NICs seleccionadas. 0 para deshabilitar',
|
||||
'baserw'=>'La jaula tiene una copia personal del sistema base con permisos de escritura, montar NULLFS no disponible',
|
||||
'mount_ports'=>'La jaula tiene /usr/ports /usr/ports/tree en sólo lectura',
|
||||
'astart'=>'Iniciar automáticamente la jaula al arranque',
|
||||
'vnet'=>'Habilitar virtual network stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Montar un sistema de ficheros FDESCFS usando chroot',
|
||||
'allow_tmpfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros TMPFS dentro de la jaula',
|
||||
'allow_zfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros ZFS dentro de la jaula',
|
||||
'protected'=>'Prevenir modificación o eliminación de un entorno',
|
||||
'allow_reserved_ports'=>'Permitir al root de la jaula enlazar puertos menores a 1024',
|
||||
'allow_raw_sockets'=>'El root de la jaula puede crear raw sockets',
|
||||
'allow_fusefs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros basados en FUSE dentro de la jaula',
|
||||
'allow_read_msgbuf'=>'Permitir a un usuario no privilegiado leer el buffer de mensajes del kernel',
|
||||
'allow_vmm'=>'La jaula puede acceder a vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Procesos no privilegiados en la jaula pueden usar instalaciones de depuración',
|
||||
|
||||
//''=>'',
|
||||
);
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Ajustes',
|
||||
'Profile'=>'Perfil',
|
||||
'Support'=>'Soporte',
|
||||
|
||||
'Overview'=>'Resumen',
|
||||
'Summary Overview'=>'Resumen General',
|
||||
'Jails containers'=>'Jaulas contenedores',
|
||||
'Jails containers control panel'=>'Panel de control de Jaulas',
|
||||
'Template for jail'=>'Plantilla de jaula',
|
||||
'Helpers and wizard for containers'=>'Asistentes para contenedores',
|
||||
'Helpers of jails'=>'Asistentes para jaulas',
|
||||
'Virtual machine control panel'=>'Panel de control de Máquinas Virtuales',
|
||||
'Bhyve VMs'=>'Bhyve VMs',
|
||||
'Virtual machine control panel'=>'Panel de control de Máquinas Virtuales',
|
||||
'Nodes'=>'Nodos',
|
||||
'Nodes control panel'=>'Panel de control de Nodos',
|
||||
'VM Packages'=>'Paquetes VM',
|
||||
'Manager for virtual machine packages'=>'Gestor de paquetes de Máquinas Virtuales',
|
||||
'Virtual Private Network'=>'Red Privada Virtual',
|
||||
'Manager for virtual private networks'=>'Gestor de redes privadas virtuales',
|
||||
'Authkeys'=>'Claves de autenticación',
|
||||
'Manager for SSH auth key'=>'Gestor de claves de autenticación de SSH',
|
||||
'Storage Media'=>'Medios de Almacenamiento',
|
||||
'Virtual Media Manager'=>'Gestor de Medios Virtuales',
|
||||
'Repository'=>'Repositorio',
|
||||
'Remote repository'=>'Repositorio remoto',
|
||||
'FreeBSD Bases'=>'Bases FreeBSD',
|
||||
'FreeBSD bases manager'=>'Gestor de bases FreeBSD',
|
||||
'FreeBSD Sources'=>'Fuentes FreeBSD',
|
||||
'FreeBSD sources manager'=>'Gestor de fuentes FreeBSD',
|
||||
'Jail Marketplace'=>'Mercado de Jaulas',
|
||||
'Public remote containers marketplace'=>'Mercado de contenedores públicos remotos',
|
||||
'Bhyve Marketplace'=>'Mercado Bhyve',
|
||||
'Public remote virtual machine marketplace'=>'Mercado de máquinas virtuales públicas remotas',
|
||||
'TaskLog'=>'Registro de Tareas',
|
||||
'System task log'=>'Registro de Tareas del Sistema',
|
||||
|
||||
'Not implemented yet'=>'Sin implementación',
|
||||
|
||||
|
||||
'Not Launched'=>'No Lanzado',
|
||||
'Starting'=>'Iniciando',
|
||||
'Launched'=>'Lanzado',
|
||||
'Creating'=>'Creando',
|
||||
'Created'=>'Creado',
|
||||
'Stopping'=>'Deteniendo',
|
||||
'Stopped'=>'Detenido',
|
||||
'Removing'=>'Eliminando',
|
||||
'Exporting'=>'Exportando',
|
||||
'Cloning'=>'Clonando',
|
||||
'Cloned'=>'Clonado',
|
||||
'Restarting'=>'Reiniciando',
|
||||
'Restarted'=>'Reniniciado',
|
||||
'Maintenance'=>'Mantenimiento',
|
||||
|
||||
'Create jail'=>'Crear Jaula',
|
||||
'Edit jail'=>'Editar Jaula',
|
||||
'Jail Settings'=>'Ajustes de la Jaula',
|
||||
'Jail name'=>'Nombre de la Jaula',
|
||||
'Hostname'=>'Nombre de Host',
|
||||
'available on the jail is not running'=>'available on the jail is not running',
|
||||
'IP address'=>'Dirección IP',
|
||||
'Root password'=>'Contraseña Root (opcional)',
|
||||
'Root password (again)'=>'Contraseña Root (otra vez)',
|
||||
'Description'=>'Descripción',
|
||||
'Net Interface'=>'Interfaz de Red',
|
||||
'Parameters'=>'Parámetros',
|
||||
'Autostart'=>'Autoiniciar',
|
||||
'Autostart jail at system startup'=>'Autoiniciar jaula al arranque del sistema',
|
||||
'Base writable'=>'Base escribible',
|
||||
'Virtual network stack (VIMAGE)'=>'Virtual network stack (VIMAGE)',
|
||||
'Mount'=>'Montar',
|
||||
'Enabled services'=>'Servicios activados',
|
||||
'Create'=>'Crear',
|
||||
'Cancel'=>'Cancelar',
|
||||
'Save'=>'Guardar',
|
||||
|
||||
'Delete'=>'Eliminar',
|
||||
'Protected jail'=>'Jaula Protegida',
|
||||
'Open VNC'=>'Abrir VNC',
|
||||
'Restart jail'=>'Reiniciar jaula',
|
||||
'Restart bhyve'=>'Reiniciar MV',
|
||||
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'No puede estar vacío. El nombre debe empezar por una letra / a-z / y no tener símbolos especiales: -,.=%',
|
||||
'This field can not be empty'=>'Este campo no puede estar vacío',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Escriba la dirección IP correcta, ejemplo: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'La contraseña no puede ser menos de 3 símbolos',
|
||||
'Please retype password correctly'=>'Por favor, reescribe la contraseña correctamente',
|
||||
|
||||
'edit'=>'editar',
|
||||
'clone'=>'clonar',
|
||||
'export'=>'exportar',
|
||||
'helpers'=>'asistentes',
|
||||
'rename'=>'renombrar',
|
||||
|
||||
'default is'=>'por defecto es',
|
||||
|
||||
'Create Virtual Machine'=>'Crear Máquina Virtual',
|
||||
'Create Virtual Machine from Library'=>'Obtener Máquina Virtual from Biblioteca',
|
||||
'Virtual Machine Settings'=>'Ajustes de Máquina Virtual',
|
||||
'Virtual Machine name'=>'Nombre de la Máquina Virtual',
|
||||
'VM OS profile'=>'Perfil MV SO',
|
||||
'Authkey'=>'Clave de Autenticación',
|
||||
'VM CPUs'=>'MV CPUs',
|
||||
'VM RAM'=>'MV RAM',
|
||||
'VM Image size'=>'Tamaño de la imagen de disco',
|
||||
'VNC PORT'=>'Puerto VNC ( 0 - is auto )',
|
||||
'VM Password'=>'Contraseña MV',
|
||||
|
||||
'Create Authkey'=>'Crear Clave de Autenticación',
|
||||
'Authkey name'=>'Nombre de Clave de Autenticación',
|
||||
'Authkey'=>'Clave de Autenticación',
|
||||
|
||||
'Open'=>'Abrir',
|
||||
'Close'=>'Cerrar',
|
||||
'Get'=>'Conseguir',
|
||||
'Update'=>'Actualizar',
|
||||
|
||||
'Updating'=>'Actualizando',
|
||||
'Version'=>'Versión',
|
||||
'Version number'=>'Número de versión(ejemplo:: 12.2, 13)',
|
||||
|
||||
'Source'=>'Fuente',
|
||||
|
||||
'@clone_warning@'=>'<strong>¡ATENCIÓN!</strong> ¡Clonar del contenedor en ejecución puede llevar a inconsistencias de datos en los clones, (por ejemplo en entornos con bases de datos activas). Detenga el contenedor para una clonación segura, o continúe si está conforme con la seguridad de la operación!',
|
||||
|
||||
'edit_title'=>'Editar',
|
||||
'delete_title'=>'Eliminar',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Por favor, espere a la inicialización de la Máquina Virtual',
|
||||
'You can click here, or wait'=>'Puede hacer click aquí, o esperar',
|
||||
'some time'=>'algún tiempo',
|
||||
|
||||
'host_hostname'=>'Nombre de Dominio Completo de la Jaula (FQDN)',
|
||||
'ip4_addr'=>'todas las direcciones IPv4 y/o IPv6',
|
||||
'allow_mount'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros dentro de la jaula',
|
||||
'allow_nullfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros NULLFS dentro de la jaula',
|
||||
'allow_fdescfs'=>'La jaula puede montar el sistema de ficheros fdescfs',
|
||||
'interface'=>'Crear y eliminar automáticamente IP en NICs seleccionadas. 0 para deshabilitar',
|
||||
'baserw'=>'La jaula tiene una copia personal del sistema base con permisos de escritura, montar NULLFS no disponible',
|
||||
'mount_ports'=>'La jaula tiene /usr/ports /usr/ports/tree en sólo lectura',
|
||||
'astart'=>'Iniciar automáticamente la jaula al arranque',
|
||||
'vnet'=>'Habilitar virtual network stack (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Montar un sistema de ficheros FDESCFS usando chroot',
|
||||
'allow_tmpfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros TMPFS dentro de la jaula',
|
||||
'allow_zfs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros ZFS dentro de la jaula',
|
||||
'protected'=>'Prevenir modificación o eliminación de un entorno',
|
||||
'allow_reserved_ports'=>'Permitir al root de la jaula enlazar puertos menores a 1024',
|
||||
'allow_raw_sockets'=>'El root de la jaula puede crear raw sockets',
|
||||
'allow_fusefs'=>'Permitir a usuarios privilegiados montar y desmontar sistemas de ficheros basados en FUSE dentro de la jaula',
|
||||
'allow_read_msgbuf'=>'Permitir a un usuario no privilegiado leer el buffer de mensajes del kernel',
|
||||
'allow_vmm'=>'La jaula puede acceder a vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Procesos no privilegiados en la jaula pueden usar instalaciones de depuración',
|
||||
|
||||
//''=>'',
|
||||
);
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
clonos.lang={
|
||||
"Error": "Erreur",
|
||||
"No data, add something": "Pas de données, ajoutez quelque chose",
|
||||
"available on the jail is not running": "disponible quand le jail n'est pas en fonctionnement",
|
||||
"Log is empty": "Fichier journal vide",
|
||||
"Exported jails": "Jails exportées",
|
||||
"Download": "Téléchargement",
|
||||
"Jail is created": "Jail créée",
|
||||
"Jail already launched": "Jail déjà lancée",
|
||||
"Jail already stopped": "Jail déjà arrêtée",
|
||||
"Export not available on launched jail": "L'export n'est pas disponible sur une jail en fonctionnement",
|
||||
"This field cannot be left blank": "Ce champ ne peut pas être vide",
|
||||
"You need to select one or more jails for clone": "Sélectionnez une ou plusieurs jails à cloner",
|
||||
"You want to restart selected jail! Are you sure?":"Confirmez-vous le redémarrage de la jail sélectionnée ?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Confirmez-vous le redémarrage de la machine virtuelle sélectionnée ?",
|
||||
"You want to delete selected jail! Are you sure?":"Confirmez-vous l'effacement de la jail sélectionnée ?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Confirmez-vous l'effacement de la machine virtuelle sélectionnée ?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Confirmez-vous l'effacement de la clef d'authentification sélectionnée ?",
|
||||
|
||||
|
||||
"Not running":"Pas en fonctionnement",
|
||||
"Not Launched":"Pas lancé",
|
||||
"Launched":"Lancé",
|
||||
"Stopping":"Arrêt en cours",
|
||||
"Stopped":"Arrêtée",
|
||||
"Removing":"Effacement en cours",
|
||||
"Removed":"Effacée",
|
||||
"Creating":"Création en cours",
|
||||
"Created":"Créée",
|
||||
"Starting":"Démarrage en cours",
|
||||
"Exporting":"Export en cours",
|
||||
"Cloning":"Clonage en cous",
|
||||
"Cloned":"Clonée",
|
||||
"Restarting":"Redémarrage en cours",
|
||||
"Restarted":"Redémarrée",
|
||||
"Update":"Mettre à jour",
|
||||
"Updating":"Mise à jour en cours",
|
||||
"Updated":"Mise à jour",
|
||||
"Delete":"Effacement",
|
||||
"Save":"Sauvegarde",
|
||||
|
||||
"end":"fin",
|
||||
|
||||
"This name is already exists!":"Ce nom existe déjà !",
|
||||
"Passwords must match!":"Les mots de passe doivent être identiques !",
|
||||
|
||||
"@redirect_alert@":"Vous allez être redirigé vers la liste dans 3 secondes !",
|
||||
clonos.lang={
|
||||
"Error": "Erreur",
|
||||
"No data, add something": "Pas de données, ajoutez quelque chose",
|
||||
"available on the jail is not running": "disponible quand le jail n'est pas en fonctionnement",
|
||||
"Log is empty": "Fichier journal vide",
|
||||
"Exported jails": "Jails exportées",
|
||||
"Download": "Téléchargement",
|
||||
"Jail is created": "Jail créée",
|
||||
"Jail already launched": "Jail déjà lancée",
|
||||
"Jail already stopped": "Jail déjà arrêtée",
|
||||
"Export not available on launched jail": "L'export n'est pas disponible sur une jail en fonctionnement",
|
||||
"This field cannot be left blank": "Ce champ ne peut pas être vide",
|
||||
"You need to select one or more jails for clone": "Sélectionnez une ou plusieurs jails à cloner",
|
||||
"You want to restart selected jail! Are you sure?":"Confirmez-vous le redémarrage de la jail sélectionnée ?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Confirmez-vous le redémarrage de la machine virtuelle sélectionnée ?",
|
||||
"You want to delete selected jail! Are you sure?":"Confirmez-vous l'effacement de la jail sélectionnée ?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Confirmez-vous l'effacement de la machine virtuelle sélectionnée ?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Confirmez-vous l'effacement de la clef d'authentification sélectionnée ?",
|
||||
|
||||
|
||||
"Not running":"Pas en fonctionnement",
|
||||
"Not Launched":"Pas lancé",
|
||||
"Launched":"Lancé",
|
||||
"Stopping":"Arrêt en cours",
|
||||
"Stopped":"Arrêtée",
|
||||
"Removing":"Effacement en cours",
|
||||
"Removed":"Effacée",
|
||||
"Creating":"Création en cours",
|
||||
"Created":"Créée",
|
||||
"Starting":"Démarrage en cours",
|
||||
"Exporting":"Export en cours",
|
||||
"Cloning":"Clonage en cous",
|
||||
"Cloned":"Clonée",
|
||||
"Restarting":"Redémarrage en cours",
|
||||
"Restarted":"Redémarrée",
|
||||
"Update":"Mettre à jour",
|
||||
"Updating":"Mise à jour en cours",
|
||||
"Updated":"Mise à jour",
|
||||
"Delete":"Effacement",
|
||||
"Save":"Sauvegarde",
|
||||
|
||||
"end":"fin",
|
||||
|
||||
"This name is already exists!":"Ce nom existe déjà !",
|
||||
"Passwords must match!":"Les mots de passe doivent être identiques !",
|
||||
|
||||
"@redirect_alert@":"Vous allez être redirigé vers la liste dans 3 secondes !",
|
||||
}
|
||||
|
||||
@@ -1,159 +1,159 @@
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Paramètres',
|
||||
'Profile'=>'Profil',
|
||||
'Support'=>'Support',
|
||||
|
||||
'Overview'=>'Aperçu',
|
||||
'Summary Overview'=>'Aperçu simplifié',
|
||||
'Jails containers'=>'Conteneurs Jails',
|
||||
'Jails containers control panel'=>'Panneau de contrôle des conteneurs jails',
|
||||
'Template for jail'=>'Modèle pour les jails',
|
||||
'Helpers and wizard for containers'=>'Assistant pour les conteneurs',
|
||||
'Helpers of jails'=>'Assistant pour les jails',
|
||||
'Virtual machine control panel'=>'Panneau de contrôle pour les machines virtuelles',
|
||||
'Bhyve VMs'=>'Machines virtuelles Bhyve',
|
||||
'Virtual machine control panel'=>'Panneau de contrôle pour les machines virtuelles',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Panneau de contrôle pour les nodes',
|
||||
'VM Packages'=>'Paquetage pour les machines virtuelles',
|
||||
'Manage for virtual machine packages'=>'Gestionnaire des paquetages de machines virtuelles',
|
||||
'Virtual Private Network'=>'Réseau privé virtuel',
|
||||
'Manage for virtual private networks'=>'Gestionnaire des réseaux privés virtuels',
|
||||
'Authkeys'=>'Clefs authentification',
|
||||
'Manage for SSH auth key'=>'Gestionnaire des clefs SSH',
|
||||
'Storage Media'=>'Médias de stockage',
|
||||
'Virtual Media Manager'=>'Gestionnaire des médias virtuels',
|
||||
'Repository'=>'Dépôt',
|
||||
'Remote repository'=>'Dépôt distant',
|
||||
'FreeBSD Bases'=>'Bases FreeBSD',
|
||||
'FreeBSD bases manager'=>'Gestionnaire des bases FreeBSD',
|
||||
'FreeBSD Sources'=>'Sources FreeBSD',
|
||||
'FreeBSD sources manager'=>'Gestionnaire des sources FreeBSD',
|
||||
'Jail Marketplace'=>'Marketplace Jail',
|
||||
'Public remote containers marketplace'=>'Marketplace des conteneurs publics',
|
||||
'Bhyve Marketplace'=>'Marketplace Bhyve',
|
||||
'Public remote virtual machine marketplace'=>'Marketplace des machines virtuelles publiques',
|
||||
'TaskLog'=>'Journal des tâches',
|
||||
'System task log'=>'Journal des tâches systèmes',
|
||||
|
||||
'Not implemented yet'=>'Implémentation non terminée',
|
||||
|
||||
|
||||
'Not Launched'=>'Pas lancé',
|
||||
'Starting'=>'Démarrage en cours',
|
||||
'Launched'=>'Lancé',
|
||||
'Creating'=>'Création en cours',
|
||||
'Created'=>'Créé',
|
||||
'Stopping'=>'Arrêt en cours',
|
||||
'Stopped'=>'Arrêté',
|
||||
'Removing'=>'Effacement en cours',
|
||||
'Exporting'=>'Export en cours',
|
||||
'Cloning'=>'Clonage en cours',
|
||||
'Cloned'=>'Clôné',
|
||||
'Restarting'=>'Relance en cours',
|
||||
'Restarted'=>'Relancé',
|
||||
'Maintenance'=>'Maintenance',
|
||||
|
||||
'Create jail'=>'Créer une jail',
|
||||
'Edit jail'=>'Modifier une jail',
|
||||
'Jail Settings'=>'Paramètres de Jail',
|
||||
'Jail name'=>'Nom de la jail',
|
||||
'Hostname'=>'Nom du serveur',
|
||||
'available on the jail is not running'=>'Disponible quand la jail est arrêtée',
|
||||
'IP address'=>'Addresse IP',
|
||||
'Root password'=>'Mot de passe Root (optionel)',
|
||||
'Root password (again)'=>'Mot de passe Root (2eme entrée)',
|
||||
'Description'=>'Description',
|
||||
'Net Interface'=>'Interface réseau',
|
||||
'Parameters'=>'Paramètres',
|
||||
'Autostart'=>'Démarrage automatique',
|
||||
'Autostart jail at system startup'=>'Démarrage automatique la jail lors du démarrage système',
|
||||
'Base writable'=>'Base writable',
|
||||
'Virtual network stack (VIMAGE)'=>'Pile réseau virtuelle (VIMAGE)',
|
||||
'Mount'=>'Montage',
|
||||
'Enabled services'=>'Services actifs',
|
||||
'Create'=>'Créer',
|
||||
'Cancel'=>'Annuler',
|
||||
'Save'=>'Sauvegarder',
|
||||
|
||||
'Delete'=>'Effacer',
|
||||
'Protected jail'=>'Jail protégée',
|
||||
'Open VNC'=>'Ouvrir VNC',
|
||||
'Restart jail'=>'Redémarrer jail',
|
||||
'Restart bhyve'=>'Redémarrer bhyve',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Le nom ne peut pas être vide. Il doit commencer par une lettre / a-z / et ne peut pas contenir les symboles: -,.=%',
|
||||
'This field can not be empty'=>'Ce champ ne peut pas être vide',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Entrez une adresse IP correcte. Par ex. : 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Le mot de passe ne peut pas compter moins de 3 caractères',
|
||||
'Please retype password correctly'=>'Merci de ré-entrer un mot de passe correct',
|
||||
|
||||
'edit'=>'éditer',
|
||||
'clone'=>'cloner',
|
||||
'export'=>'exporter',
|
||||
'helpers'=> 'assistants',
|
||||
'rename'=>'renommer',
|
||||
|
||||
'default is'=>'le défaut est',
|
||||
|
||||
'Create Virtual Machine'=>'Créer des machines virtuelles',
|
||||
'Create Virtual Machine from Library'=>'Obtenir une machine virtuelle de la bibliothèque',
|
||||
'Virtual Machine Settings'=>'Paramètres de la machine virtuelle',
|
||||
'Virtual Machine name'=>'Nom de la machine virtuelle',
|
||||
'VM OS profile'=>'Profile OS de la machine virtuelle',
|
||||
'Authkey'=>'Clef authentification',
|
||||
'VM CPUs'=>'Coeur vCPU',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Taille image disque',
|
||||
'VNC PORT'=>'Port VNC ( 0 - automatique)',
|
||||
'VM Password'=>'Mot de passe Root',
|
||||
|
||||
'Create Authkey'=>'Créer clef authentification',
|
||||
'Authkey name'=>'Nom de la clef authentification',
|
||||
'Authkey'=>'Clef authentification',
|
||||
|
||||
'Open'=>'Ouvrir',
|
||||
'Close'=>'Fermer',
|
||||
'Get'=>'Obtenir',
|
||||
'Update'=>'Mettre à jour',
|
||||
|
||||
'Updating'=>'Mise à jour en cours',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Numéro de version (ex: 12.2, 13)',
|
||||
|
||||
'Source'=>'Source',
|
||||
|
||||
'@clone_warning@'=>'<strong>ATTENTION !</strong> Cloner un conteneur en fonctionnement peut entraîner une perte des données dnas les clones (ex. des environnements avec des bases de données actives). Arrêtez le conteneur pour éviter ces problèmes ou continuer si vous êtes certain de ne pas courir de risques !',
|
||||
|
||||
'edit_title'=>'Edition',
|
||||
'delete_title'=>'Effacement',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Merci de patienter - initialisation de la VM',
|
||||
'You can click here, or wait'=>'Cliquez ici ou patientez',
|
||||
'some time'=>'quelques instants',
|
||||
|
||||
'host_hostname'=>'FQDN de la Jail',
|
||||
'ip4_addr'=>'Adresse Jail IPv4 et/ou IPv6',
|
||||
'allow_mount'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers',
|
||||
'allow_nullfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers NULLFS',
|
||||
'allow_fdescfs'=>'La Jail peut monter le système de fichiers fdescfs',
|
||||
'interface'=>'Créer et enlever des IP sur les cartes réseaux automatiquement. 0 pour désactiver',
|
||||
'baserw'=>'La Jail a une copie du système de base avec accès en écriture, sans montage NULLFS',
|
||||
'mount_ports'=>'La Jail a /usr/ports /usr/ports en lecture seule',
|
||||
'astart'=>'Démarrage de la jail lors du démarrage système',
|
||||
'vnet'=>'Activer le stack réseau virtuel (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Monter un système de fichiers FDESCFS dans le chroot',
|
||||
'allow_tmpfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers TMPFS',
|
||||
'allow_zfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers ZFS',
|
||||
'protected'=>'Interdire modification ou effacement de cet environnement',
|
||||
'allow_reserved_ports'=>'Autoriser root à utiliser les ports inférieurs à 1024',
|
||||
'allow_raw_sockets'=>'Autoriser root à créer des raw sockets',
|
||||
'allow_fusefs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers fuse',
|
||||
'allow_read_msgbuf'=>'Autoriser un utilisateur sans privilèges à lire le tampon des messages du noyau',
|
||||
'allow_vmm'=>'La jail aura accès à vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Les processus sans privilèges peuvent utiliser les fonctions de debugging',
|
||||
|
||||
//''=>'',
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Paramètres',
|
||||
'Profile'=>'Profil',
|
||||
'Support'=>'Support',
|
||||
|
||||
'Overview'=>'Aperçu',
|
||||
'Summary Overview'=>'Aperçu simplifié',
|
||||
'Jails containers'=>'Conteneurs Jails',
|
||||
'Jails containers control panel'=>'Panneau de contrôle des conteneurs jails',
|
||||
'Template for jail'=>'Modèle pour les jails',
|
||||
'Helpers and wizard for containers'=>'Assistant pour les conteneurs',
|
||||
'Helpers of jails'=>'Assistant pour les jails',
|
||||
'Virtual machine control panel'=>'Panneau de contrôle pour les machines virtuelles',
|
||||
'Bhyve VMs'=>'Machines virtuelles Bhyve',
|
||||
'Virtual machine control panel'=>'Panneau de contrôle pour les machines virtuelles',
|
||||
'Nodes'=>'Nodes',
|
||||
'Nodes control panel'=>'Panneau de contrôle pour les nodes',
|
||||
'VM Packages'=>'Paquetage pour les machines virtuelles',
|
||||
'Manage for virtual machine packages'=>'Gestionnaire des paquetages de machines virtuelles',
|
||||
'Virtual Private Network'=>'Réseau privé virtuel',
|
||||
'Manage for virtual private networks'=>'Gestionnaire des réseaux privés virtuels',
|
||||
'Authkeys'=>'Clefs authentification',
|
||||
'Manage for SSH auth key'=>'Gestionnaire des clefs SSH',
|
||||
'Storage Media'=>'Médias de stockage',
|
||||
'Virtual Media Manager'=>'Gestionnaire des médias virtuels',
|
||||
'Repository'=>'Dépôt',
|
||||
'Remote repository'=>'Dépôt distant',
|
||||
'FreeBSD Bases'=>'Bases FreeBSD',
|
||||
'FreeBSD bases manager'=>'Gestionnaire des bases FreeBSD',
|
||||
'FreeBSD Sources'=>'Sources FreeBSD',
|
||||
'FreeBSD sources manager'=>'Gestionnaire des sources FreeBSD',
|
||||
'Jail Marketplace'=>'Marketplace Jail',
|
||||
'Public remote containers marketplace'=>'Marketplace des conteneurs publics',
|
||||
'Bhyve Marketplace'=>'Marketplace Bhyve',
|
||||
'Public remote virtual machine marketplace'=>'Marketplace des machines virtuelles publiques',
|
||||
'TaskLog'=>'Journal des tâches',
|
||||
'System task log'=>'Journal des tâches systèmes',
|
||||
|
||||
'Not implemented yet'=>'Implémentation non terminée',
|
||||
|
||||
|
||||
'Not Launched'=>'Pas lancé',
|
||||
'Starting'=>'Démarrage en cours',
|
||||
'Launched'=>'Lancé',
|
||||
'Creating'=>'Création en cours',
|
||||
'Created'=>'Créé',
|
||||
'Stopping'=>'Arrêt en cours',
|
||||
'Stopped'=>'Arrêté',
|
||||
'Removing'=>'Effacement en cours',
|
||||
'Exporting'=>'Export en cours',
|
||||
'Cloning'=>'Clonage en cours',
|
||||
'Cloned'=>'Clôné',
|
||||
'Restarting'=>'Relance en cours',
|
||||
'Restarted'=>'Relancé',
|
||||
'Maintenance'=>'Maintenance',
|
||||
|
||||
'Create jail'=>'Créer une jail',
|
||||
'Edit jail'=>'Modifier une jail',
|
||||
'Jail Settings'=>'Paramètres de Jail',
|
||||
'Jail name'=>'Nom de la jail',
|
||||
'Hostname'=>'Nom du serveur',
|
||||
'available on the jail is not running'=>'Disponible quand la jail est arrêtée',
|
||||
'IP address'=>'Addresse IP',
|
||||
'Root password'=>'Mot de passe Root (optionel)',
|
||||
'Root password (again)'=>'Mot de passe Root (2eme entrée)',
|
||||
'Description'=>'Description',
|
||||
'Net Interface'=>'Interface réseau',
|
||||
'Parameters'=>'Paramètres',
|
||||
'Autostart'=>'Démarrage automatique',
|
||||
'Autostart jail at system startup'=>'Démarrage automatique la jail lors du démarrage système',
|
||||
'Base writable'=>'Base writable',
|
||||
'Virtual network stack (VIMAGE)'=>'Pile réseau virtuelle (VIMAGE)',
|
||||
'Mount'=>'Montage',
|
||||
'Enabled services'=>'Services actifs',
|
||||
'Create'=>'Créer',
|
||||
'Cancel'=>'Annuler',
|
||||
'Save'=>'Sauvegarder',
|
||||
|
||||
'Delete'=>'Effacer',
|
||||
'Protected jail'=>'Jail protégée',
|
||||
'Open VNC'=>'Ouvrir VNC',
|
||||
'Restart jail'=>'Redémarrer jail',
|
||||
'Restart bhyve'=>'Redémarrer bhyve',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Le nom ne peut pas être vide. Il doit commencer par une lettre / a-z / et ne peut pas contenir les symboles: -,.=%',
|
||||
'This field can not be empty'=>'Ce champ ne peut pas être vide',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Entrez une adresse IP correcte. Par ex. : 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Le mot de passe ne peut pas compter moins de 3 caractères',
|
||||
'Please retype password correctly'=>'Merci de ré-entrer un mot de passe correct',
|
||||
|
||||
'edit'=>'éditer',
|
||||
'clone'=>'cloner',
|
||||
'export'=>'exporter',
|
||||
'helpers'=> 'assistants',
|
||||
'rename'=>'renommer',
|
||||
|
||||
'default is'=>'le défaut est',
|
||||
|
||||
'Create Virtual Machine'=>'Créer des machines virtuelles',
|
||||
'Create Virtual Machine from Library'=>'Obtenir une machine virtuelle de la bibliothèque',
|
||||
'Virtual Machine Settings'=>'Paramètres de la machine virtuelle',
|
||||
'Virtual Machine name'=>'Nom de la machine virtuelle',
|
||||
'VM OS profile'=>'Profile OS de la machine virtuelle',
|
||||
'Authkey'=>'Clef authentification',
|
||||
'VM CPUs'=>'Coeur vCPU',
|
||||
'VM RAM'=>'RAM',
|
||||
'VM Image size'=>'Taille image disque',
|
||||
'VNC PORT'=>'Port VNC ( 0 - automatique)',
|
||||
'VM Password'=>'Mot de passe Root',
|
||||
|
||||
'Create Authkey'=>'Créer clef authentification',
|
||||
'Authkey name'=>'Nom de la clef authentification',
|
||||
'Authkey'=>'Clef authentification',
|
||||
|
||||
'Open'=>'Ouvrir',
|
||||
'Close'=>'Fermer',
|
||||
'Get'=>'Obtenir',
|
||||
'Update'=>'Mettre à jour',
|
||||
|
||||
'Updating'=>'Mise à jour en cours',
|
||||
'Version'=>'Version',
|
||||
'Version number'=>'Numéro de version (ex: 12.2, 13)',
|
||||
|
||||
'Source'=>'Source',
|
||||
|
||||
'@clone_warning@'=>'<strong>ATTENTION !</strong> Cloner un conteneur en fonctionnement peut entraîner une perte des données dnas les clones (ex. des environnements avec des bases de données actives). Arrêtez le conteneur pour éviter ces problèmes ou continuer si vous êtes certain de ne pas courir de risques !',
|
||||
|
||||
'edit_title'=>'Edition',
|
||||
'delete_title'=>'Effacement',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Merci de patienter - initialisation de la VM',
|
||||
'You can click here, or wait'=>'Cliquez ici ou patientez',
|
||||
'some time'=>'quelques instants',
|
||||
|
||||
'host_hostname'=>'FQDN de la Jail',
|
||||
'ip4_addr'=>'Adresse Jail IPv4 et/ou IPv6',
|
||||
'allow_mount'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers',
|
||||
'allow_nullfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers NULLFS',
|
||||
'allow_fdescfs'=>'La Jail peut monter le système de fichiers fdescfs',
|
||||
'interface'=>'Créer et enlever des IP sur les cartes réseaux automatiquement. 0 pour désactiver',
|
||||
'baserw'=>'La Jail a une copie du système de base avec accès en écriture, sans montage NULLFS',
|
||||
'mount_ports'=>'La Jail a /usr/ports /usr/ports en lecture seule',
|
||||
'astart'=>'Démarrage de la jail lors du démarrage système',
|
||||
'vnet'=>'Activer le stack réseau virtuel (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'Monter un système de fichiers FDESCFS dans le chroot',
|
||||
'allow_tmpfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers TMPFS',
|
||||
'allow_zfs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers ZFS',
|
||||
'protected'=>'Interdire modification ou effacement de cet environnement',
|
||||
'allow_reserved_ports'=>'Autoriser root à utiliser les ports inférieurs à 1024',
|
||||
'allow_raw_sockets'=>'Autoriser root à créer des raw sockets',
|
||||
'allow_fusefs'=>'Autoriser les utilisateurs privilégiés de la jail à monter/démonter des systèmes de fichiers fuse',
|
||||
'allow_read_msgbuf'=>'Autoriser un utilisateur sans privilèges à lire le tampon des messages du noyau',
|
||||
'allow_vmm'=>'La jail aura accès à vmm(4)',
|
||||
'allow_unprivileged_proc_debug'=>'Les processus sans privilèges peuvent utiliser les fonctions de debugging',
|
||||
|
||||
//''=>'',
|
||||
);
|
||||
|
||||
@@ -1,76 +1,76 @@
|
||||
clonos.lang={
|
||||
"Error": "Ошибка",
|
||||
"No data, add something": "Нет данных, добавьте что-нибудь",
|
||||
"available on the jail is not running": "доступно при остановленной клетке",
|
||||
"Log is empty": "Лог пуст",
|
||||
"Exported jails": "Экспортированные клетки",
|
||||
"Download": "Скачать",
|
||||
"Jail is created": "Клетка создана",
|
||||
"Jail already launched": "Клетка уже запущена",
|
||||
"Jail already stopped": "Клетка уже остановлена",
|
||||
"Export not available on launched jail": "Экспорт невозможен на запущенной клетке",
|
||||
"This field cannot be left blank": "Это поле должно быть заполнено",
|
||||
"You need to select one or more jails for clone": "Вам необходимо выбрать одну или несколько клеток для клонирования",
|
||||
"You want to restart selected jail! Are you sure?":"Вы уверены, что хотите перезапустить выбранную клетку?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Вы уверены, что хотите перезапустить выбранную виртуальную машину?",
|
||||
"You want to delete selected jail! Are you sure?":"Вы уверены, что хотите удалить выбранную клетку?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Вы уверены, что хотите удалить выбранную виртуальную машину?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Вы уверены, что хотите удалить выбранный ключ авторизации?",
|
||||
|
||||
|
||||
"Not running":"Не запущено",
|
||||
"Not Launched":"Не запущено",
|
||||
"Launched":"Запущено",
|
||||
"Stopping":"Останавливается",
|
||||
"Stopped":"Остановлено",
|
||||
"Removing":"Удаляется",
|
||||
"Removed":"Удалено",
|
||||
"Creating":"Создаётся",
|
||||
"Created":"Создано",
|
||||
"Starting":"Запускается",
|
||||
"Exporting":"Экспортируется",
|
||||
"Exported":"Экспортировано",
|
||||
"Cloning":"Клонируется",
|
||||
"Cloned":"Клонировано",
|
||||
"Restarting":"Перезапускаем",
|
||||
"Restarted":"Перезапущено",
|
||||
"Update":"Обновить",
|
||||
"Updating":"Обновляется",
|
||||
"Updated":"Обновлено",
|
||||
"Delete":"Удалить",
|
||||
"Save":"Сохранить",
|
||||
"Rename":"Переименовать",
|
||||
"Renaming":"Переименовываем",
|
||||
"Renamed":"Переименовано",
|
||||
"Fetch":"Получить",
|
||||
"Fetching":"Получаем",
|
||||
"Fetched":"Получено",
|
||||
"Compile":"Собрать",
|
||||
"Compiling":"Собираем",
|
||||
"Compiled":"Собрано",
|
||||
|
||||
//"Create jail":"Создание контейнера",
|
||||
//"Edit jail":"Редактирование параметров контейнера",
|
||||
|
||||
"end":"конец",
|
||||
|
||||
"jail":"клетка",
|
||||
"bhyve":"виртуальная машина",
|
||||
|
||||
"This name is already exists!":"Такое имя уже существует!",
|
||||
"Passwords must match!":"Пароли должны совпадать!",
|
||||
|
||||
"@redirect_alert@":"Вы будете перенаправлены на список контейнеров через 3 секунды!",
|
||||
|
||||
"description":"описание",
|
||||
"properties":"параметры",
|
||||
|
||||
"starting...":"Запуск обновления...",
|
||||
"update phase 1/5..":"Фаза обновления: 1/5..",
|
||||
"update phase 2/5..":"Фаза обновления: 2/5..",
|
||||
"update phase 3/5..":"Фаза обновления: 3/5..",
|
||||
"update phase 4/5..":"Фаза обновления: 4/5..",
|
||||
"update phase 5/5..":"Фаза обновления: 5/5..",
|
||||
"complete":"Обновление завершено",
|
||||
clonos.lang={
|
||||
"Error": "Ошибка",
|
||||
"No data, add something": "Нет данных, добавьте что-нибудь",
|
||||
"available on the jail is not running": "доступно при остановленной клетке",
|
||||
"Log is empty": "Лог пуст",
|
||||
"Exported jails": "Экспортированные клетки",
|
||||
"Download": "Скачать",
|
||||
"Jail is created": "Клетка создана",
|
||||
"Jail already launched": "Клетка уже запущена",
|
||||
"Jail already stopped": "Клетка уже остановлена",
|
||||
"Export not available on launched jail": "Экспорт невозможен на запущенной клетке",
|
||||
"This field cannot be left blank": "Это поле должно быть заполнено",
|
||||
"You need to select one or more jails for clone": "Вам необходимо выбрать одну или несколько клеток для клонирования",
|
||||
"You want to restart selected jail! Are you sure?":"Вы уверены, что хотите перезапустить выбранную клетку?",
|
||||
"You want to restart selected virtual machine! Are you sure?":"Вы уверены, что хотите перезапустить выбранную виртуальную машину?",
|
||||
"You want to delete selected jail! Are you sure?":"Вы уверены, что хотите удалить выбранную клетку?",
|
||||
"You want to delete selected virtual machine! Are you sure?":"Вы уверены, что хотите удалить выбранную виртуальную машину?",
|
||||
|
||||
"You want to delete selected authkey! Are you sure?":"Вы уверены, что хотите удалить выбранный ключ авторизации?",
|
||||
|
||||
|
||||
"Not running":"Не запущено",
|
||||
"Not Launched":"Не запущено",
|
||||
"Launched":"Запущено",
|
||||
"Stopping":"Останавливается",
|
||||
"Stopped":"Остановлено",
|
||||
"Removing":"Удаляется",
|
||||
"Removed":"Удалено",
|
||||
"Creating":"Создаётся",
|
||||
"Created":"Создано",
|
||||
"Starting":"Запускается",
|
||||
"Exporting":"Экспортируется",
|
||||
"Exported":"Экспортировано",
|
||||
"Cloning":"Клонируется",
|
||||
"Cloned":"Клонировано",
|
||||
"Restarting":"Перезапускаем",
|
||||
"Restarted":"Перезапущено",
|
||||
"Update":"Обновить",
|
||||
"Updating":"Обновляется",
|
||||
"Updated":"Обновлено",
|
||||
"Delete":"Удалить",
|
||||
"Save":"Сохранить",
|
||||
"Rename":"Переименовать",
|
||||
"Renaming":"Переименовываем",
|
||||
"Renamed":"Переименовано",
|
||||
"Fetch":"Получить",
|
||||
"Fetching":"Получаем",
|
||||
"Fetched":"Получено",
|
||||
"Compile":"Собрать",
|
||||
"Compiling":"Собираем",
|
||||
"Compiled":"Собрано",
|
||||
|
||||
//"Create jail":"Создание контейнера",
|
||||
//"Edit jail":"Редактирование параметров контейнера",
|
||||
|
||||
"end":"конец",
|
||||
|
||||
"jail":"клетка",
|
||||
"bhyve":"виртуальная машина",
|
||||
|
||||
"This name is already exists!":"Такое имя уже существует!",
|
||||
"Passwords must match!":"Пароли должны совпадать!",
|
||||
|
||||
"@redirect_alert@":"Вы будете перенаправлены на список контейнеров через 3 секунды!",
|
||||
|
||||
"description":"описание",
|
||||
"properties":"параметры",
|
||||
|
||||
"starting...":"Запуск обновления...",
|
||||
"update phase 1/5..":"Фаза обновления: 1/5..",
|
||||
"update phase 2/5..":"Фаза обновления: 2/5..",
|
||||
"update phase 3/5..":"Фаза обновления: 3/5..",
|
||||
"update phase 4/5..":"Фаза обновления: 4/5..",
|
||||
"update phase 5/5..":"Фаза обновления: 5/5..",
|
||||
"complete":"Обновление завершено",
|
||||
}
|
||||
@@ -1,201 +1,201 @@
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Настройки',
|
||||
'Profile'=>'Профиль',
|
||||
'Support'=>'Поддержка',
|
||||
<?php
|
||||
$lang=array(
|
||||
'Settings'=>'Настройки',
|
||||
'Profile'=>'Профиль',
|
||||
'Support'=>'Поддержка',
|
||||
|
||||
'Overview'=>'Общая информация',
|
||||
'Overview'=>'Общая информация',
|
||||
'Summary Overview'=>'Общая информация',
|
||||
'Jails containers'=>'Контейнеры',
|
||||
'Jails containers control panel'=>'Панель управления контейнерами',
|
||||
'Template for jail'=>'Шаблоны окружений',
|
||||
'Helpers and wizard for containers'=>'Хелперы и шаблоны для контейнеров',
|
||||
'Helpers of jails'=>'Хелперы контейнера',
|
||||
'Virtual machine control panel'=>'Панель управления виртуальными машинами',
|
||||
'Bhyve VMs'=>'Виртуальные машины',
|
||||
'Virtual machine control panel'=>'Панель управления нодами',
|
||||
'Nodes'=>'Сервера',
|
||||
'Nodes control panel'=>'Панель управления нодами',
|
||||
'VM Packages'=>'Шаблоны виртуальных машин',
|
||||
'Manage for virtual machine packages'=>'Управление профилями виртуальных машин',
|
||||
'K8S clusters'=>'Кластеры K8S',
|
||||
'Manage K8S clusters'=>'Управление K8S кластерами',
|
||||
'Virtual Private Network'=>'Виртуальные сети',
|
||||
'Manage for virtual private networks'=>'Панель управления подсетями',
|
||||
'Authkeys'=>'Ключи авторизации',
|
||||
'Manage for SSH auth key'=>'Панель управления авторизационными ключами',
|
||||
'Storage Media'=>'Виртуальные носители',
|
||||
'Virtual Media Manager'=>'Менеджер виртуальных носителей',
|
||||
'Imported images'=>'Импортированные образы',
|
||||
'Repository'=>'Репозиторий',
|
||||
'Remote repository'=>'Публичный репозиторий',
|
||||
'FreeBSD Bases'=>'Базы FreeBSD',
|
||||
'FreeBSD bases manager'=>'Управление базами FreeBSD',
|
||||
'FreeBSD Sources'=>'FreeBSD исходники',
|
||||
'FreeBSD sources manager'=>'Управление исходными кодами FreeBSD',
|
||||
'Jail Marketplace'=>'Преднастроенные контейнеры',
|
||||
'Public remote containers marketplace'=>'Репозиторий преднастроенных контейнеров',
|
||||
'Bhyve Marketplace'=>'Преднастроенные виртуальные машины',
|
||||
'Public remote virtual machine marketplace'=>'Репозиторий преднастроенных виртуальных машин',
|
||||
'TaskLog'=>'Логи задач',
|
||||
'System task log'=>'Просмотр журнала системных задач',
|
||||
|
||||
'Not implemented yet'=>'Раздел в разработке',
|
||||
|
||||
'Description'=>'Описание',
|
||||
|
||||
'Not Launched'=>'не запущено',
|
||||
'Starting'=>'запускается',
|
||||
'Launched'=>'запущено',
|
||||
'Creating'=>'создаётся',
|
||||
'Created'=>'создано',
|
||||
'Stopping'=>'останавливается',
|
||||
'Stopped'=>'остановлено',
|
||||
'Removing'=>'удаляется',
|
||||
'Exporting'=>'экспортируется',
|
||||
'Cloning'=>'клонируется',
|
||||
'Cloned'=>'клонировано',
|
||||
'Restarting'=>'перезапускаем',
|
||||
'Restarted'=>'перезапущено',
|
||||
'Maintenance'=>'на обслуживании',
|
||||
|
||||
'Add helper'=>'добавить хелпер',
|
||||
'Create jail'=>'создание контейнера',
|
||||
'Edit jail'=>'редактирование параметров контейнера',
|
||||
'Jail Settings'=>'настройки контейнера',
|
||||
'Jail name'=>'имя контейнера',
|
||||
'Hostname'=>'имя хоста',
|
||||
'available on the jail is not running'=>'доступно при остановленном контейнере',
|
||||
'IP address'=>'IP-адрес',
|
||||
'Jails containers'=>'Контейнеры',
|
||||
'Jails containers control panel'=>'Панель управления контейнерами',
|
||||
'Template for jail'=>'Шаблоны окружений',
|
||||
'Helpers and wizard for containers'=>'Хелперы и шаблоны для контейнеров',
|
||||
'Helpers of jails'=>'Хелперы контейнера',
|
||||
'Virtual machine control panel'=>'Панель управления виртуальными машинами',
|
||||
'Bhyve VMs'=>'Виртуальные машины',
|
||||
'Virtual machine control panel'=>'Панель управления нодами',
|
||||
'Nodes'=>'Сервера',
|
||||
'Nodes control panel'=>'Панель управления нодами',
|
||||
'VM Packages'=>'Шаблоны виртуальных машин',
|
||||
'Manage for virtual machine packages'=>'Управление профилями виртуальных машин',
|
||||
'K8S clusters'=>'Кластеры K8S',
|
||||
'Manage K8S clusters'=>'Управление K8S кластерами',
|
||||
'Virtual Private Network'=>'Виртуальные сети',
|
||||
'Manage for virtual private networks'=>'Панель управления подсетями',
|
||||
'Authkeys'=>'Ключи авторизации',
|
||||
'Manage for SSH auth key'=>'Панель управления авторизационными ключами',
|
||||
'Storage Media'=>'Виртуальные носители',
|
||||
'Virtual Media Manager'=>'Менеджер виртуальных носителей',
|
||||
'Imported images'=>'Импортированные образы',
|
||||
'Repository'=>'Репозиторий',
|
||||
'Remote repository'=>'Публичный репозиторий',
|
||||
'FreeBSD Bases'=>'Базы FreeBSD',
|
||||
'FreeBSD bases manager'=>'Управление базами FreeBSD',
|
||||
'FreeBSD Sources'=>'FreeBSD исходники',
|
||||
'FreeBSD sources manager'=>'Управление исходными кодами FreeBSD',
|
||||
'Jail Marketplace'=>'Преднастроенные контейнеры',
|
||||
'Public remote containers marketplace'=>'Репозиторий преднастроенных контейнеров',
|
||||
'Bhyve Marketplace'=>'Преднастроенные виртуальные машины',
|
||||
'Public remote virtual machine marketplace'=>'Репозиторий преднастроенных виртуальных машин',
|
||||
'TaskLog'=>'Логи задач',
|
||||
'System task log'=>'Просмотр журнала системных задач',
|
||||
|
||||
'Not implemented yet'=>'Раздел в разработке',
|
||||
|
||||
'Description'=>'Описание',
|
||||
|
||||
'Not Launched'=>'не запущено',
|
||||
'Starting'=>'запускается',
|
||||
'Launched'=>'запущено',
|
||||
'Creating'=>'создаётся',
|
||||
'Created'=>'создано',
|
||||
'Stopping'=>'останавливается',
|
||||
'Stopped'=>'остановлено',
|
||||
'Removing'=>'удаляется',
|
||||
'Exporting'=>'экспортируется',
|
||||
'Cloning'=>'клонируется',
|
||||
'Cloned'=>'клонировано',
|
||||
'Restarting'=>'перезапускаем',
|
||||
'Restarted'=>'перезапущено',
|
||||
'Maintenance'=>'на обслуживании',
|
||||
|
||||
'Add helper'=>'добавить хелпер',
|
||||
'Create jail'=>'создание контейнера',
|
||||
'Edit jail'=>'редактирование параметров контейнера',
|
||||
'Jail Settings'=>'настройки контейнера',
|
||||
'Jail name'=>'имя контейнера',
|
||||
'Hostname'=>'имя хоста',
|
||||
'available on the jail is not running'=>'доступно при остановленном контейнере',
|
||||
'IP address'=>'IP-адрес',
|
||||
'Root password'=>'пароль пользователя ROOT (опционально)',
|
||||
'Root password (again)'=>'пароль пользователя ROOT (повтор)',
|
||||
'Description'=>'описание',
|
||||
'Net Interface'=>'привязать к сетевому интерфейсу',
|
||||
'Parameters'=>'параметры',
|
||||
'Autostart'=>'автозапуск',
|
||||
'Autostart jail at system startup'=>'автозапуск контейнера при загрузке системы',
|
||||
'Base writable'=>'R/W базовой системы',
|
||||
'Description'=>'описание',
|
||||
'Net Interface'=>'привязать к сетевому интерфейсу',
|
||||
'Parameters'=>'параметры',
|
||||
'Autostart'=>'автозапуск',
|
||||
'Autostart jail at system startup'=>'автозапуск контейнера при загрузке системы',
|
||||
'Base writable'=>'R/W базовой системы',
|
||||
'Virtual network stack (VIMAGE)'=>'виртуальный сетевой стек (VIMAGE)',
|
||||
'Mount'=>'примонтировать',
|
||||
'Enabled services'=>'автозапуск сервисов',
|
||||
'Create'=>'Создать',
|
||||
'Cancel'=>'Отменить',
|
||||
'Save'=>'Сохранить',
|
||||
'Download'=>'Скачать',
|
||||
|
||||
'Delete'=>'Удалить',
|
||||
'Protected jail'=>'запрет на удаление',
|
||||
'Protected bhyve'=>'запрет на удаление',
|
||||
'Open VNC'=>'консоль управления',
|
||||
'Restart jail'=>'перезапустить контейнер',
|
||||
'Restart bhyve'=>'перезапустить виртуальную машину',
|
||||
|
||||
|
||||
'Helpers list for jail'=>'список хелперов в контейнере',
|
||||
'Mount'=>'примонтировать',
|
||||
'Enabled services'=>'автозапуск сервисов',
|
||||
'Create'=>'Создать',
|
||||
'Cancel'=>'Отменить',
|
||||
'Save'=>'Сохранить',
|
||||
'Download'=>'Скачать',
|
||||
|
||||
'Delete'=>'Удалить',
|
||||
'Protected jail'=>'запрет на удаление',
|
||||
'Protected bhyve'=>'запрет на удаление',
|
||||
'Open VNC'=>'консоль управления',
|
||||
'Restart jail'=>'перезапустить контейнер',
|
||||
'Restart bhyve'=>'перезапустить виртуальную машину',
|
||||
|
||||
|
||||
'Helpers list for jail'=>'список хелперов в контейнере',
|
||||
|
||||
//err_messages
|
||||
'Can not be empty. Name must begin with a letter / a-z / and not have any special symbols: -,.=%'=>'Не может быть пустым. Имя должно начинаться и содержать латинские буквы / a-z / и не должно иметь спец. символы: -,.=% и тд.',
|
||||
'This field can not be empty'=>'Это поле не может быть пустым',
|
||||
'Write correct ip address, e.g: 10.0.0.2'=>'Укажите корректный IP адрес, например: 10.0.0.2',
|
||||
'Password can not be less than 3 symbols'=>'Пароль не должен быть меньше трех символов',
|
||||
'Please retype password correctly'=>'Повторите пароль правильно',
|
||||
'Please retype password correctly'=>'Повторите пароль правильно',
|
||||
'will be created new jail with helper inside'=>'будет создан новый контейнер с настроенным модулем',
|
||||
|
||||
'edit'=>'редактировать',
|
||||
'clone'=>'клонировать',
|
||||
'export'=>'экспортировать',
|
||||
'helpers'=>'хелперы',
|
||||
'rename'=>'переименовать',
|
||||
|
||||
'default is'=>'по-умолчанию',
|
||||
|
||||
'Create Virtual Machine'=>'Создание виртуальной машины',
|
||||
'Create Virtual Machine from Library'=>'Создание из библиотеки',
|
||||
'Virtual Machine Settings'=>'Настройки',
|
||||
'Virtual Machine name'=>'Имя виртуальной машины',
|
||||
'VM OS profile'=>'Профиль операционной системы',
|
||||
'Authkey'=>'SSH Ключ',
|
||||
'VM CPUs'=>'Количество виртуальных ядер',
|
||||
'VM RAM'=>'Объём памяти',
|
||||
'VM Image size'=>'Объём виртуального диска',
|
||||
'VNC PORT'=>'Порт для подключения VNC клиента (0 - авто)',
|
||||
'VM Password'=>'Пароль администратора',
|
||||
|
||||
'Create Authkey'=>'Создание ключа авторизации',
|
||||
'Authkey name'=>'Имя ключа',
|
||||
'Authkey'=>'SSH ключ',
|
||||
|
||||
'Helpers add'=>'Добавление хелперов',
|
||||
'Select helpers for install'=>'Выберите хелперы для установки',
|
||||
|
||||
'Open'=>'Открыть',
|
||||
'Close'=>'Закрыть',
|
||||
'Get'=>'Получить',
|
||||
'Update'=>'Обновить',
|
||||
'Add'=>'Добавить',
|
||||
|
||||
'Updating'=>'Обновляется',
|
||||
'Version'=>'Версия',
|
||||
'Version number'=>'Номер версии (например: 12.2, 13)',
|
||||
|
||||
'Source'=>'Источник',
|
||||
|
||||
'@clone_warning@'=>'<strong>ВНИМАНИЕ!</strong> Клонирование запущенного контейнера может привести к неконсистентным данным клона (например окружение с активной базой данных). Остановите контейнер для безопасного клонирования или продолжайте, если уверены в безопасности операции!',
|
||||
'@rename_warning@'=>'<strong>ВНИМАНИЕ!</strong> Контейнер запущен. Переименование работает только при выключенном окружении, поэтому данный контейнер предварительно будет остановлен!',
|
||||
|
||||
'No installed helpers'=>'Нет установленных хелперов',
|
||||
|
||||
'edit_title'=>'Редактировать',
|
||||
'delete_title'=>'Удалить',
|
||||
|
||||
'Users'=>'Пользователи',
|
||||
'CBSD Users'=>'Учётные записи пользователей CBSD',
|
||||
|
||||
|
||||
'jail'=>'контейнер',
|
||||
'bhyve'=>'bhyve',
|
||||
|
||||
'Since imported name already exist, we are change it'=>'Поскольку оригинальное имя уже существует, мы поменяли его <br />на свободное',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Пожалуйста, подождите пока инициализируется виртуальная машина',
|
||||
'You can click here, or wait'=>'Вы можете кликнуть сюда или подождать',
|
||||
'some time'=>'некоторое время',
|
||||
|
||||
'CPU usage'=>'Нагрузка процессора',
|
||||
'Memory usage'=>'Использование памяти',
|
||||
|
||||
|
||||
'THEMES'=>'ТЕМЫ',
|
||||
'VERSION'=>'ВЕРСИЯ',
|
||||
|
||||
'host_hostname'=>'Имя хоста (FQDN)',
|
||||
'ip4_addr'=>'IP-адрес',
|
||||
'allow_mount'=>'разрешить привилегированным пользователям монтировать другие файловые системы',
|
||||
'allow_nullfs'=>'разрешить привилегированным пользователям использовать NULLFS',
|
||||
'allow_fdescfs'=>'разрешить использование fdescfs',
|
||||
'interface'=>'автоматическая привязка к сетевому интерфейсу',
|
||||
'baserw'=>'чтение/запись базовой системы',
|
||||
'mount_ports'=>'монтирование /usr/ports в режиме «только чтение»',
|
||||
'astart'=>'автоматический запуск клетки при старте системы',
|
||||
'vnet'=>'включить виртуальный сетевой стек (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'подключить файловую систему fdescfs',
|
||||
'allow_tmpfs'=>'разрешить привилегированным пользователям использовать TMPFS',
|
||||
'allow_zfs'=>'разрешить привилегированным пользователям использовать ZFS',
|
||||
'protected'=>'запрет редактирования или удаления окружения',
|
||||
'allow_reserved_ports'=>'разрешить root пользователю открывать порты на прослушивание ниже 1024',
|
||||
'allow_raw_sockets'=>'разрешить использование raw сокетов (ping, traceroute)',
|
||||
'allow_fusefs'=>'разрешить привилегированным пользователям использовать FUSE файловые системы',
|
||||
'allow_read_msgbuf'=>'разрешить непривилегированным пользователям читать буфер сообщений ядра',
|
||||
'allow_vmm'=>'разрешить доступ к vmm(4) для создания виртуальных машин внутри контейнера',
|
||||
'allow_unprivileged_proc_debug'=>'непривилегированные процессы могут использовать средства отладки (dtrace,truss,strace)',
|
||||
|
||||
'yes'=>'да',
|
||||
'no'=>'нет',
|
||||
'on'=>'вкл',
|
||||
'off'=>'выкл',
|
||||
'auto'=>'авто',
|
||||
|
||||
'edit'=>'редактировать',
|
||||
'clone'=>'клонировать',
|
||||
'export'=>'экспортировать',
|
||||
'helpers'=>'хелперы',
|
||||
'rename'=>'переименовать',
|
||||
|
||||
'default is'=>'по-умолчанию',
|
||||
|
||||
'Create Virtual Machine'=>'Создание виртуальной машины',
|
||||
'Create Virtual Machine from Library'=>'Создание из библиотеки',
|
||||
'Virtual Machine Settings'=>'Настройки',
|
||||
'Virtual Machine name'=>'Имя виртуальной машины',
|
||||
'VM OS profile'=>'Профиль операционной системы',
|
||||
'Authkey'=>'SSH Ключ',
|
||||
'VM CPUs'=>'Количество виртуальных ядер',
|
||||
'VM RAM'=>'Объём памяти',
|
||||
'VM Image size'=>'Объём виртуального диска',
|
||||
'VNC PORT'=>'Порт для подключения VNC клиента (0 - авто)',
|
||||
'VM Password'=>'Пароль администратора',
|
||||
|
||||
'Create Authkey'=>'Создание ключа авторизации',
|
||||
'Authkey name'=>'Имя ключа',
|
||||
'Authkey'=>'SSH ключ',
|
||||
|
||||
'Helpers add'=>'Добавление хелперов',
|
||||
'Select helpers for install'=>'Выберите хелперы для установки',
|
||||
|
||||
'Open'=>'Открыть',
|
||||
'Close'=>'Закрыть',
|
||||
'Get'=>'Получить',
|
||||
'Update'=>'Обновить',
|
||||
'Add'=>'Добавить',
|
||||
|
||||
'Updating'=>'Обновляется',
|
||||
'Version'=>'Версия',
|
||||
'Version number'=>'Номер версии (например: 12.2, 13)',
|
||||
|
||||
'Source'=>'Источник',
|
||||
|
||||
'@clone_warning@'=>'<strong>ВНИМАНИЕ!</strong> Клонирование запущенного контейнера может привести к неконсистентным данным клона (например окружение с активной базой данных). Остановите контейнер для безопасного клонирования или продолжайте, если уверены в безопасности операции!',
|
||||
'@rename_warning@'=>'<strong>ВНИМАНИЕ!</strong> Контейнер запущен. Переименование работает только при выключенном окружении, поэтому данный контейнер предварительно будет остановлен!',
|
||||
|
||||
'jailed'=>'может запускать bhyve',
|
||||
'No installed helpers'=>'Нет установленных хелперов',
|
||||
|
||||
'edit_title'=>'Редактировать',
|
||||
'delete_title'=>'Удалить',
|
||||
|
||||
'Users'=>'Пользователи',
|
||||
'CBSD Users'=>'Учётные записи пользователей CBSD',
|
||||
|
||||
|
||||
'jail'=>'контейнер',
|
||||
'bhyve'=>'bhyve',
|
||||
|
||||
'Since imported name already exist, we are change it'=>'Поскольку оригинальное имя уже существует, мы поменяли его <br />на свободное',
|
||||
|
||||
'Please, wait for initialize Virtual Machine'=>'Пожалуйста, подождите пока инициализируется виртуальная машина',
|
||||
'You can click here, or wait'=>'Вы можете кликнуть сюда или подождать',
|
||||
'some time'=>'некоторое время',
|
||||
|
||||
'CPU usage'=>'Нагрузка процессора',
|
||||
'Memory usage'=>'Использование памяти',
|
||||
|
||||
|
||||
'THEMES'=>'ТЕМЫ',
|
||||
'VERSION'=>'ВЕРСИЯ',
|
||||
|
||||
'host_hostname'=>'Имя хоста (FQDN)',
|
||||
'ip4_addr'=>'IP-адрес',
|
||||
'allow_mount'=>'разрешить привилегированным пользователям монтировать другие файловые системы',
|
||||
'allow_nullfs'=>'разрешить привилегированным пользователям использовать NULLFS',
|
||||
'allow_fdescfs'=>'разрешить использование fdescfs',
|
||||
'interface'=>'автоматическая привязка к сетевому интерфейсу',
|
||||
'baserw'=>'чтение/запись базовой системы',
|
||||
'mount_ports'=>'монтирование /usr/ports в режиме «только чтение»',
|
||||
'astart'=>'автоматический запуск клетки при старте системы',
|
||||
'vnet'=>'включить виртуальный сетевой стек (VNET/VIMAGE)',
|
||||
'mount_fdescfs'=>'подключить файловую систему fdescfs',
|
||||
'allow_tmpfs'=>'разрешить привилегированным пользователям использовать TMPFS',
|
||||
'allow_zfs'=>'разрешить привилегированным пользователям использовать ZFS',
|
||||
'protected'=>'запрет редактирования или удаления окружения',
|
||||
'allow_reserved_ports'=>'разрешить root пользователю открывать порты на прослушивание ниже 1024',
|
||||
'allow_raw_sockets'=>'разрешить использование raw сокетов (ping, traceroute)',
|
||||
'allow_fusefs'=>'разрешить привилегированным пользователям использовать FUSE файловые системы',
|
||||
'allow_read_msgbuf'=>'разрешить непривилегированным пользователям читать буфер сообщений ядра',
|
||||
'allow_vmm'=>'разрешить доступ к vmm(4) для создания виртуальных машин внутри контейнера',
|
||||
'allow_unprivileged_proc_debug'=>'непривилегированные процессы могут использовать средства отладки (dtrace,truss,strace)',
|
||||
|
||||
'yes'=>'да',
|
||||
'no'=>'нет',
|
||||
'on'=>'вкл',
|
||||
'off'=>'выкл',
|
||||
'auto'=>'авто',
|
||||
|
||||
'jailed'=>'может запускать bhyve',
|
||||
'cd_boot_firmware'=>'прошивка для загрузки с ISO',
|
||||
'debug_engine'=>'запуск через дебаггер',
|
||||
'vm_cpu_topology'=>'топология CPU',
|
||||
@@ -219,7 +219,7 @@ $lang=array(
|
||||
'bhyve_vnc_tcp_bind'=>'адрес прослушивания VNC',
|
||||
'cd_vnc_wait'=>'запуск с CD ждет подключения VNC',
|
||||
'vm_hostbridge'=>'тип северного моста (hostbridge)',
|
||||
'vm_console'=>'тип консоли',
|
||||
|
||||
'vm_console'=>'тип консоли',
|
||||
|
||||
'DONATE'=>'ПОДДЕРЖАТЬ ПРОЕКТ',
|
||||
);
|
||||
40
public/novnc/node_modules/@types/component-emitter/README.md
generated
vendored
40
public/novnc/node_modules/@types/component-emitter/README.md
generated
vendored
@@ -1,13 +1,13 @@
|
||||
# Installation
|
||||
> `npm install --save @types/component-emitter`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for component-emitter (https://www.npmjs.com/package/component-emitter).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/component-emitter.
|
||||
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/component-emitter/index.d.ts)
|
||||
````ts
|
||||
# Installation
|
||||
> `npm install --save @types/component-emitter`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for component-emitter (https://www.npmjs.com/package/component-emitter).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/component-emitter.
|
||||
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/component-emitter/index.d.ts)
|
||||
````ts
|
||||
// Type definitions for component-emitter v1.2.1
|
||||
// Project: https://www.npmjs.com/package/component-emitter
|
||||
// Definitions by: Peter Snider <https://github.com/psnider>
|
||||
@@ -33,13 +33,13 @@ declare const Emitter: {
|
||||
};
|
||||
|
||||
export = Emitter;
|
||||
|
||||
````
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Thu, 14 Oct 2021 19:01:31 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Peter Snider](https://github.com/psnider).
|
||||
|
||||
````
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Thu, 14 Oct 2021 19:01:31 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Peter Snider](https://github.com/psnider).
|
||||
|
||||
32
public/novnc/node_modules/@types/cookie/README.md
generated
vendored
32
public/novnc/node_modules/@types/cookie/README.md
generated
vendored
@@ -1,16 +1,16 @@
|
||||
# Installation
|
||||
> `npm install --save @types/cookie`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for cookie (https://github.com/jshttp/cookie).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cookie.
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Tue, 06 Jul 2021 20:32:30 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Pine Mizune](https://github.com/pine), and [Piotr Błażejewicz](https://github.com/peterblazejewicz).
|
||||
# Installation
|
||||
> `npm install --save @types/cookie`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for cookie (https://github.com/jshttp/cookie).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cookie.
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Tue, 06 Jul 2021 20:32:30 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Pine Mizune](https://github.com/pine), and [Piotr Błażejewicz](https://github.com/peterblazejewicz).
|
||||
|
||||
40
public/novnc/node_modules/@types/cors/README.md
generated
vendored
40
public/novnc/node_modules/@types/cors/README.md
generated
vendored
@@ -1,13 +1,13 @@
|
||||
# Installation
|
||||
> `npm install --save @types/cors`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for cors (https://github.com/expressjs/cors/).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors.
|
||||
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors/index.d.ts)
|
||||
````ts
|
||||
# Installation
|
||||
> `npm install --save @types/cors`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for cors (https://github.com/expressjs/cors/).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors.
|
||||
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/cors/index.d.ts)
|
||||
````ts
|
||||
// Type definitions for cors 2.8
|
||||
// Project: https://github.com/expressjs/cors/
|
||||
// Definitions by: Alan Plum <https://github.com/pluma>
|
||||
@@ -66,13 +66,13 @@ declare function e<T extends e.CorsRequest = e.CorsRequest>(
|
||||
next: (err?: any) => any,
|
||||
) => void;
|
||||
export = e;
|
||||
|
||||
````
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Fri, 09 Jul 2021 07:31:29 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Alan Plum](https://github.com/pluma), and [Gaurav Sharma](https://github.com/gtpan77).
|
||||
|
||||
````
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Fri, 09 Jul 2021 07:31:29 GMT
|
||||
* Dependencies: none
|
||||
* Global values: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Alan Plum](https://github.com/pluma), and [Gaurav Sharma](https://github.com/gtpan77).
|
||||
|
||||
32
public/novnc/node_modules/@types/node/README.md
generated
vendored
32
public/novnc/node_modules/@types/node/README.md
generated
vendored
@@ -1,16 +1,16 @@
|
||||
# Installation
|
||||
> `npm install --save @types/node`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for Node.js (https://nodejs.org/).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Sat, 30 Jul 2022 21:02:20 GMT
|
||||
* Dependencies: none
|
||||
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone`
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), and [Matteo Collina](https://github.com/mcollina).
|
||||
# Installation
|
||||
> `npm install --save @types/node`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for Node.js (https://nodejs.org/).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Sat, 30 Jul 2022 21:02:20 GMT
|
||||
* Dependencies: none
|
||||
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone`
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), and [Matteo Collina](https://github.com/mcollina).
|
||||
|
||||
8058
public/novnc/node_modules/JSONStream/test/fixtures/all_npm.json
generated
vendored
8058
public/novnc/node_modules/JSONStream/test/fixtures/all_npm.json
generated
vendored
File diff suppressed because it is too large
Load Diff
2
public/novnc/node_modules/browserify/test/bom/hello.js
generated
vendored
2
public/novnc/node_modules/browserify/test/bom/hello.js
generated
vendored
@@ -1 +1 @@
|
||||
console.log('hello')
|
||||
console.log('hello')
|
||||
|
||||
34
public/novnc/node_modules/browserify/test/ignore_transform_key.js
generated
vendored
34
public/novnc/node_modules/browserify/test/ignore_transform_key.js
generated
vendored
@@ -1,17 +1,17 @@
|
||||
var browserify = require('../');
|
||||
var test = require('tap').test;
|
||||
var vm = require('vm');
|
||||
|
||||
test('ignore transform', function(t) {
|
||||
t.plan(1);
|
||||
|
||||
var b = browserify({
|
||||
transformKey: false
|
||||
});
|
||||
b.add(__dirname + '/ignore_transform_key/main.js');
|
||||
|
||||
b.bundle(function(err, src) {
|
||||
if (err) t.fail(err);
|
||||
vm.runInNewContext(src, {t: t});
|
||||
});
|
||||
});
|
||||
var browserify = require('../');
|
||||
var test = require('tap').test;
|
||||
var vm = require('vm');
|
||||
|
||||
test('ignore transform', function(t) {
|
||||
t.plan(1);
|
||||
|
||||
var b = browserify({
|
||||
transformKey: false
|
||||
});
|
||||
b.add(__dirname + '/ignore_transform_key/main.js');
|
||||
|
||||
b.bundle(function(err, src) {
|
||||
if (err) t.fail(err);
|
||||
vm.runInNewContext(src, {t: t});
|
||||
});
|
||||
});
|
||||
|
||||
212
public/novnc/node_modules/color-name/.npmignore
generated
vendored
212
public/novnc/node_modules/color-name/.npmignore
generated
vendored
@@ -1,107 +1,107 @@
|
||||
//this will affect all the git repos
|
||||
git config --global core.excludesfile ~/.gitignore
|
||||
|
||||
|
||||
//update files since .ignore won't if already tracked
|
||||
git rm --cached <file>
|
||||
|
||||
# Compiled source #
|
||||
###################
|
||||
*.com
|
||||
*.class
|
||||
*.dll
|
||||
*.exe
|
||||
*.o
|
||||
*.so
|
||||
|
||||
# Packages #
|
||||
############
|
||||
# it's better to unpack these files and commit the raw source
|
||||
# git has its own built in compression methods
|
||||
*.7z
|
||||
*.dmg
|
||||
*.gz
|
||||
*.iso
|
||||
*.jar
|
||||
*.rar
|
||||
*.tar
|
||||
*.zip
|
||||
|
||||
# Logs and databases #
|
||||
######################
|
||||
*.log
|
||||
*.sql
|
||||
*.sqlite
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
# Icon?
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
.cache
|
||||
.project
|
||||
.settings
|
||||
.tmproj
|
||||
*.esproj
|
||||
nbproject
|
||||
|
||||
# Numerous always-ignore extensions #
|
||||
#####################################
|
||||
*.diff
|
||||
*.err
|
||||
*.orig
|
||||
*.rej
|
||||
*.swn
|
||||
*.swo
|
||||
*.swp
|
||||
*.vi
|
||||
*~
|
||||
*.sass-cache
|
||||
*.grunt
|
||||
*.tmp
|
||||
|
||||
# Dreamweaver added files #
|
||||
###########################
|
||||
_notes
|
||||
dwsync.xml
|
||||
|
||||
# Komodo #
|
||||
###########################
|
||||
*.komodoproject
|
||||
.komodotools
|
||||
|
||||
# Node #
|
||||
#####################
|
||||
node_modules
|
||||
|
||||
# Bower #
|
||||
#####################
|
||||
bower_components
|
||||
|
||||
# Folders to ignore #
|
||||
#####################
|
||||
.hg
|
||||
.svn
|
||||
.CVS
|
||||
intermediate
|
||||
publish
|
||||
.idea
|
||||
.graphics
|
||||
_test
|
||||
_archive
|
||||
uploads
|
||||
tmp
|
||||
|
||||
# Vim files to ignore #
|
||||
#######################
|
||||
.VimballRecord
|
||||
.netrwhist
|
||||
|
||||
bundle.*
|
||||
|
||||
//this will affect all the git repos
|
||||
git config --global core.excludesfile ~/.gitignore
|
||||
|
||||
|
||||
//update files since .ignore won't if already tracked
|
||||
git rm --cached <file>
|
||||
|
||||
# Compiled source #
|
||||
###################
|
||||
*.com
|
||||
*.class
|
||||
*.dll
|
||||
*.exe
|
||||
*.o
|
||||
*.so
|
||||
|
||||
# Packages #
|
||||
############
|
||||
# it's better to unpack these files and commit the raw source
|
||||
# git has its own built in compression methods
|
||||
*.7z
|
||||
*.dmg
|
||||
*.gz
|
||||
*.iso
|
||||
*.jar
|
||||
*.rar
|
||||
*.tar
|
||||
*.zip
|
||||
|
||||
# Logs and databases #
|
||||
######################
|
||||
*.log
|
||||
*.sql
|
||||
*.sqlite
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
# Icon?
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
.cache
|
||||
.project
|
||||
.settings
|
||||
.tmproj
|
||||
*.esproj
|
||||
nbproject
|
||||
|
||||
# Numerous always-ignore extensions #
|
||||
#####################################
|
||||
*.diff
|
||||
*.err
|
||||
*.orig
|
||||
*.rej
|
||||
*.swn
|
||||
*.swo
|
||||
*.swp
|
||||
*.vi
|
||||
*~
|
||||
*.sass-cache
|
||||
*.grunt
|
||||
*.tmp
|
||||
|
||||
# Dreamweaver added files #
|
||||
###########################
|
||||
_notes
|
||||
dwsync.xml
|
||||
|
||||
# Komodo #
|
||||
###########################
|
||||
*.komodoproject
|
||||
.komodotools
|
||||
|
||||
# Node #
|
||||
#####################
|
||||
node_modules
|
||||
|
||||
# Bower #
|
||||
#####################
|
||||
bower_components
|
||||
|
||||
# Folders to ignore #
|
||||
#####################
|
||||
.hg
|
||||
.svn
|
||||
.CVS
|
||||
intermediate
|
||||
publish
|
||||
.idea
|
||||
.graphics
|
||||
_test
|
||||
_archive
|
||||
uploads
|
||||
tmp
|
||||
|
||||
# Vim files to ignore #
|
||||
#######################
|
||||
.VimballRecord
|
||||
.netrwhist
|
||||
|
||||
bundle.*
|
||||
|
||||
_demo
|
||||
14
public/novnc/node_modules/color-name/LICENSE
generated
vendored
14
public/novnc/node_modules/color-name/LICENSE
generated
vendored
@@ -1,8 +1,8 @@
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2015 Dmitry Ivanov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2015 Dmitry Ivanov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
22
public/novnc/node_modules/color-name/README.md
generated
vendored
22
public/novnc/node_modules/color-name/README.md
generated
vendored
@@ -1,11 +1,11 @@
|
||||
A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors.
|
||||
|
||||
[](https://nodei.co/npm/color-name/)
|
||||
|
||||
|
||||
```js
|
||||
var colors = require('color-name');
|
||||
colors.red //[255,0,0]
|
||||
```
|
||||
|
||||
<a href="LICENSE"><img src="https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg" width="120"/></a>
|
||||
A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors.
|
||||
|
||||
[](https://nodei.co/npm/color-name/)
|
||||
|
||||
|
||||
```js
|
||||
var colors = require('color-name');
|
||||
colors.red //[255,0,0]
|
||||
```
|
||||
|
||||
<a href="LICENSE"><img src="https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg" width="120"/></a>
|
||||
|
||||
304
public/novnc/node_modules/color-name/index.js
generated
vendored
304
public/novnc/node_modules/color-name/index.js
generated
vendored
@@ -1,152 +1,152 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
"aliceblue": [240, 248, 255],
|
||||
"antiquewhite": [250, 235, 215],
|
||||
"aqua": [0, 255, 255],
|
||||
"aquamarine": [127, 255, 212],
|
||||
"azure": [240, 255, 255],
|
||||
"beige": [245, 245, 220],
|
||||
"bisque": [255, 228, 196],
|
||||
"black": [0, 0, 0],
|
||||
"blanchedalmond": [255, 235, 205],
|
||||
"blue": [0, 0, 255],
|
||||
"blueviolet": [138, 43, 226],
|
||||
"brown": [165, 42, 42],
|
||||
"burlywood": [222, 184, 135],
|
||||
"cadetblue": [95, 158, 160],
|
||||
"chartreuse": [127, 255, 0],
|
||||
"chocolate": [210, 105, 30],
|
||||
"coral": [255, 127, 80],
|
||||
"cornflowerblue": [100, 149, 237],
|
||||
"cornsilk": [255, 248, 220],
|
||||
"crimson": [220, 20, 60],
|
||||
"cyan": [0, 255, 255],
|
||||
"darkblue": [0, 0, 139],
|
||||
"darkcyan": [0, 139, 139],
|
||||
"darkgoldenrod": [184, 134, 11],
|
||||
"darkgray": [169, 169, 169],
|
||||
"darkgreen": [0, 100, 0],
|
||||
"darkgrey": [169, 169, 169],
|
||||
"darkkhaki": [189, 183, 107],
|
||||
"darkmagenta": [139, 0, 139],
|
||||
"darkolivegreen": [85, 107, 47],
|
||||
"darkorange": [255, 140, 0],
|
||||
"darkorchid": [153, 50, 204],
|
||||
"darkred": [139, 0, 0],
|
||||
"darksalmon": [233, 150, 122],
|
||||
"darkseagreen": [143, 188, 143],
|
||||
"darkslateblue": [72, 61, 139],
|
||||
"darkslategray": [47, 79, 79],
|
||||
"darkslategrey": [47, 79, 79],
|
||||
"darkturquoise": [0, 206, 209],
|
||||
"darkviolet": [148, 0, 211],
|
||||
"deeppink": [255, 20, 147],
|
||||
"deepskyblue": [0, 191, 255],
|
||||
"dimgray": [105, 105, 105],
|
||||
"dimgrey": [105, 105, 105],
|
||||
"dodgerblue": [30, 144, 255],
|
||||
"firebrick": [178, 34, 34],
|
||||
"floralwhite": [255, 250, 240],
|
||||
"forestgreen": [34, 139, 34],
|
||||
"fuchsia": [255, 0, 255],
|
||||
"gainsboro": [220, 220, 220],
|
||||
"ghostwhite": [248, 248, 255],
|
||||
"gold": [255, 215, 0],
|
||||
"goldenrod": [218, 165, 32],
|
||||
"gray": [128, 128, 128],
|
||||
"green": [0, 128, 0],
|
||||
"greenyellow": [173, 255, 47],
|
||||
"grey": [128, 128, 128],
|
||||
"honeydew": [240, 255, 240],
|
||||
"hotpink": [255, 105, 180],
|
||||
"indianred": [205, 92, 92],
|
||||
"indigo": [75, 0, 130],
|
||||
"ivory": [255, 255, 240],
|
||||
"khaki": [240, 230, 140],
|
||||
"lavender": [230, 230, 250],
|
||||
"lavenderblush": [255, 240, 245],
|
||||
"lawngreen": [124, 252, 0],
|
||||
"lemonchiffon": [255, 250, 205],
|
||||
"lightblue": [173, 216, 230],
|
||||
"lightcoral": [240, 128, 128],
|
||||
"lightcyan": [224, 255, 255],
|
||||
"lightgoldenrodyellow": [250, 250, 210],
|
||||
"lightgray": [211, 211, 211],
|
||||
"lightgreen": [144, 238, 144],
|
||||
"lightgrey": [211, 211, 211],
|
||||
"lightpink": [255, 182, 193],
|
||||
"lightsalmon": [255, 160, 122],
|
||||
"lightseagreen": [32, 178, 170],
|
||||
"lightskyblue": [135, 206, 250],
|
||||
"lightslategray": [119, 136, 153],
|
||||
"lightslategrey": [119, 136, 153],
|
||||
"lightsteelblue": [176, 196, 222],
|
||||
"lightyellow": [255, 255, 224],
|
||||
"lime": [0, 255, 0],
|
||||
"limegreen": [50, 205, 50],
|
||||
"linen": [250, 240, 230],
|
||||
"magenta": [255, 0, 255],
|
||||
"maroon": [128, 0, 0],
|
||||
"mediumaquamarine": [102, 205, 170],
|
||||
"mediumblue": [0, 0, 205],
|
||||
"mediumorchid": [186, 85, 211],
|
||||
"mediumpurple": [147, 112, 219],
|
||||
"mediumseagreen": [60, 179, 113],
|
||||
"mediumslateblue": [123, 104, 238],
|
||||
"mediumspringgreen": [0, 250, 154],
|
||||
"mediumturquoise": [72, 209, 204],
|
||||
"mediumvioletred": [199, 21, 133],
|
||||
"midnightblue": [25, 25, 112],
|
||||
"mintcream": [245, 255, 250],
|
||||
"mistyrose": [255, 228, 225],
|
||||
"moccasin": [255, 228, 181],
|
||||
"navajowhite": [255, 222, 173],
|
||||
"navy": [0, 0, 128],
|
||||
"oldlace": [253, 245, 230],
|
||||
"olive": [128, 128, 0],
|
||||
"olivedrab": [107, 142, 35],
|
||||
"orange": [255, 165, 0],
|
||||
"orangered": [255, 69, 0],
|
||||
"orchid": [218, 112, 214],
|
||||
"palegoldenrod": [238, 232, 170],
|
||||
"palegreen": [152, 251, 152],
|
||||
"paleturquoise": [175, 238, 238],
|
||||
"palevioletred": [219, 112, 147],
|
||||
"papayawhip": [255, 239, 213],
|
||||
"peachpuff": [255, 218, 185],
|
||||
"peru": [205, 133, 63],
|
||||
"pink": [255, 192, 203],
|
||||
"plum": [221, 160, 221],
|
||||
"powderblue": [176, 224, 230],
|
||||
"purple": [128, 0, 128],
|
||||
"rebeccapurple": [102, 51, 153],
|
||||
"red": [255, 0, 0],
|
||||
"rosybrown": [188, 143, 143],
|
||||
"royalblue": [65, 105, 225],
|
||||
"saddlebrown": [139, 69, 19],
|
||||
"salmon": [250, 128, 114],
|
||||
"sandybrown": [244, 164, 96],
|
||||
"seagreen": [46, 139, 87],
|
||||
"seashell": [255, 245, 238],
|
||||
"sienna": [160, 82, 45],
|
||||
"silver": [192, 192, 192],
|
||||
"skyblue": [135, 206, 235],
|
||||
"slateblue": [106, 90, 205],
|
||||
"slategray": [112, 128, 144],
|
||||
"slategrey": [112, 128, 144],
|
||||
"snow": [255, 250, 250],
|
||||
"springgreen": [0, 255, 127],
|
||||
"steelblue": [70, 130, 180],
|
||||
"tan": [210, 180, 140],
|
||||
"teal": [0, 128, 128],
|
||||
"thistle": [216, 191, 216],
|
||||
"tomato": [255, 99, 71],
|
||||
"turquoise": [64, 224, 208],
|
||||
"violet": [238, 130, 238],
|
||||
"wheat": [245, 222, 179],
|
||||
"white": [255, 255, 255],
|
||||
"whitesmoke": [245, 245, 245],
|
||||
"yellow": [255, 255, 0],
|
||||
"yellowgreen": [154, 205, 50]
|
||||
};
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
"aliceblue": [240, 248, 255],
|
||||
"antiquewhite": [250, 235, 215],
|
||||
"aqua": [0, 255, 255],
|
||||
"aquamarine": [127, 255, 212],
|
||||
"azure": [240, 255, 255],
|
||||
"beige": [245, 245, 220],
|
||||
"bisque": [255, 228, 196],
|
||||
"black": [0, 0, 0],
|
||||
"blanchedalmond": [255, 235, 205],
|
||||
"blue": [0, 0, 255],
|
||||
"blueviolet": [138, 43, 226],
|
||||
"brown": [165, 42, 42],
|
||||
"burlywood": [222, 184, 135],
|
||||
"cadetblue": [95, 158, 160],
|
||||
"chartreuse": [127, 255, 0],
|
||||
"chocolate": [210, 105, 30],
|
||||
"coral": [255, 127, 80],
|
||||
"cornflowerblue": [100, 149, 237],
|
||||
"cornsilk": [255, 248, 220],
|
||||
"crimson": [220, 20, 60],
|
||||
"cyan": [0, 255, 255],
|
||||
"darkblue": [0, 0, 139],
|
||||
"darkcyan": [0, 139, 139],
|
||||
"darkgoldenrod": [184, 134, 11],
|
||||
"darkgray": [169, 169, 169],
|
||||
"darkgreen": [0, 100, 0],
|
||||
"darkgrey": [169, 169, 169],
|
||||
"darkkhaki": [189, 183, 107],
|
||||
"darkmagenta": [139, 0, 139],
|
||||
"darkolivegreen": [85, 107, 47],
|
||||
"darkorange": [255, 140, 0],
|
||||
"darkorchid": [153, 50, 204],
|
||||
"darkred": [139, 0, 0],
|
||||
"darksalmon": [233, 150, 122],
|
||||
"darkseagreen": [143, 188, 143],
|
||||
"darkslateblue": [72, 61, 139],
|
||||
"darkslategray": [47, 79, 79],
|
||||
"darkslategrey": [47, 79, 79],
|
||||
"darkturquoise": [0, 206, 209],
|
||||
"darkviolet": [148, 0, 211],
|
||||
"deeppink": [255, 20, 147],
|
||||
"deepskyblue": [0, 191, 255],
|
||||
"dimgray": [105, 105, 105],
|
||||
"dimgrey": [105, 105, 105],
|
||||
"dodgerblue": [30, 144, 255],
|
||||
"firebrick": [178, 34, 34],
|
||||
"floralwhite": [255, 250, 240],
|
||||
"forestgreen": [34, 139, 34],
|
||||
"fuchsia": [255, 0, 255],
|
||||
"gainsboro": [220, 220, 220],
|
||||
"ghostwhite": [248, 248, 255],
|
||||
"gold": [255, 215, 0],
|
||||
"goldenrod": [218, 165, 32],
|
||||
"gray": [128, 128, 128],
|
||||
"green": [0, 128, 0],
|
||||
"greenyellow": [173, 255, 47],
|
||||
"grey": [128, 128, 128],
|
||||
"honeydew": [240, 255, 240],
|
||||
"hotpink": [255, 105, 180],
|
||||
"indianred": [205, 92, 92],
|
||||
"indigo": [75, 0, 130],
|
||||
"ivory": [255, 255, 240],
|
||||
"khaki": [240, 230, 140],
|
||||
"lavender": [230, 230, 250],
|
||||
"lavenderblush": [255, 240, 245],
|
||||
"lawngreen": [124, 252, 0],
|
||||
"lemonchiffon": [255, 250, 205],
|
||||
"lightblue": [173, 216, 230],
|
||||
"lightcoral": [240, 128, 128],
|
||||
"lightcyan": [224, 255, 255],
|
||||
"lightgoldenrodyellow": [250, 250, 210],
|
||||
"lightgray": [211, 211, 211],
|
||||
"lightgreen": [144, 238, 144],
|
||||
"lightgrey": [211, 211, 211],
|
||||
"lightpink": [255, 182, 193],
|
||||
"lightsalmon": [255, 160, 122],
|
||||
"lightseagreen": [32, 178, 170],
|
||||
"lightskyblue": [135, 206, 250],
|
||||
"lightslategray": [119, 136, 153],
|
||||
"lightslategrey": [119, 136, 153],
|
||||
"lightsteelblue": [176, 196, 222],
|
||||
"lightyellow": [255, 255, 224],
|
||||
"lime": [0, 255, 0],
|
||||
"limegreen": [50, 205, 50],
|
||||
"linen": [250, 240, 230],
|
||||
"magenta": [255, 0, 255],
|
||||
"maroon": [128, 0, 0],
|
||||
"mediumaquamarine": [102, 205, 170],
|
||||
"mediumblue": [0, 0, 205],
|
||||
"mediumorchid": [186, 85, 211],
|
||||
"mediumpurple": [147, 112, 219],
|
||||
"mediumseagreen": [60, 179, 113],
|
||||
"mediumslateblue": [123, 104, 238],
|
||||
"mediumspringgreen": [0, 250, 154],
|
||||
"mediumturquoise": [72, 209, 204],
|
||||
"mediumvioletred": [199, 21, 133],
|
||||
"midnightblue": [25, 25, 112],
|
||||
"mintcream": [245, 255, 250],
|
||||
"mistyrose": [255, 228, 225],
|
||||
"moccasin": [255, 228, 181],
|
||||
"navajowhite": [255, 222, 173],
|
||||
"navy": [0, 0, 128],
|
||||
"oldlace": [253, 245, 230],
|
||||
"olive": [128, 128, 0],
|
||||
"olivedrab": [107, 142, 35],
|
||||
"orange": [255, 165, 0],
|
||||
"orangered": [255, 69, 0],
|
||||
"orchid": [218, 112, 214],
|
||||
"palegoldenrod": [238, 232, 170],
|
||||
"palegreen": [152, 251, 152],
|
||||
"paleturquoise": [175, 238, 238],
|
||||
"palevioletred": [219, 112, 147],
|
||||
"papayawhip": [255, 239, 213],
|
||||
"peachpuff": [255, 218, 185],
|
||||
"peru": [205, 133, 63],
|
||||
"pink": [255, 192, 203],
|
||||
"plum": [221, 160, 221],
|
||||
"powderblue": [176, 224, 230],
|
||||
"purple": [128, 0, 128],
|
||||
"rebeccapurple": [102, 51, 153],
|
||||
"red": [255, 0, 0],
|
||||
"rosybrown": [188, 143, 143],
|
||||
"royalblue": [65, 105, 225],
|
||||
"saddlebrown": [139, 69, 19],
|
||||
"salmon": [250, 128, 114],
|
||||
"sandybrown": [244, 164, 96],
|
||||
"seagreen": [46, 139, 87],
|
||||
"seashell": [255, 245, 238],
|
||||
"sienna": [160, 82, 45],
|
||||
"silver": [192, 192, 192],
|
||||
"skyblue": [135, 206, 235],
|
||||
"slateblue": [106, 90, 205],
|
||||
"slategray": [112, 128, 144],
|
||||
"slategrey": [112, 128, 144],
|
||||
"snow": [255, 250, 250],
|
||||
"springgreen": [0, 255, 127],
|
||||
"steelblue": [70, 130, 180],
|
||||
"tan": [210, 180, 140],
|
||||
"teal": [0, 128, 128],
|
||||
"thistle": [216, 191, 216],
|
||||
"tomato": [255, 99, 71],
|
||||
"turquoise": [64, 224, 208],
|
||||
"violet": [238, 130, 238],
|
||||
"wheat": [245, 222, 179],
|
||||
"white": [255, 255, 255],
|
||||
"whitesmoke": [245, 245, 245],
|
||||
"yellow": [255, 255, 0],
|
||||
"yellowgreen": [154, 205, 50]
|
||||
};
|
||||
|
||||
14
public/novnc/node_modules/color-name/test.js
generated
vendored
14
public/novnc/node_modules/color-name/test.js
generated
vendored
@@ -1,7 +1,7 @@
|
||||
'use strict'
|
||||
|
||||
var names = require('./');
|
||||
var assert = require('assert');
|
||||
|
||||
assert.deepEqual(names.red, [255,0,0]);
|
||||
assert.deepEqual(names.aliceblue, [240,248,255]);
|
||||
'use strict'
|
||||
|
||||
var names = require('./');
|
||||
var assert = require('assert');
|
||||
|
||||
assert.deepEqual(names.red, [255,0,0]);
|
||||
assert.deepEqual(names.aliceblue, [240,248,255]);
|
||||
|
||||
150
public/novnc/node_modules/component-emitter/History.md
generated
vendored
150
public/novnc/node_modules/component-emitter/History.md
generated
vendored
@@ -1,75 +1,75 @@
|
||||
|
||||
1.3.0 / 2018-04-15
|
||||
==================
|
||||
|
||||
* removed bower support
|
||||
* expose emitter on `exports`
|
||||
* prevent de-optimization from using `arguments`
|
||||
|
||||
1.2.1 / 2016-04-18
|
||||
==================
|
||||
|
||||
* enable client side use
|
||||
|
||||
1.2.0 / 2014-02-12
|
||||
==================
|
||||
|
||||
* prefix events with `$` to support object prototype method names
|
||||
|
||||
1.1.3 / 2014-06-20
|
||||
==================
|
||||
|
||||
* republish for npm
|
||||
* add LICENSE file
|
||||
|
||||
1.1.2 / 2014-02-10
|
||||
==================
|
||||
|
||||
* package: rename to "component-emitter"
|
||||
* package: update "main" and "component" fields
|
||||
* Add license to Readme (same format as the other components)
|
||||
* created .npmignore
|
||||
* travis stuff
|
||||
|
||||
1.1.1 / 2013-12-01
|
||||
==================
|
||||
|
||||
* fix .once adding .on to the listener
|
||||
* docs: Emitter#off()
|
||||
* component: add `.repo` prop
|
||||
|
||||
1.1.0 / 2013-10-20
|
||||
==================
|
||||
|
||||
* add `.addEventListener()` and `.removeEventListener()` aliases
|
||||
|
||||
1.0.1 / 2013-06-27
|
||||
==================
|
||||
|
||||
* add support for legacy ie
|
||||
|
||||
1.0.0 / 2013-02-26
|
||||
==================
|
||||
|
||||
* add `.off()` support for removing all listeners
|
||||
|
||||
0.0.6 / 2012-10-08
|
||||
==================
|
||||
|
||||
* add `this._callbacks` initialization to prevent funky gotcha
|
||||
|
||||
0.0.5 / 2012-09-07
|
||||
==================
|
||||
|
||||
* fix `Emitter.call(this)` usage
|
||||
|
||||
0.0.3 / 2012-07-11
|
||||
==================
|
||||
|
||||
* add `.listeners()`
|
||||
* rename `.has()` to `.hasListeners()`
|
||||
|
||||
0.0.2 / 2012-06-28
|
||||
==================
|
||||
|
||||
* fix `.off()` with `.once()`-registered callbacks
|
||||
|
||||
1.3.0 / 2018-04-15
|
||||
==================
|
||||
|
||||
* removed bower support
|
||||
* expose emitter on `exports`
|
||||
* prevent de-optimization from using `arguments`
|
||||
|
||||
1.2.1 / 2016-04-18
|
||||
==================
|
||||
|
||||
* enable client side use
|
||||
|
||||
1.2.0 / 2014-02-12
|
||||
==================
|
||||
|
||||
* prefix events with `$` to support object prototype method names
|
||||
|
||||
1.1.3 / 2014-06-20
|
||||
==================
|
||||
|
||||
* republish for npm
|
||||
* add LICENSE file
|
||||
|
||||
1.1.2 / 2014-02-10
|
||||
==================
|
||||
|
||||
* package: rename to "component-emitter"
|
||||
* package: update "main" and "component" fields
|
||||
* Add license to Readme (same format as the other components)
|
||||
* created .npmignore
|
||||
* travis stuff
|
||||
|
||||
1.1.1 / 2013-12-01
|
||||
==================
|
||||
|
||||
* fix .once adding .on to the listener
|
||||
* docs: Emitter#off()
|
||||
* component: add `.repo` prop
|
||||
|
||||
1.1.0 / 2013-10-20
|
||||
==================
|
||||
|
||||
* add `.addEventListener()` and `.removeEventListener()` aliases
|
||||
|
||||
1.0.1 / 2013-06-27
|
||||
==================
|
||||
|
||||
* add support for legacy ie
|
||||
|
||||
1.0.0 / 2013-02-26
|
||||
==================
|
||||
|
||||
* add `.off()` support for removing all listeners
|
||||
|
||||
0.0.6 / 2012-10-08
|
||||
==================
|
||||
|
||||
* add `this._callbacks` initialization to prevent funky gotcha
|
||||
|
||||
0.0.5 / 2012-09-07
|
||||
==================
|
||||
|
||||
* fix `Emitter.call(this)` usage
|
||||
|
||||
0.0.3 / 2012-07-11
|
||||
==================
|
||||
|
||||
* add `.listeners()`
|
||||
* rename `.has()` to `.hasListeners()`
|
||||
|
||||
0.0.2 / 2012-06-28
|
||||
==================
|
||||
|
||||
* fix `.off()` with `.once()`-registered callbacks
|
||||
|
||||
48
public/novnc/node_modules/component-emitter/LICENSE
generated
vendored
48
public/novnc/node_modules/component-emitter/LICENSE
generated
vendored
@@ -1,24 +1,24 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Component contributors <dev@component.io>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Component contributors <dev@component.io>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
148
public/novnc/node_modules/component-emitter/Readme.md
generated
vendored
148
public/novnc/node_modules/component-emitter/Readme.md
generated
vendored
@@ -1,74 +1,74 @@
|
||||
# Emitter [](https://travis-ci.org/component/emitter)
|
||||
|
||||
Event emitter component.
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ component install component/emitter
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### Emitter(obj)
|
||||
|
||||
The `Emitter` may also be used as a mixin. For example
|
||||
a "plain" object may become an emitter, or you may
|
||||
extend an existing prototype.
|
||||
|
||||
As an `Emitter` instance:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
var emitter = new Emitter;
|
||||
emitter.emit('something');
|
||||
```
|
||||
|
||||
As a mixin:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
var user = { name: 'tobi' };
|
||||
Emitter(user);
|
||||
|
||||
user.emit('im a user');
|
||||
```
|
||||
|
||||
As a prototype mixin:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
Emitter(User.prototype);
|
||||
```
|
||||
|
||||
### Emitter#on(event, fn)
|
||||
|
||||
Register an `event` handler `fn`.
|
||||
|
||||
### Emitter#once(event, fn)
|
||||
|
||||
Register a single-shot `event` handler `fn`,
|
||||
removed immediately after it is invoked the
|
||||
first time.
|
||||
|
||||
### Emitter#off(event, fn)
|
||||
|
||||
* Pass `event` and `fn` to remove a listener.
|
||||
* Pass `event` to remove all listeners on that event.
|
||||
* Pass nothing to remove all listeners on all events.
|
||||
|
||||
### Emitter#emit(event, ...)
|
||||
|
||||
Emit an `event` with variable option args.
|
||||
|
||||
### Emitter#listeners(event)
|
||||
|
||||
Return an array of callbacks, or an empty array.
|
||||
|
||||
### Emitter#hasListeners(event)
|
||||
|
||||
Check if this emitter has `event` handlers.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
# Emitter [](https://travis-ci.org/component/emitter)
|
||||
|
||||
Event emitter component.
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ component install component/emitter
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### Emitter(obj)
|
||||
|
||||
The `Emitter` may also be used as a mixin. For example
|
||||
a "plain" object may become an emitter, or you may
|
||||
extend an existing prototype.
|
||||
|
||||
As an `Emitter` instance:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
var emitter = new Emitter;
|
||||
emitter.emit('something');
|
||||
```
|
||||
|
||||
As a mixin:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
var user = { name: 'tobi' };
|
||||
Emitter(user);
|
||||
|
||||
user.emit('im a user');
|
||||
```
|
||||
|
||||
As a prototype mixin:
|
||||
|
||||
```js
|
||||
var Emitter = require('emitter');
|
||||
Emitter(User.prototype);
|
||||
```
|
||||
|
||||
### Emitter#on(event, fn)
|
||||
|
||||
Register an `event` handler `fn`.
|
||||
|
||||
### Emitter#once(event, fn)
|
||||
|
||||
Register a single-shot `event` handler `fn`,
|
||||
removed immediately after it is invoked the
|
||||
first time.
|
||||
|
||||
### Emitter#off(event, fn)
|
||||
|
||||
* Pass `event` and `fn` to remove a listener.
|
||||
* Pass `event` to remove all listeners on that event.
|
||||
* Pass nothing to remove all listeners on all events.
|
||||
|
||||
### Emitter#emit(event, ...)
|
||||
|
||||
Emit an `event` with variable option args.
|
||||
|
||||
### Emitter#listeners(event)
|
||||
|
||||
Return an array of callbacks, or an empty array.
|
||||
|
||||
### Emitter#hasListeners(event)
|
||||
|
||||
Check if this emitter has `event` handlers.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
350
public/novnc/node_modules/component-emitter/index.js
generated
vendored
350
public/novnc/node_modules/component-emitter/index.js
generated
vendored
@@ -1,175 +1,175 @@
|
||||
|
||||
/**
|
||||
* Expose `Emitter`.
|
||||
*/
|
||||
|
||||
if (typeof module !== 'undefined') {
|
||||
module.exports = Emitter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a new `Emitter`.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function Emitter(obj) {
|
||||
if (obj) return mixin(obj);
|
||||
};
|
||||
|
||||
/**
|
||||
* Mixin the emitter properties.
|
||||
*
|
||||
* @param {Object} obj
|
||||
* @return {Object}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function mixin(obj) {
|
||||
for (var key in Emitter.prototype) {
|
||||
obj[key] = Emitter.prototype[key];
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen on the given `event` with `fn`.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.on =
|
||||
Emitter.prototype.addEventListener = function(event, fn){
|
||||
this._callbacks = this._callbacks || {};
|
||||
(this._callbacks['$' + event] = this._callbacks['$' + event] || [])
|
||||
.push(fn);
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds an `event` listener that will be invoked a single
|
||||
* time then automatically removed.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.once = function(event, fn){
|
||||
function on() {
|
||||
this.off(event, on);
|
||||
fn.apply(this, arguments);
|
||||
}
|
||||
|
||||
on.fn = fn;
|
||||
this.on(event, on);
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove the given callback for `event` or all
|
||||
* registered callbacks.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.off =
|
||||
Emitter.prototype.removeListener =
|
||||
Emitter.prototype.removeAllListeners =
|
||||
Emitter.prototype.removeEventListener = function(event, fn){
|
||||
this._callbacks = this._callbacks || {};
|
||||
|
||||
// all
|
||||
if (0 == arguments.length) {
|
||||
this._callbacks = {};
|
||||
return this;
|
||||
}
|
||||
|
||||
// specific event
|
||||
var callbacks = this._callbacks['$' + event];
|
||||
if (!callbacks) return this;
|
||||
|
||||
// remove all handlers
|
||||
if (1 == arguments.length) {
|
||||
delete this._callbacks['$' + event];
|
||||
return this;
|
||||
}
|
||||
|
||||
// remove specific handler
|
||||
var cb;
|
||||
for (var i = 0; i < callbacks.length; i++) {
|
||||
cb = callbacks[i];
|
||||
if (cb === fn || cb.fn === fn) {
|
||||
callbacks.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove event specific arrays for event types that no
|
||||
// one is subscribed for to avoid memory leak.
|
||||
if (callbacks.length === 0) {
|
||||
delete this._callbacks['$' + event];
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Emit `event` with the given args.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Mixed} ...
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
Emitter.prototype.emit = function(event){
|
||||
this._callbacks = this._callbacks || {};
|
||||
|
||||
var args = new Array(arguments.length - 1)
|
||||
, callbacks = this._callbacks['$' + event];
|
||||
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
args[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
if (callbacks) {
|
||||
callbacks = callbacks.slice(0);
|
||||
for (var i = 0, len = callbacks.length; i < len; ++i) {
|
||||
callbacks[i].apply(this, args);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return array of callbacks for `event`.
|
||||
*
|
||||
* @param {String} event
|
||||
* @return {Array}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.listeners = function(event){
|
||||
this._callbacks = this._callbacks || {};
|
||||
return this._callbacks['$' + event] || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if this emitter has `event` handlers.
|
||||
*
|
||||
* @param {String} event
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.hasListeners = function(event){
|
||||
return !! this.listeners(event).length;
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose `Emitter`.
|
||||
*/
|
||||
|
||||
if (typeof module !== 'undefined') {
|
||||
module.exports = Emitter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a new `Emitter`.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function Emitter(obj) {
|
||||
if (obj) return mixin(obj);
|
||||
};
|
||||
|
||||
/**
|
||||
* Mixin the emitter properties.
|
||||
*
|
||||
* @param {Object} obj
|
||||
* @return {Object}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function mixin(obj) {
|
||||
for (var key in Emitter.prototype) {
|
||||
obj[key] = Emitter.prototype[key];
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen on the given `event` with `fn`.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.on =
|
||||
Emitter.prototype.addEventListener = function(event, fn){
|
||||
this._callbacks = this._callbacks || {};
|
||||
(this._callbacks['$' + event] = this._callbacks['$' + event] || [])
|
||||
.push(fn);
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds an `event` listener that will be invoked a single
|
||||
* time then automatically removed.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.once = function(event, fn){
|
||||
function on() {
|
||||
this.off(event, on);
|
||||
fn.apply(this, arguments);
|
||||
}
|
||||
|
||||
on.fn = fn;
|
||||
this.on(event, on);
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove the given callback for `event` or all
|
||||
* registered callbacks.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Function} fn
|
||||
* @return {Emitter}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.off =
|
||||
Emitter.prototype.removeListener =
|
||||
Emitter.prototype.removeAllListeners =
|
||||
Emitter.prototype.removeEventListener = function(event, fn){
|
||||
this._callbacks = this._callbacks || {};
|
||||
|
||||
// all
|
||||
if (0 == arguments.length) {
|
||||
this._callbacks = {};
|
||||
return this;
|
||||
}
|
||||
|
||||
// specific event
|
||||
var callbacks = this._callbacks['$' + event];
|
||||
if (!callbacks) return this;
|
||||
|
||||
// remove all handlers
|
||||
if (1 == arguments.length) {
|
||||
delete this._callbacks['$' + event];
|
||||
return this;
|
||||
}
|
||||
|
||||
// remove specific handler
|
||||
var cb;
|
||||
for (var i = 0; i < callbacks.length; i++) {
|
||||
cb = callbacks[i];
|
||||
if (cb === fn || cb.fn === fn) {
|
||||
callbacks.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove event specific arrays for event types that no
|
||||
// one is subscribed for to avoid memory leak.
|
||||
if (callbacks.length === 0) {
|
||||
delete this._callbacks['$' + event];
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Emit `event` with the given args.
|
||||
*
|
||||
* @param {String} event
|
||||
* @param {Mixed} ...
|
||||
* @return {Emitter}
|
||||
*/
|
||||
|
||||
Emitter.prototype.emit = function(event){
|
||||
this._callbacks = this._callbacks || {};
|
||||
|
||||
var args = new Array(arguments.length - 1)
|
||||
, callbacks = this._callbacks['$' + event];
|
||||
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
args[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
if (callbacks) {
|
||||
callbacks = callbacks.slice(0);
|
||||
for (var i = 0, len = callbacks.length; i < len; ++i) {
|
||||
callbacks[i].apply(this, args);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return array of callbacks for `event`.
|
||||
*
|
||||
* @param {String} event
|
||||
* @return {Array}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.listeners = function(event){
|
||||
this._callbacks = this._callbacks || {};
|
||||
return this._callbacks['$' + event] || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if this emitter has `event` handlers.
|
||||
*
|
||||
* @param {String} event
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Emitter.prototype.hasListeners = function(event){
|
||||
return !! this.listeners(event).length;
|
||||
};
|
||||
|
||||
462
public/novnc/node_modules/decimal.js/CHANGELOG.md
generated
vendored
462
public/novnc/node_modules/decimal.js/CHANGELOG.md
generated
vendored
@@ -1,231 +1,231 @@
|
||||
#### 10.3.1
|
||||
* 25/06/2021
|
||||
* Remove minified versions. Refresh *README*.
|
||||
|
||||
#### 10.3.0
|
||||
* 22/06/2021
|
||||
* Support underscores as separators.
|
||||
* #101 Add `Decimal.clamp` method.
|
||||
* #161 Fix Decimal instances deemed plain objects.
|
||||
* #100 Add `Decimal.sum` method.
|
||||
* #146 `Symbol.for` to `Symbol['for']` for IE8.
|
||||
* #132 Fix possible infinite loop when `minE` is very low.
|
||||
* #180 Accept Decimals of different origin.
|
||||
* Update Typescript definitions.
|
||||
* Update minification examples in *README*.
|
||||
* Add minified versions for both *decimal.js* and *decimal.mjs*.
|
||||
* Add *files* field to *package.json*, and remove build script.
|
||||
|
||||
#### 10.2.1
|
||||
* 28/09/2020
|
||||
* Correct `sqrt` initial estimate.
|
||||
|
||||
#### 10.2.0
|
||||
* 08/05/2019
|
||||
* #128 Workaround V8 `Math.pow` change.
|
||||
* #93 Accept `+` prefix when parsing string values.
|
||||
* #129 Fix typo.
|
||||
|
||||
#### 10.1.1
|
||||
* 27/02/2019
|
||||
* Check `Symbol` properly.
|
||||
|
||||
#### 10.1.0
|
||||
* 26/02/2019
|
||||
* #122 Add custom `util.inspect()` function.
|
||||
* Add `Symbol.toStringTag`.
|
||||
* #121 Constructor: add range check for arguments of type number and Decimal.
|
||||
* Remove premable from uglifyjs build script.
|
||||
* Move *decimal.min.js.map* to root directory.
|
||||
|
||||
#### 10.0.2
|
||||
* 13/12/2018
|
||||
* #114 Remove soureMappingURL from *decimal.min.js*.
|
||||
* Remove *bower.json*.
|
||||
|
||||
#### 10.0.1
|
||||
* 24/05/2018
|
||||
* Add `browser` field to *package.json*.
|
||||
|
||||
#### 10.0.0
|
||||
* 10/03/2018
|
||||
* #88 `toNearest` to return the nearest multiple in the direction of the rounding mode.
|
||||
* #82 #91 `const` to `var`.
|
||||
* Add trigonometric precision limit explanantion to documentation.
|
||||
* Put global ts definitions in separate file (see *bignumber.js* #143).
|
||||
|
||||
#### 9.0.1
|
||||
* 15/12/2017
|
||||
* #80 Typings: correct return type.
|
||||
|
||||
#### 9.0.0
|
||||
* 14/12/2017
|
||||
* #78 Typings: remove `toFormat`.
|
||||
|
||||
#### 8.0.0
|
||||
* 10/12/2017
|
||||
* Correct typings: `toFraction` returns `Decimal[]`.
|
||||
* Type-checking: add `Decimal.isDecimal` method.
|
||||
* Enable configuration reset with `defaults: true`.
|
||||
* Add named export, Decimal, to *decimal.mjs*.
|
||||
|
||||
#### 7.5.1
|
||||
* 03/12/2017
|
||||
* Remove typo.
|
||||
|
||||
#### 7.5.0
|
||||
* 03/12/2017
|
||||
* Use TypeScript declarations outside modules.
|
||||
|
||||
#### 7.4.0
|
||||
* 25/11/2017
|
||||
* Add TypeScript typings.
|
||||
|
||||
#### 7.3.0
|
||||
* 26/09/2017
|
||||
* Rename *decimal.es6.js* to *decimal.mjs*.
|
||||
* Amend *.travis.yml*.
|
||||
|
||||
#### 7.2.4
|
||||
* 09/09/2017
|
||||
* Update docs regarding `global.crypto`.
|
||||
* Fix `import` issues.
|
||||
|
||||
#### 7.2.3
|
||||
* 27/06/2017
|
||||
* Bugfix: #58 `pow` sometimes throws when result is `Infinity`.
|
||||
|
||||
#### 7.2.2
|
||||
* 25/06/2017
|
||||
* Bugfix: #57 Powers of -1 for integers over `Number.MAX_SAFE_INTEGER`.
|
||||
|
||||
#### 7.2.1
|
||||
* 04/05/2017
|
||||
* Fix *README* badges.
|
||||
|
||||
#### 7.2.0
|
||||
* 09/04/2017
|
||||
* Add *decimal.es6.js*
|
||||
|
||||
#### 7.1.2
|
||||
* 05/04/2017
|
||||
* `Decimal.default` to `Decimal['default']` IE8 issue
|
||||
|
||||
#### 7.1.1
|
||||
* 10/01/2017
|
||||
* Remove duplicated for-loop
|
||||
* Minor refactoring
|
||||
|
||||
#### 7.1.0
|
||||
* 09/11/2016
|
||||
* Support ES6 imports.
|
||||
|
||||
#### 7.0.0
|
||||
* 09/11/2016
|
||||
* Remove `require('crypto')` - leave it to the user
|
||||
* Default `Decimal.crypto` to `false`
|
||||
* Add `Decimal.set` as `Decimal.config` alias
|
||||
|
||||
#### 6.0.0
|
||||
* 30/06/2016
|
||||
* Removed base-88 serialization format
|
||||
* Amended `toJSON` and removed `Decimal.fromJSON` accordingly
|
||||
|
||||
#### 5.0.8
|
||||
* 09/03/2016
|
||||
* Add newline to single test results
|
||||
* Correct year
|
||||
|
||||
#### 5.0.7
|
||||
* 29/02/2016
|
||||
* Add decimal.js-light link
|
||||
* Remove outdated example from docs
|
||||
|
||||
#### 5.0.6
|
||||
* 22/02/2016
|
||||
* Add bower.json
|
||||
|
||||
#### 5.0.5
|
||||
* 20/02/2016
|
||||
* Bugfix: #26 wrong precision applied
|
||||
|
||||
#### 5.0.4
|
||||
* 14/02/2016
|
||||
* Bugfix: #26 clone
|
||||
|
||||
#### 5.0.3
|
||||
* 06/02/2016
|
||||
* Refactor tests
|
||||
|
||||
#### 5.0.2
|
||||
* 05/02/2016
|
||||
* Added immutability tests
|
||||
* Minor *decimal.js* clean-up
|
||||
|
||||
#### 5.0.1
|
||||
* 28/01/2016
|
||||
* Bugfix: #20 cos mutates value
|
||||
* Add pi info to docs
|
||||
|
||||
#### 5.0.0
|
||||
* 25/01/2016
|
||||
* Added trigonometric functions and `cubeRoot` method
|
||||
* Added most of JavaScript's `Math` object methods as Decimal methods
|
||||
* Added `toBinary`, `toHexadecimal` and `toOctal` methods
|
||||
* Added `isPositive` method
|
||||
* Removed the 15 significant digit limit for numbers
|
||||
* `toFraction` now returns an array of two Decimals, not two strings
|
||||
* String values containing whitespace or a plus sign are no longer accepted
|
||||
* `valueOf` now returns `'-0'` for minus zero
|
||||
* `comparedTo` now returns `NaN` not `null` for comparisons with `NaN`
|
||||
* `Decimal.max` and `Decimal.min` no longer accept an array
|
||||
* The Decimal constructor and `toString` no longer accept a base argument
|
||||
* Binary, hexadecimal and octal prefixes are now recognised for string values
|
||||
* Removed `Decimal.errors` configuration property
|
||||
* Removed `toFormat` method
|
||||
* Removed `Decimal.ONE`
|
||||
* Renamed `exponential` method to `naturalExponential`
|
||||
* Renamed `Decimal.constructor` method to `Decimal.clone`
|
||||
* Simplified error handling and amended error messages
|
||||
* Refactored the test suite
|
||||
* `Decimal.crypto` is now `undefined` by default, and the `crypto` object will be used if available
|
||||
* Major internal refactoring
|
||||
* Removed *bower.json*
|
||||
|
||||
#### 4.0.2
|
||||
* 20/02/2015 Add bower.json. Add source map. Amend travis CI. Amend doc/comments
|
||||
|
||||
#### 4.0.1
|
||||
* 11/12/2014 Assign correct constructor when duplicating a Decimal
|
||||
|
||||
#### 4.0.0
|
||||
* 10/11/2014 `toFormat` amended to use `Decimal.format` object for more flexible configuration
|
||||
|
||||
#### 3.0.1
|
||||
* 8/06/2014 Surround crypto require in try catch. See issue #5
|
||||
|
||||
#### 3.0.0
|
||||
* 4/06/2014 `random` simplified. Major internal changes mean the properties of a Decimal must now be considered read-only
|
||||
|
||||
#### 2.1.0
|
||||
* 4/06/2014 Amend UMD
|
||||
|
||||
#### 2.0.3
|
||||
* 8/05/2014 Fix NaN toNumber
|
||||
|
||||
#### 2.0.2
|
||||
* 30/04/2014 Correct doc links
|
||||
|
||||
#### 2.0.1
|
||||
* 10/04/2014 Update npmignore
|
||||
|
||||
#### 2.0.0
|
||||
* 10/04/2014 Add `toSignificantDigits`
|
||||
* Remove `toInteger`
|
||||
* No arguments to `ceil`, `floor`, `round` and `trunc`
|
||||
|
||||
#### 1.0.1
|
||||
* 07/04/2014 Minor documentation clean-up
|
||||
|
||||
#### 1.0.0
|
||||
* 02/04/2014 Initial release
|
||||
#### 10.3.1
|
||||
* 25/06/2021
|
||||
* Remove minified versions. Refresh *README*.
|
||||
|
||||
#### 10.3.0
|
||||
* 22/06/2021
|
||||
* Support underscores as separators.
|
||||
* #101 Add `Decimal.clamp` method.
|
||||
* #161 Fix Decimal instances deemed plain objects.
|
||||
* #100 Add `Decimal.sum` method.
|
||||
* #146 `Symbol.for` to `Symbol['for']` for IE8.
|
||||
* #132 Fix possible infinite loop when `minE` is very low.
|
||||
* #180 Accept Decimals of different origin.
|
||||
* Update Typescript definitions.
|
||||
* Update minification examples in *README*.
|
||||
* Add minified versions for both *decimal.js* and *decimal.mjs*.
|
||||
* Add *files* field to *package.json*, and remove build script.
|
||||
|
||||
#### 10.2.1
|
||||
* 28/09/2020
|
||||
* Correct `sqrt` initial estimate.
|
||||
|
||||
#### 10.2.0
|
||||
* 08/05/2019
|
||||
* #128 Workaround V8 `Math.pow` change.
|
||||
* #93 Accept `+` prefix when parsing string values.
|
||||
* #129 Fix typo.
|
||||
|
||||
#### 10.1.1
|
||||
* 27/02/2019
|
||||
* Check `Symbol` properly.
|
||||
|
||||
#### 10.1.0
|
||||
* 26/02/2019
|
||||
* #122 Add custom `util.inspect()` function.
|
||||
* Add `Symbol.toStringTag`.
|
||||
* #121 Constructor: add range check for arguments of type number and Decimal.
|
||||
* Remove premable from uglifyjs build script.
|
||||
* Move *decimal.min.js.map* to root directory.
|
||||
|
||||
#### 10.0.2
|
||||
* 13/12/2018
|
||||
* #114 Remove soureMappingURL from *decimal.min.js*.
|
||||
* Remove *bower.json*.
|
||||
|
||||
#### 10.0.1
|
||||
* 24/05/2018
|
||||
* Add `browser` field to *package.json*.
|
||||
|
||||
#### 10.0.0
|
||||
* 10/03/2018
|
||||
* #88 `toNearest` to return the nearest multiple in the direction of the rounding mode.
|
||||
* #82 #91 `const` to `var`.
|
||||
* Add trigonometric precision limit explanantion to documentation.
|
||||
* Put global ts definitions in separate file (see *bignumber.js* #143).
|
||||
|
||||
#### 9.0.1
|
||||
* 15/12/2017
|
||||
* #80 Typings: correct return type.
|
||||
|
||||
#### 9.0.0
|
||||
* 14/12/2017
|
||||
* #78 Typings: remove `toFormat`.
|
||||
|
||||
#### 8.0.0
|
||||
* 10/12/2017
|
||||
* Correct typings: `toFraction` returns `Decimal[]`.
|
||||
* Type-checking: add `Decimal.isDecimal` method.
|
||||
* Enable configuration reset with `defaults: true`.
|
||||
* Add named export, Decimal, to *decimal.mjs*.
|
||||
|
||||
#### 7.5.1
|
||||
* 03/12/2017
|
||||
* Remove typo.
|
||||
|
||||
#### 7.5.0
|
||||
* 03/12/2017
|
||||
* Use TypeScript declarations outside modules.
|
||||
|
||||
#### 7.4.0
|
||||
* 25/11/2017
|
||||
* Add TypeScript typings.
|
||||
|
||||
#### 7.3.0
|
||||
* 26/09/2017
|
||||
* Rename *decimal.es6.js* to *decimal.mjs*.
|
||||
* Amend *.travis.yml*.
|
||||
|
||||
#### 7.2.4
|
||||
* 09/09/2017
|
||||
* Update docs regarding `global.crypto`.
|
||||
* Fix `import` issues.
|
||||
|
||||
#### 7.2.3
|
||||
* 27/06/2017
|
||||
* Bugfix: #58 `pow` sometimes throws when result is `Infinity`.
|
||||
|
||||
#### 7.2.2
|
||||
* 25/06/2017
|
||||
* Bugfix: #57 Powers of -1 for integers over `Number.MAX_SAFE_INTEGER`.
|
||||
|
||||
#### 7.2.1
|
||||
* 04/05/2017
|
||||
* Fix *README* badges.
|
||||
|
||||
#### 7.2.0
|
||||
* 09/04/2017
|
||||
* Add *decimal.es6.js*
|
||||
|
||||
#### 7.1.2
|
||||
* 05/04/2017
|
||||
* `Decimal.default` to `Decimal['default']` IE8 issue
|
||||
|
||||
#### 7.1.1
|
||||
* 10/01/2017
|
||||
* Remove duplicated for-loop
|
||||
* Minor refactoring
|
||||
|
||||
#### 7.1.0
|
||||
* 09/11/2016
|
||||
* Support ES6 imports.
|
||||
|
||||
#### 7.0.0
|
||||
* 09/11/2016
|
||||
* Remove `require('crypto')` - leave it to the user
|
||||
* Default `Decimal.crypto` to `false`
|
||||
* Add `Decimal.set` as `Decimal.config` alias
|
||||
|
||||
#### 6.0.0
|
||||
* 30/06/2016
|
||||
* Removed base-88 serialization format
|
||||
* Amended `toJSON` and removed `Decimal.fromJSON` accordingly
|
||||
|
||||
#### 5.0.8
|
||||
* 09/03/2016
|
||||
* Add newline to single test results
|
||||
* Correct year
|
||||
|
||||
#### 5.0.7
|
||||
* 29/02/2016
|
||||
* Add decimal.js-light link
|
||||
* Remove outdated example from docs
|
||||
|
||||
#### 5.0.6
|
||||
* 22/02/2016
|
||||
* Add bower.json
|
||||
|
||||
#### 5.0.5
|
||||
* 20/02/2016
|
||||
* Bugfix: #26 wrong precision applied
|
||||
|
||||
#### 5.0.4
|
||||
* 14/02/2016
|
||||
* Bugfix: #26 clone
|
||||
|
||||
#### 5.0.3
|
||||
* 06/02/2016
|
||||
* Refactor tests
|
||||
|
||||
#### 5.0.2
|
||||
* 05/02/2016
|
||||
* Added immutability tests
|
||||
* Minor *decimal.js* clean-up
|
||||
|
||||
#### 5.0.1
|
||||
* 28/01/2016
|
||||
* Bugfix: #20 cos mutates value
|
||||
* Add pi info to docs
|
||||
|
||||
#### 5.0.0
|
||||
* 25/01/2016
|
||||
* Added trigonometric functions and `cubeRoot` method
|
||||
* Added most of JavaScript's `Math` object methods as Decimal methods
|
||||
* Added `toBinary`, `toHexadecimal` and `toOctal` methods
|
||||
* Added `isPositive` method
|
||||
* Removed the 15 significant digit limit for numbers
|
||||
* `toFraction` now returns an array of two Decimals, not two strings
|
||||
* String values containing whitespace or a plus sign are no longer accepted
|
||||
* `valueOf` now returns `'-0'` for minus zero
|
||||
* `comparedTo` now returns `NaN` not `null` for comparisons with `NaN`
|
||||
* `Decimal.max` and `Decimal.min` no longer accept an array
|
||||
* The Decimal constructor and `toString` no longer accept a base argument
|
||||
* Binary, hexadecimal and octal prefixes are now recognised for string values
|
||||
* Removed `Decimal.errors` configuration property
|
||||
* Removed `toFormat` method
|
||||
* Removed `Decimal.ONE`
|
||||
* Renamed `exponential` method to `naturalExponential`
|
||||
* Renamed `Decimal.constructor` method to `Decimal.clone`
|
||||
* Simplified error handling and amended error messages
|
||||
* Refactored the test suite
|
||||
* `Decimal.crypto` is now `undefined` by default, and the `crypto` object will be used if available
|
||||
* Major internal refactoring
|
||||
* Removed *bower.json*
|
||||
|
||||
#### 4.0.2
|
||||
* 20/02/2015 Add bower.json. Add source map. Amend travis CI. Amend doc/comments
|
||||
|
||||
#### 4.0.1
|
||||
* 11/12/2014 Assign correct constructor when duplicating a Decimal
|
||||
|
||||
#### 4.0.0
|
||||
* 10/11/2014 `toFormat` amended to use `Decimal.format` object for more flexible configuration
|
||||
|
||||
#### 3.0.1
|
||||
* 8/06/2014 Surround crypto require in try catch. See issue #5
|
||||
|
||||
#### 3.0.0
|
||||
* 4/06/2014 `random` simplified. Major internal changes mean the properties of a Decimal must now be considered read-only
|
||||
|
||||
#### 2.1.0
|
||||
* 4/06/2014 Amend UMD
|
||||
|
||||
#### 2.0.3
|
||||
* 8/05/2014 Fix NaN toNumber
|
||||
|
||||
#### 2.0.2
|
||||
* 30/04/2014 Correct doc links
|
||||
|
||||
#### 2.0.1
|
||||
* 10/04/2014 Update npmignore
|
||||
|
||||
#### 2.0.0
|
||||
* 10/04/2014 Add `toSignificantDigits`
|
||||
* Remove `toInteger`
|
||||
* No arguments to `ceil`, `floor`, `round` and `trunc`
|
||||
|
||||
#### 1.0.1
|
||||
* 07/04/2014 Minor documentation clean-up
|
||||
|
||||
#### 1.0.0
|
||||
* 02/04/2014 Initial release
|
||||
|
||||
46
public/novnc/node_modules/decimal.js/LICENCE.md
generated
vendored
46
public/novnc/node_modules/decimal.js/LICENCE.md
generated
vendored
@@ -1,23 +1,23 @@
|
||||
The MIT Licence.
|
||||
|
||||
Copyright (c) 2021 Michael Mclaughlin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
The MIT Licence.
|
||||
|
||||
Copyright (c) 2021 Michael Mclaughlin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
492
public/novnc/node_modules/decimal.js/README.md
generated
vendored
492
public/novnc/node_modules/decimal.js/README.md
generated
vendored
@@ -1,246 +1,246 @@
|
||||

|
||||
|
||||
An arbitrary-precision Decimal type for JavaScript.
|
||||
|
||||
[](https://www.npmjs.com/package/decimal.js)
|
||||
[](https://www.npmjs.com/package/decimal.js)
|
||||
[](https://travis-ci.org/MikeMcl/decimal.js)
|
||||
[](https://cdnjs.com/libraries/decimal.js)
|
||||
|
||||
<br>
|
||||
|
||||
## Features
|
||||
|
||||
- Integers and floats
|
||||
- Simple but full-featured API
|
||||
- Replicates many of the methods of JavaScript's `Number.prototype` and `Math` objects
|
||||
- Also handles hexadecimal, binary and octal values
|
||||
- Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal
|
||||
- No dependencies
|
||||
- Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only
|
||||
- Comprehensive [documentation](https://mikemcl.github.io/decimal.js/) and test set
|
||||
- Used under the hood by [math.js](https://github.com/josdejong/mathjs)
|
||||
- Includes a TypeScript declaration file: *decimal.d.ts*
|
||||
|
||||

|
||||
|
||||
The library is similar to [bignumber.js](https://github.com/MikeMcl/bignumber.js/), but here
|
||||
precision is specified in terms of significant digits rather than decimal places, and all
|
||||
calculations are rounded to the precision (similar to Python's decimal module) rather than just
|
||||
those involving division.
|
||||
|
||||
This library also adds the trigonometric functions, among others, and supports non-integer powers,
|
||||
which makes it a significantly larger library than *bignumber.js* and the even smaller
|
||||
[big.js](https://github.com/MikeMcl/big.js/).
|
||||
|
||||
For a lighter version of this library without the trigonometric functions see
|
||||
[decimal.js-light](https://github.com/MikeMcl/decimal.js-light/).
|
||||
|
||||
## Load
|
||||
|
||||
The library is the single JavaScript file *decimal.js* or ES module *decimal.mjs*.
|
||||
|
||||
Browser:
|
||||
|
||||
```html
|
||||
<script src='path/to/decimal.js'></script>
|
||||
|
||||
<script type="module">
|
||||
import Decimal from './path/to/decimal.mjs';
|
||||
...
|
||||
</script>
|
||||
```
|
||||
|
||||
[Node.js](https://nodejs.org):
|
||||
|
||||
```bash
|
||||
npm install decimal.js
|
||||
```
|
||||
```js
|
||||
const Decimal = require('decimal.js');
|
||||
|
||||
import Decimal from 'decimal.js';
|
||||
|
||||
import {Decimal} from 'decimal.js';
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
*In all examples below, semicolons and `toString` calls are not shown.
|
||||
If a commented-out value is in quotes it means `toString` has been called on the preceding expression.*
|
||||
|
||||
The library exports a single constructor function, `Decimal`, which expects a single argument that is a number, string or Decimal instance.
|
||||
|
||||
```js
|
||||
x = new Decimal(123.4567)
|
||||
y = new Decimal('123456.7e-3')
|
||||
z = new Decimal(x)
|
||||
x.equals(y) && y.equals(z) && x.equals(z) // true
|
||||
```
|
||||
|
||||
If using values with more than a few digits, it is recommended to pass strings rather than numbers to avoid a potential loss of precision.
|
||||
|
||||
```js
|
||||
// Precision loss from using numeric literals with more than 15 significant digits.
|
||||
new Decimal(1.0000000000000001) // '1'
|
||||
new Decimal(88259496234518.57) // '88259496234518.56'
|
||||
new Decimal(99999999999999999999) // '100000000000000000000'
|
||||
|
||||
// Precision loss from using numeric literals outside the range of Number values.
|
||||
new Decimal(2e+308) // 'Infinity'
|
||||
new Decimal(1e-324) // '0'
|
||||
|
||||
// Precision loss from the unexpected result of arithmetic with Number values.
|
||||
new Decimal(0.7 + 0.1) // '0.7999999999999999'
|
||||
```
|
||||
|
||||
As with JavaScript numbers, strings can contain underscores as separators to improve readability.
|
||||
|
||||
```js
|
||||
x = new Decimal('2_147_483_647')
|
||||
```
|
||||
|
||||
String values in binary, hexadecimal or octal notation are also accepted if the appropriate prefix is included.
|
||||
|
||||
```js
|
||||
x = new Decimal('0xff.f') // '255.9375'
|
||||
y = new Decimal('0b10101100') // '172'
|
||||
z = x.plus(y) // '427.9375'
|
||||
|
||||
z.toBinary() // '0b110101011.1111'
|
||||
z.toBinary(13) // '0b1.101010111111p+8'
|
||||
|
||||
// Using binary exponential notation to create a Decimal with the value of `Number.MAX_VALUE`.
|
||||
x = new Decimal('0b1.1111111111111111111111111111111111111111111111111111p+1023')
|
||||
// '1.7976931348623157081e+308'
|
||||
```
|
||||
|
||||
Decimal instances are immutable in the sense that they are not changed by their methods.
|
||||
|
||||
```js
|
||||
0.3 - 0.1 // 0.19999999999999998
|
||||
x = new Decimal(0.3)
|
||||
x.minus(0.1) // '0.2'
|
||||
x // '0.3'
|
||||
```
|
||||
|
||||
The methods that return a Decimal can be chained.
|
||||
|
||||
```js
|
||||
x.dividedBy(y).plus(z).times(9).floor()
|
||||
x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()
|
||||
```
|
||||
|
||||
Many method names have a shorter alias.
|
||||
|
||||
```js
|
||||
x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true
|
||||
x.comparedTo(y.modulo(z).negated() === x.cmp(y.mod(z).neg()) // true
|
||||
```
|
||||
|
||||
Most of the methods of JavaScript's `Number.prototype` and `Math` objects are replicated.
|
||||
|
||||
```js
|
||||
x = new Decimal(255.5)
|
||||
x.toExponential(5) // '2.55500e+2'
|
||||
x.toFixed(5) // '255.50000'
|
||||
x.toPrecision(5) // '255.50'
|
||||
|
||||
Decimal.sqrt('6.98372465832e+9823') // '8.3568682281821340204e+4911'
|
||||
Decimal.pow(2, 0.0979843) // '1.0702770511687781839'
|
||||
|
||||
// Using `toFixed()` to avoid exponential notation:
|
||||
x = new Decimal('0.0000001')
|
||||
x.toString() // '1e-7'
|
||||
x.toFixed() // '0.0000001'
|
||||
```
|
||||
|
||||
And there are `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `Decimal` values.
|
||||
|
||||
```js
|
||||
x = new Decimal(NaN) // 'NaN'
|
||||
y = new Decimal(Infinity) // 'Infinity'
|
||||
x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true
|
||||
```
|
||||
|
||||
There is also a `toFraction` method with an optional *maximum denominator* argument.
|
||||
|
||||
```js
|
||||
z = new Decimal(355)
|
||||
pi = z.dividedBy(113) // '3.1415929204'
|
||||
pi.toFraction() // [ '7853982301', '2500000000' ]
|
||||
pi.toFraction(1000) // [ '355', '113' ]
|
||||
```
|
||||
|
||||
All calculations are rounded according to the number of significant digits and rounding mode specified
|
||||
by the `precision` and `rounding` properties of the Decimal constructor.
|
||||
|
||||
For advanced usage, multiple Decimal constructors can be created, each with their own independent
|
||||
configuration which applies to all Decimal numbers created from it.
|
||||
|
||||
```js
|
||||
// Set the precision and rounding of the default Decimal constructor
|
||||
Decimal.set({ precision: 5, rounding: 4 })
|
||||
|
||||
// Create another Decimal constructor, optionally passing in a configuration object
|
||||
Dec = Decimal.clone({ precision: 9, rounding: 1 })
|
||||
|
||||
x = new Decimal(5)
|
||||
y = new Dec(5)
|
||||
|
||||
x.div(3) // '1.6667'
|
||||
y.div(3) // '1.66666666'
|
||||
```
|
||||
|
||||
The value of a Decimal is stored in a floating point format in terms of its digits, exponent and sign, but these properties should be considered read-only.
|
||||
|
||||
```js
|
||||
x = new Decimal(-12345.67);
|
||||
x.d // [ 12345, 6700000 ] digits (base 10000000)
|
||||
x.e // 4 exponent (base 10)
|
||||
x.s // -1 sign
|
||||
```
|
||||
|
||||
For further information see the [API](http://mikemcl.github.io/decimal.js/) reference in the *doc* directory.
|
||||
|
||||
## Test
|
||||
|
||||
To run the tests using Node.js from the root directory:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
Each separate test module can also be executed individually, for example:
|
||||
|
||||
```bash
|
||||
node test/modules/toFraction
|
||||
```
|
||||
|
||||
To run the tests in a browser, open *test/test.html*.
|
||||
|
||||
## Minify
|
||||
|
||||
Two minification examples:
|
||||
|
||||
Using [uglify-js](https://github.com/mishoo/UglifyJS) to minify the *decimal.js* file:
|
||||
|
||||
```bash
|
||||
npm install uglify-js -g
|
||||
uglifyjs decimal.js --source-map url=decimal.min.js.map -c -m -o decimal.min.js
|
||||
```
|
||||
|
||||
Using [terser](https://github.com/terser/terser) to minify the ES module version, *decimal.mjs*:
|
||||
|
||||
```bash
|
||||
npm install terser -g
|
||||
terser decimal.mjs --source-map url=decimal.min.mjs.map -c -m --toplevel -o decimal.min.mjs
|
||||
```
|
||||
|
||||
```js
|
||||
import Decimal from './decimal.min.mjs';
|
||||
```
|
||||
|
||||
## Licence
|
||||
|
||||
[The MIT Licence (Expat).](LICENCE.md)
|
||||

|
||||
|
||||
An arbitrary-precision Decimal type for JavaScript.
|
||||
|
||||
[](https://www.npmjs.com/package/decimal.js)
|
||||
[](https://www.npmjs.com/package/decimal.js)
|
||||
[](https://travis-ci.org/MikeMcl/decimal.js)
|
||||
[](https://cdnjs.com/libraries/decimal.js)
|
||||
|
||||
<br>
|
||||
|
||||
## Features
|
||||
|
||||
- Integers and floats
|
||||
- Simple but full-featured API
|
||||
- Replicates many of the methods of JavaScript's `Number.prototype` and `Math` objects
|
||||
- Also handles hexadecimal, binary and octal values
|
||||
- Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal
|
||||
- No dependencies
|
||||
- Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only
|
||||
- Comprehensive [documentation](https://mikemcl.github.io/decimal.js/) and test set
|
||||
- Used under the hood by [math.js](https://github.com/josdejong/mathjs)
|
||||
- Includes a TypeScript declaration file: *decimal.d.ts*
|
||||
|
||||

|
||||
|
||||
The library is similar to [bignumber.js](https://github.com/MikeMcl/bignumber.js/), but here
|
||||
precision is specified in terms of significant digits rather than decimal places, and all
|
||||
calculations are rounded to the precision (similar to Python's decimal module) rather than just
|
||||
those involving division.
|
||||
|
||||
This library also adds the trigonometric functions, among others, and supports non-integer powers,
|
||||
which makes it a significantly larger library than *bignumber.js* and the even smaller
|
||||
[big.js](https://github.com/MikeMcl/big.js/).
|
||||
|
||||
For a lighter version of this library without the trigonometric functions see
|
||||
[decimal.js-light](https://github.com/MikeMcl/decimal.js-light/).
|
||||
|
||||
## Load
|
||||
|
||||
The library is the single JavaScript file *decimal.js* or ES module *decimal.mjs*.
|
||||
|
||||
Browser:
|
||||
|
||||
```html
|
||||
<script src='path/to/decimal.js'></script>
|
||||
|
||||
<script type="module">
|
||||
import Decimal from './path/to/decimal.mjs';
|
||||
...
|
||||
</script>
|
||||
```
|
||||
|
||||
[Node.js](https://nodejs.org):
|
||||
|
||||
```bash
|
||||
npm install decimal.js
|
||||
```
|
||||
```js
|
||||
const Decimal = require('decimal.js');
|
||||
|
||||
import Decimal from 'decimal.js';
|
||||
|
||||
import {Decimal} from 'decimal.js';
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
*In all examples below, semicolons and `toString` calls are not shown.
|
||||
If a commented-out value is in quotes it means `toString` has been called on the preceding expression.*
|
||||
|
||||
The library exports a single constructor function, `Decimal`, which expects a single argument that is a number, string or Decimal instance.
|
||||
|
||||
```js
|
||||
x = new Decimal(123.4567)
|
||||
y = new Decimal('123456.7e-3')
|
||||
z = new Decimal(x)
|
||||
x.equals(y) && y.equals(z) && x.equals(z) // true
|
||||
```
|
||||
|
||||
If using values with more than a few digits, it is recommended to pass strings rather than numbers to avoid a potential loss of precision.
|
||||
|
||||
```js
|
||||
// Precision loss from using numeric literals with more than 15 significant digits.
|
||||
new Decimal(1.0000000000000001) // '1'
|
||||
new Decimal(88259496234518.57) // '88259496234518.56'
|
||||
new Decimal(99999999999999999999) // '100000000000000000000'
|
||||
|
||||
// Precision loss from using numeric literals outside the range of Number values.
|
||||
new Decimal(2e+308) // 'Infinity'
|
||||
new Decimal(1e-324) // '0'
|
||||
|
||||
// Precision loss from the unexpected result of arithmetic with Number values.
|
||||
new Decimal(0.7 + 0.1) // '0.7999999999999999'
|
||||
```
|
||||
|
||||
As with JavaScript numbers, strings can contain underscores as separators to improve readability.
|
||||
|
||||
```js
|
||||
x = new Decimal('2_147_483_647')
|
||||
```
|
||||
|
||||
String values in binary, hexadecimal or octal notation are also accepted if the appropriate prefix is included.
|
||||
|
||||
```js
|
||||
x = new Decimal('0xff.f') // '255.9375'
|
||||
y = new Decimal('0b10101100') // '172'
|
||||
z = x.plus(y) // '427.9375'
|
||||
|
||||
z.toBinary() // '0b110101011.1111'
|
||||
z.toBinary(13) // '0b1.101010111111p+8'
|
||||
|
||||
// Using binary exponential notation to create a Decimal with the value of `Number.MAX_VALUE`.
|
||||
x = new Decimal('0b1.1111111111111111111111111111111111111111111111111111p+1023')
|
||||
// '1.7976931348623157081e+308'
|
||||
```
|
||||
|
||||
Decimal instances are immutable in the sense that they are not changed by their methods.
|
||||
|
||||
```js
|
||||
0.3 - 0.1 // 0.19999999999999998
|
||||
x = new Decimal(0.3)
|
||||
x.minus(0.1) // '0.2'
|
||||
x // '0.3'
|
||||
```
|
||||
|
||||
The methods that return a Decimal can be chained.
|
||||
|
||||
```js
|
||||
x.dividedBy(y).plus(z).times(9).floor()
|
||||
x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()
|
||||
```
|
||||
|
||||
Many method names have a shorter alias.
|
||||
|
||||
```js
|
||||
x.squareRoot().dividedBy(y).toPower(3).equals(x.sqrt().div(y).pow(3)) // true
|
||||
x.comparedTo(y.modulo(z).negated() === x.cmp(y.mod(z).neg()) // true
|
||||
```
|
||||
|
||||
Most of the methods of JavaScript's `Number.prototype` and `Math` objects are replicated.
|
||||
|
||||
```js
|
||||
x = new Decimal(255.5)
|
||||
x.toExponential(5) // '2.55500e+2'
|
||||
x.toFixed(5) // '255.50000'
|
||||
x.toPrecision(5) // '255.50'
|
||||
|
||||
Decimal.sqrt('6.98372465832e+9823') // '8.3568682281821340204e+4911'
|
||||
Decimal.pow(2, 0.0979843) // '1.0702770511687781839'
|
||||
|
||||
// Using `toFixed()` to avoid exponential notation:
|
||||
x = new Decimal('0.0000001')
|
||||
x.toString() // '1e-7'
|
||||
x.toFixed() // '0.0000001'
|
||||
```
|
||||
|
||||
And there are `isNaN` and `isFinite` methods, as `NaN` and `Infinity` are valid `Decimal` values.
|
||||
|
||||
```js
|
||||
x = new Decimal(NaN) // 'NaN'
|
||||
y = new Decimal(Infinity) // 'Infinity'
|
||||
x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true
|
||||
```
|
||||
|
||||
There is also a `toFraction` method with an optional *maximum denominator* argument.
|
||||
|
||||
```js
|
||||
z = new Decimal(355)
|
||||
pi = z.dividedBy(113) // '3.1415929204'
|
||||
pi.toFraction() // [ '7853982301', '2500000000' ]
|
||||
pi.toFraction(1000) // [ '355', '113' ]
|
||||
```
|
||||
|
||||
All calculations are rounded according to the number of significant digits and rounding mode specified
|
||||
by the `precision` and `rounding` properties of the Decimal constructor.
|
||||
|
||||
For advanced usage, multiple Decimal constructors can be created, each with their own independent
|
||||
configuration which applies to all Decimal numbers created from it.
|
||||
|
||||
```js
|
||||
// Set the precision and rounding of the default Decimal constructor
|
||||
Decimal.set({ precision: 5, rounding: 4 })
|
||||
|
||||
// Create another Decimal constructor, optionally passing in a configuration object
|
||||
Dec = Decimal.clone({ precision: 9, rounding: 1 })
|
||||
|
||||
x = new Decimal(5)
|
||||
y = new Dec(5)
|
||||
|
||||
x.div(3) // '1.6667'
|
||||
y.div(3) // '1.66666666'
|
||||
```
|
||||
|
||||
The value of a Decimal is stored in a floating point format in terms of its digits, exponent and sign, but these properties should be considered read-only.
|
||||
|
||||
```js
|
||||
x = new Decimal(-12345.67);
|
||||
x.d // [ 12345, 6700000 ] digits (base 10000000)
|
||||
x.e // 4 exponent (base 10)
|
||||
x.s // -1 sign
|
||||
```
|
||||
|
||||
For further information see the [API](http://mikemcl.github.io/decimal.js/) reference in the *doc* directory.
|
||||
|
||||
## Test
|
||||
|
||||
To run the tests using Node.js from the root directory:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
Each separate test module can also be executed individually, for example:
|
||||
|
||||
```bash
|
||||
node test/modules/toFraction
|
||||
```
|
||||
|
||||
To run the tests in a browser, open *test/test.html*.
|
||||
|
||||
## Minify
|
||||
|
||||
Two minification examples:
|
||||
|
||||
Using [uglify-js](https://github.com/mishoo/UglifyJS) to minify the *decimal.js* file:
|
||||
|
||||
```bash
|
||||
npm install uglify-js -g
|
||||
uglifyjs decimal.js --source-map url=decimal.min.js.map -c -m -o decimal.min.js
|
||||
```
|
||||
|
||||
Using [terser](https://github.com/terser/terser) to minify the ES module version, *decimal.mjs*:
|
||||
|
||||
```bash
|
||||
npm install terser -g
|
||||
terser decimal.mjs --source-map url=decimal.min.mjs.map -c -m --toplevel -o decimal.min.mjs
|
||||
```
|
||||
|
||||
```js
|
||||
import Decimal from './decimal.min.mjs';
|
||||
```
|
||||
|
||||
## Licence
|
||||
|
||||
[The MIT Licence (Expat).](LICENCE.md)
|
||||
|
||||
600
public/novnc/node_modules/decimal.js/decimal.d.ts
generated
vendored
600
public/novnc/node_modules/decimal.js/decimal.d.ts
generated
vendored
@@ -1,300 +1,300 @@
|
||||
// Type definitions for decimal.js >=7.0.0
|
||||
// Project: https://github.com/MikeMcl/decimal.js
|
||||
// Definitions by: Michael Mclaughlin <https://github.com/MikeMcl>
|
||||
// Definitions: https://github.com/MikeMcl/decimal.js
|
||||
//
|
||||
// Documentation: http://mikemcl.github.io/decimal.js/
|
||||
//
|
||||
// Exports:
|
||||
//
|
||||
// class Decimal (default export)
|
||||
// type Decimal.Constructor
|
||||
// type Decimal.Instance
|
||||
// type Decimal.Modulo
|
||||
// type Decimal.Rounding
|
||||
// type Decimal.Value
|
||||
// interface Decimal.Config
|
||||
//
|
||||
// Example (alternative syntax commented-out):
|
||||
//
|
||||
// import {Decimal} from "decimal.js"
|
||||
// //import Decimal from "decimal.js"
|
||||
//
|
||||
// let r: Decimal.Rounding = Decimal.ROUND_UP;
|
||||
// let c: Decimal.Configuration = {precision: 4, rounding: r};
|
||||
// Decimal.set(c);
|
||||
// let v: Decimal.Value = '12345.6789';
|
||||
// let d: Decimal = new Decimal(v);
|
||||
// //let d: Decimal.Instance = new Decimal(v);
|
||||
//
|
||||
// The use of compiler option `--strictNullChecks` is recommended.
|
||||
|
||||
export default Decimal;
|
||||
|
||||
export namespace Decimal {
|
||||
export type Constructor = typeof Decimal;
|
||||
export type Instance = Decimal;
|
||||
export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
||||
export type Modulo = Rounding | 9;
|
||||
export type Value = string | number | Decimal;
|
||||
|
||||
// http://mikemcl.github.io/decimal.js/#constructor-properties
|
||||
export interface Config {
|
||||
precision?: number;
|
||||
rounding?: Rounding;
|
||||
toExpNeg?: number;
|
||||
toExpPos?: number;
|
||||
minE?: number;
|
||||
maxE?: number;
|
||||
crypto?: boolean;
|
||||
modulo?: Modulo;
|
||||
defaults?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
export declare class Decimal {
|
||||
readonly d: number[];
|
||||
readonly e: number;
|
||||
readonly s: number;
|
||||
private readonly toStringTag: string;
|
||||
|
||||
constructor(n: Decimal.Value);
|
||||
|
||||
absoluteValue(): Decimal;
|
||||
abs(): Decimal;
|
||||
|
||||
ceil(): Decimal;
|
||||
|
||||
clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
clamp(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
|
||||
comparedTo(n: Decimal.Value): number;
|
||||
cmp(n: Decimal.Value): number;
|
||||
|
||||
cosine(): Decimal;
|
||||
cos(): Decimal;
|
||||
|
||||
cubeRoot(): Decimal;
|
||||
cbrt(): Decimal;
|
||||
|
||||
decimalPlaces(): number;
|
||||
dp(): number;
|
||||
|
||||
dividedBy(n: Decimal.Value): Decimal;
|
||||
div(n: Decimal.Value): Decimal;
|
||||
|
||||
dividedToIntegerBy(n: Decimal.Value): Decimal;
|
||||
divToInt(n: Decimal.Value): Decimal;
|
||||
|
||||
equals(n: Decimal.Value): boolean;
|
||||
eq(n: Decimal.Value): boolean;
|
||||
|
||||
floor(): Decimal;
|
||||
|
||||
greaterThan(n: Decimal.Value): boolean;
|
||||
gt(n: Decimal.Value): boolean;
|
||||
|
||||
greaterThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
gte(n: Decimal.Value): boolean;
|
||||
|
||||
hyperbolicCosine(): Decimal;
|
||||
cosh(): Decimal;
|
||||
|
||||
hyperbolicSine(): Decimal;
|
||||
sinh(): Decimal;
|
||||
|
||||
hyperbolicTangent(): Decimal;
|
||||
tanh(): Decimal;
|
||||
|
||||
inverseCosine(): Decimal;
|
||||
acos(): Decimal;
|
||||
|
||||
inverseHyperbolicCosine(): Decimal;
|
||||
acosh(): Decimal;
|
||||
|
||||
inverseHyperbolicSine(): Decimal;
|
||||
asinh(): Decimal;
|
||||
|
||||
inverseHyperbolicTangent(): Decimal;
|
||||
atanh(): Decimal;
|
||||
|
||||
inverseSine(): Decimal;
|
||||
asin(): Decimal;
|
||||
|
||||
inverseTangent(): Decimal;
|
||||
atan(): Decimal;
|
||||
|
||||
isFinite(): boolean;
|
||||
|
||||
isInteger(): boolean;
|
||||
isInt(): boolean;
|
||||
|
||||
isNaN(): boolean;
|
||||
|
||||
isNegative(): boolean;
|
||||
isNeg(): boolean;
|
||||
|
||||
isPositive(): boolean;
|
||||
isPos(): boolean;
|
||||
|
||||
isZero(): boolean;
|
||||
|
||||
lessThan(n: Decimal.Value): boolean;
|
||||
lt(n: Decimal.Value): boolean;
|
||||
|
||||
lessThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
lte(n: Decimal.Value): boolean;
|
||||
|
||||
logarithm(n?: Decimal.Value): Decimal;
|
||||
log(n?: Decimal.Value): Decimal;
|
||||
|
||||
minus(n: Decimal.Value): Decimal;
|
||||
sub(n: Decimal.Value): Decimal;
|
||||
|
||||
modulo(n: Decimal.Value): Decimal;
|
||||
mod(n: Decimal.Value): Decimal;
|
||||
|
||||
naturalExponential(): Decimal;
|
||||
exp(): Decimal;
|
||||
|
||||
naturalLogarithm(): Decimal;
|
||||
ln(): Decimal;
|
||||
|
||||
negated(): Decimal;
|
||||
neg(): Decimal;
|
||||
|
||||
plus(n: Decimal.Value): Decimal;
|
||||
add(n: Decimal.Value): Decimal;
|
||||
|
||||
precision(includeZeros?: boolean): number;
|
||||
sd(includeZeros?: boolean): number;
|
||||
|
||||
round(): Decimal;
|
||||
|
||||
sine() : Decimal;
|
||||
sin() : Decimal;
|
||||
|
||||
squareRoot(): Decimal;
|
||||
sqrt(): Decimal;
|
||||
|
||||
tangent() : Decimal;
|
||||
tan() : Decimal;
|
||||
|
||||
times(n: Decimal.Value): Decimal;
|
||||
mul(n: Decimal.Value) : Decimal;
|
||||
|
||||
toBinary(significantDigits?: number): string;
|
||||
toBinary(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toDecimalPlaces(decimalPlaces?: number): Decimal;
|
||||
toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
toDP(decimalPlaces?: number): Decimal;
|
||||
toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toExponential(decimalPlaces?: number): string;
|
||||
toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFixed(decimalPlaces?: number): string;
|
||||
toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFraction(max_denominator?: Decimal.Value): Decimal[];
|
||||
|
||||
toHexadecimal(significantDigits?: number): string;
|
||||
toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
toHex(significantDigits?: number): string;
|
||||
toHex(significantDigits: number, rounding?: Decimal.Rounding): string;
|
||||
|
||||
toJSON(): string;
|
||||
|
||||
toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;
|
||||
|
||||
toNumber(): number;
|
||||
|
||||
toOctal(significantDigits?: number): string;
|
||||
toOctal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toPower(n: Decimal.Value): Decimal;
|
||||
pow(n: Decimal.Value): Decimal;
|
||||
|
||||
toPrecision(significantDigits?: number): string;
|
||||
toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toSignificantDigits(significantDigits?: number): Decimal;
|
||||
toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
toSD(significantDigits?: number): Decimal;
|
||||
toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toString(): string;
|
||||
|
||||
truncated(): Decimal;
|
||||
trunc(): Decimal;
|
||||
|
||||
valueOf(): string;
|
||||
|
||||
static abs(n: Decimal.Value): Decimal;
|
||||
static acos(n: Decimal.Value): Decimal;
|
||||
static acosh(n: Decimal.Value): Decimal;
|
||||
static add(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static asin(n: Decimal.Value): Decimal;
|
||||
static asinh(n: Decimal.Value): Decimal;
|
||||
static atan(n: Decimal.Value): Decimal;
|
||||
static atanh(n: Decimal.Value): Decimal;
|
||||
static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;
|
||||
static cbrt(n: Decimal.Value): Decimal;
|
||||
static ceil(n: Decimal.Value): Decimal;
|
||||
static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
static clone(object?: Decimal.Config): Decimal.Constructor;
|
||||
static config(object: Decimal.Config): Decimal.Constructor;
|
||||
static cos(n: Decimal.Value): Decimal;
|
||||
static cosh(n: Decimal.Value): Decimal;
|
||||
static div(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static exp(n: Decimal.Value): Decimal;
|
||||
static floor(n: Decimal.Value): Decimal;
|
||||
static hypot(...n: Decimal.Value[]): Decimal;
|
||||
static isDecimal(object: any): boolean
|
||||
static ln(n: Decimal.Value): Decimal;
|
||||
static log(n: Decimal.Value, base?: Decimal.Value): Decimal;
|
||||
static log2(n: Decimal.Value): Decimal;
|
||||
static log10(n: Decimal.Value): Decimal;
|
||||
static max(...n: Decimal.Value[]): Decimal;
|
||||
static min(...n: Decimal.Value[]): Decimal;
|
||||
static mod(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static mul(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static noConflict(): Decimal.Constructor; // Browser only
|
||||
static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;
|
||||
static random(significantDigits?: number): Decimal;
|
||||
static round(n: Decimal.Value): Decimal;
|
||||
static set(object: Decimal.Config): Decimal.Constructor;
|
||||
static sign(n: Decimal.Value): Decimal;
|
||||
static sin(n: Decimal.Value): Decimal;
|
||||
static sinh(n: Decimal.Value): Decimal;
|
||||
static sqrt(n: Decimal.Value): Decimal;
|
||||
static sub(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static sum(...n: Decimal.Value[]): Decimal;
|
||||
static tan(n: Decimal.Value): Decimal;
|
||||
static tanh(n: Decimal.Value): Decimal;
|
||||
static trunc(n: Decimal.Value): Decimal;
|
||||
|
||||
static readonly default?: Decimal.Constructor;
|
||||
static readonly Decimal?: Decimal.Constructor;
|
||||
|
||||
static readonly precision: number;
|
||||
static readonly rounding: Decimal.Rounding;
|
||||
static readonly toExpNeg: number;
|
||||
static readonly toExpPos: number;
|
||||
static readonly minE: number;
|
||||
static readonly maxE: number;
|
||||
static readonly crypto: boolean;
|
||||
static readonly modulo: Decimal.Modulo;
|
||||
|
||||
static readonly ROUND_UP: 0;
|
||||
static readonly ROUND_DOWN: 1;
|
||||
static readonly ROUND_CEIL: 2;
|
||||
static readonly ROUND_FLOOR: 3;
|
||||
static readonly ROUND_HALF_UP: 4;
|
||||
static readonly ROUND_HALF_DOWN: 5;
|
||||
static readonly ROUND_HALF_EVEN: 6;
|
||||
static readonly ROUND_HALF_CEIL: 7;
|
||||
static readonly ROUND_HALF_FLOOR: 8;
|
||||
static readonly EUCLID: 9;
|
||||
}
|
||||
// Type definitions for decimal.js >=7.0.0
|
||||
// Project: https://github.com/MikeMcl/decimal.js
|
||||
// Definitions by: Michael Mclaughlin <https://github.com/MikeMcl>
|
||||
// Definitions: https://github.com/MikeMcl/decimal.js
|
||||
//
|
||||
// Documentation: http://mikemcl.github.io/decimal.js/
|
||||
//
|
||||
// Exports:
|
||||
//
|
||||
// class Decimal (default export)
|
||||
// type Decimal.Constructor
|
||||
// type Decimal.Instance
|
||||
// type Decimal.Modulo
|
||||
// type Decimal.Rounding
|
||||
// type Decimal.Value
|
||||
// interface Decimal.Config
|
||||
//
|
||||
// Example (alternative syntax commented-out):
|
||||
//
|
||||
// import {Decimal} from "decimal.js"
|
||||
// //import Decimal from "decimal.js"
|
||||
//
|
||||
// let r: Decimal.Rounding = Decimal.ROUND_UP;
|
||||
// let c: Decimal.Configuration = {precision: 4, rounding: r};
|
||||
// Decimal.set(c);
|
||||
// let v: Decimal.Value = '12345.6789';
|
||||
// let d: Decimal = new Decimal(v);
|
||||
// //let d: Decimal.Instance = new Decimal(v);
|
||||
//
|
||||
// The use of compiler option `--strictNullChecks` is recommended.
|
||||
|
||||
export default Decimal;
|
||||
|
||||
export namespace Decimal {
|
||||
export type Constructor = typeof Decimal;
|
||||
export type Instance = Decimal;
|
||||
export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
||||
export type Modulo = Rounding | 9;
|
||||
export type Value = string | number | Decimal;
|
||||
|
||||
// http://mikemcl.github.io/decimal.js/#constructor-properties
|
||||
export interface Config {
|
||||
precision?: number;
|
||||
rounding?: Rounding;
|
||||
toExpNeg?: number;
|
||||
toExpPos?: number;
|
||||
minE?: number;
|
||||
maxE?: number;
|
||||
crypto?: boolean;
|
||||
modulo?: Modulo;
|
||||
defaults?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
export declare class Decimal {
|
||||
readonly d: number[];
|
||||
readonly e: number;
|
||||
readonly s: number;
|
||||
private readonly toStringTag: string;
|
||||
|
||||
constructor(n: Decimal.Value);
|
||||
|
||||
absoluteValue(): Decimal;
|
||||
abs(): Decimal;
|
||||
|
||||
ceil(): Decimal;
|
||||
|
||||
clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
clamp(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
|
||||
comparedTo(n: Decimal.Value): number;
|
||||
cmp(n: Decimal.Value): number;
|
||||
|
||||
cosine(): Decimal;
|
||||
cos(): Decimal;
|
||||
|
||||
cubeRoot(): Decimal;
|
||||
cbrt(): Decimal;
|
||||
|
||||
decimalPlaces(): number;
|
||||
dp(): number;
|
||||
|
||||
dividedBy(n: Decimal.Value): Decimal;
|
||||
div(n: Decimal.Value): Decimal;
|
||||
|
||||
dividedToIntegerBy(n: Decimal.Value): Decimal;
|
||||
divToInt(n: Decimal.Value): Decimal;
|
||||
|
||||
equals(n: Decimal.Value): boolean;
|
||||
eq(n: Decimal.Value): boolean;
|
||||
|
||||
floor(): Decimal;
|
||||
|
||||
greaterThan(n: Decimal.Value): boolean;
|
||||
gt(n: Decimal.Value): boolean;
|
||||
|
||||
greaterThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
gte(n: Decimal.Value): boolean;
|
||||
|
||||
hyperbolicCosine(): Decimal;
|
||||
cosh(): Decimal;
|
||||
|
||||
hyperbolicSine(): Decimal;
|
||||
sinh(): Decimal;
|
||||
|
||||
hyperbolicTangent(): Decimal;
|
||||
tanh(): Decimal;
|
||||
|
||||
inverseCosine(): Decimal;
|
||||
acos(): Decimal;
|
||||
|
||||
inverseHyperbolicCosine(): Decimal;
|
||||
acosh(): Decimal;
|
||||
|
||||
inverseHyperbolicSine(): Decimal;
|
||||
asinh(): Decimal;
|
||||
|
||||
inverseHyperbolicTangent(): Decimal;
|
||||
atanh(): Decimal;
|
||||
|
||||
inverseSine(): Decimal;
|
||||
asin(): Decimal;
|
||||
|
||||
inverseTangent(): Decimal;
|
||||
atan(): Decimal;
|
||||
|
||||
isFinite(): boolean;
|
||||
|
||||
isInteger(): boolean;
|
||||
isInt(): boolean;
|
||||
|
||||
isNaN(): boolean;
|
||||
|
||||
isNegative(): boolean;
|
||||
isNeg(): boolean;
|
||||
|
||||
isPositive(): boolean;
|
||||
isPos(): boolean;
|
||||
|
||||
isZero(): boolean;
|
||||
|
||||
lessThan(n: Decimal.Value): boolean;
|
||||
lt(n: Decimal.Value): boolean;
|
||||
|
||||
lessThanOrEqualTo(n: Decimal.Value): boolean;
|
||||
lte(n: Decimal.Value): boolean;
|
||||
|
||||
logarithm(n?: Decimal.Value): Decimal;
|
||||
log(n?: Decimal.Value): Decimal;
|
||||
|
||||
minus(n: Decimal.Value): Decimal;
|
||||
sub(n: Decimal.Value): Decimal;
|
||||
|
||||
modulo(n: Decimal.Value): Decimal;
|
||||
mod(n: Decimal.Value): Decimal;
|
||||
|
||||
naturalExponential(): Decimal;
|
||||
exp(): Decimal;
|
||||
|
||||
naturalLogarithm(): Decimal;
|
||||
ln(): Decimal;
|
||||
|
||||
negated(): Decimal;
|
||||
neg(): Decimal;
|
||||
|
||||
plus(n: Decimal.Value): Decimal;
|
||||
add(n: Decimal.Value): Decimal;
|
||||
|
||||
precision(includeZeros?: boolean): number;
|
||||
sd(includeZeros?: boolean): number;
|
||||
|
||||
round(): Decimal;
|
||||
|
||||
sine() : Decimal;
|
||||
sin() : Decimal;
|
||||
|
||||
squareRoot(): Decimal;
|
||||
sqrt(): Decimal;
|
||||
|
||||
tangent() : Decimal;
|
||||
tan() : Decimal;
|
||||
|
||||
times(n: Decimal.Value): Decimal;
|
||||
mul(n: Decimal.Value) : Decimal;
|
||||
|
||||
toBinary(significantDigits?: number): string;
|
||||
toBinary(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toDecimalPlaces(decimalPlaces?: number): Decimal;
|
||||
toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
toDP(decimalPlaces?: number): Decimal;
|
||||
toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toExponential(decimalPlaces?: number): string;
|
||||
toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFixed(decimalPlaces?: number): string;
|
||||
toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toFraction(max_denominator?: Decimal.Value): Decimal[];
|
||||
|
||||
toHexadecimal(significantDigits?: number): string;
|
||||
toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
toHex(significantDigits?: number): string;
|
||||
toHex(significantDigits: number, rounding?: Decimal.Rounding): string;
|
||||
|
||||
toJSON(): string;
|
||||
|
||||
toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;
|
||||
|
||||
toNumber(): number;
|
||||
|
||||
toOctal(significantDigits?: number): string;
|
||||
toOctal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toPower(n: Decimal.Value): Decimal;
|
||||
pow(n: Decimal.Value): Decimal;
|
||||
|
||||
toPrecision(significantDigits?: number): string;
|
||||
toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||
|
||||
toSignificantDigits(significantDigits?: number): Decimal;
|
||||
toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
toSD(significantDigits?: number): Decimal;
|
||||
toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||
|
||||
toString(): string;
|
||||
|
||||
truncated(): Decimal;
|
||||
trunc(): Decimal;
|
||||
|
||||
valueOf(): string;
|
||||
|
||||
static abs(n: Decimal.Value): Decimal;
|
||||
static acos(n: Decimal.Value): Decimal;
|
||||
static acosh(n: Decimal.Value): Decimal;
|
||||
static add(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static asin(n: Decimal.Value): Decimal;
|
||||
static asinh(n: Decimal.Value): Decimal;
|
||||
static atan(n: Decimal.Value): Decimal;
|
||||
static atanh(n: Decimal.Value): Decimal;
|
||||
static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;
|
||||
static cbrt(n: Decimal.Value): Decimal;
|
||||
static ceil(n: Decimal.Value): Decimal;
|
||||
static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||
static clone(object?: Decimal.Config): Decimal.Constructor;
|
||||
static config(object: Decimal.Config): Decimal.Constructor;
|
||||
static cos(n: Decimal.Value): Decimal;
|
||||
static cosh(n: Decimal.Value): Decimal;
|
||||
static div(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static exp(n: Decimal.Value): Decimal;
|
||||
static floor(n: Decimal.Value): Decimal;
|
||||
static hypot(...n: Decimal.Value[]): Decimal;
|
||||
static isDecimal(object: any): boolean
|
||||
static ln(n: Decimal.Value): Decimal;
|
||||
static log(n: Decimal.Value, base?: Decimal.Value): Decimal;
|
||||
static log2(n: Decimal.Value): Decimal;
|
||||
static log10(n: Decimal.Value): Decimal;
|
||||
static max(...n: Decimal.Value[]): Decimal;
|
||||
static min(...n: Decimal.Value[]): Decimal;
|
||||
static mod(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static mul(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static noConflict(): Decimal.Constructor; // Browser only
|
||||
static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;
|
||||
static random(significantDigits?: number): Decimal;
|
||||
static round(n: Decimal.Value): Decimal;
|
||||
static set(object: Decimal.Config): Decimal.Constructor;
|
||||
static sign(n: Decimal.Value): Decimal;
|
||||
static sin(n: Decimal.Value): Decimal;
|
||||
static sinh(n: Decimal.Value): Decimal;
|
||||
static sqrt(n: Decimal.Value): Decimal;
|
||||
static sub(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||
static sum(...n: Decimal.Value[]): Decimal;
|
||||
static tan(n: Decimal.Value): Decimal;
|
||||
static tanh(n: Decimal.Value): Decimal;
|
||||
static trunc(n: Decimal.Value): Decimal;
|
||||
|
||||
static readonly default?: Decimal.Constructor;
|
||||
static readonly Decimal?: Decimal.Constructor;
|
||||
|
||||
static readonly precision: number;
|
||||
static readonly rounding: Decimal.Rounding;
|
||||
static readonly toExpNeg: number;
|
||||
static readonly toExpPos: number;
|
||||
static readonly minE: number;
|
||||
static readonly maxE: number;
|
||||
static readonly crypto: boolean;
|
||||
static readonly modulo: Decimal.Modulo;
|
||||
|
||||
static readonly ROUND_UP: 0;
|
||||
static readonly ROUND_DOWN: 1;
|
||||
static readonly ROUND_CEIL: 2;
|
||||
static readonly ROUND_FLOOR: 3;
|
||||
static readonly ROUND_HALF_UP: 4;
|
||||
static readonly ROUND_HALF_DOWN: 5;
|
||||
static readonly ROUND_HALF_EVEN: 6;
|
||||
static readonly ROUND_HALF_CEIL: 7;
|
||||
static readonly ROUND_HALF_FLOOR: 8;
|
||||
static readonly EUCLID: 9;
|
||||
}
|
||||
|
||||
9868
public/novnc/node_modules/decimal.js/decimal.js
generated
vendored
9868
public/novnc/node_modules/decimal.js/decimal.js
generated
vendored
File diff suppressed because it is too large
Load Diff
9796
public/novnc/node_modules/decimal.js/decimal.mjs
generated
vendored
9796
public/novnc/node_modules/decimal.js/decimal.mjs
generated
vendored
File diff suppressed because it is too large
Load Diff
80
public/novnc/node_modules/decimal.js/package.json
generated
vendored
80
public/novnc/node_modules/decimal.js/package.json
generated
vendored
@@ -1,40 +1,40 @@
|
||||
{
|
||||
"name": "decimal.js",
|
||||
"description": "An arbitrary-precision Decimal type for JavaScript.",
|
||||
"version": "10.3.1",
|
||||
"keywords": [
|
||||
"arbitrary",
|
||||
"precision",
|
||||
"arithmetic",
|
||||
"big",
|
||||
"number",
|
||||
"decimal",
|
||||
"float",
|
||||
"biginteger",
|
||||
"bigdecimal",
|
||||
"bignumber",
|
||||
"bigint",
|
||||
"bignum"
|
||||
],
|
||||
"repository" : {
|
||||
"type": "git",
|
||||
"url": "https://github.com/MikeMcl/decimal.js.git"
|
||||
},
|
||||
"main": "decimal",
|
||||
"module": "decimal.mjs",
|
||||
"browser": "decimal.js",
|
||||
"author": {
|
||||
"name": "Michael Mclaughlin",
|
||||
"email": "M8ch88l@gmail.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"test": "node ./test/test.js"
|
||||
},
|
||||
"types": "decimal.d.ts",
|
||||
"files": [
|
||||
"decimal.js",
|
||||
"decimal.mjs",
|
||||
"decimal.d.ts"
|
||||
]
|
||||
}
|
||||
{
|
||||
"name": "decimal.js",
|
||||
"description": "An arbitrary-precision Decimal type for JavaScript.",
|
||||
"version": "10.3.1",
|
||||
"keywords": [
|
||||
"arbitrary",
|
||||
"precision",
|
||||
"arithmetic",
|
||||
"big",
|
||||
"number",
|
||||
"decimal",
|
||||
"float",
|
||||
"biginteger",
|
||||
"bigdecimal",
|
||||
"bignumber",
|
||||
"bigint",
|
||||
"bignum"
|
||||
],
|
||||
"repository" : {
|
||||
"type": "git",
|
||||
"url": "https://github.com/MikeMcl/decimal.js.git"
|
||||
},
|
||||
"main": "decimal",
|
||||
"module": "decimal.mjs",
|
||||
"browser": "decimal.js",
|
||||
"author": {
|
||||
"name": "Michael Mclaughlin",
|
||||
"email": "M8ch88l@gmail.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"test": "node ./test/test.js"
|
||||
},
|
||||
"types": "decimal.d.ts",
|
||||
"files": [
|
||||
"decimal.js",
|
||||
"decimal.mjs",
|
||||
"decimal.d.ts"
|
||||
]
|
||||
}
|
||||
|
||||
4
public/novnc/node_modules/es-module-loader/.babelrc
generated
vendored
4
public/novnc/node_modules/es-module-loader/.babelrc
generated
vendored
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"plugins": ["transform-async-to-generator"]
|
||||
{
|
||||
"plugins": ["transform-async-to-generator"]
|
||||
}
|
||||
24
public/novnc/node_modules/es-module-loader/.jshintrc
generated
vendored
24
public/novnc/node_modules/es-module-loader/.jshintrc
generated
vendored
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"latedef": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"sub": true,
|
||||
"undef": true,
|
||||
"boss": true,
|
||||
"eqnull": true
|
||||
}
|
||||
{
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"latedef": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"sub": true,
|
||||
"undef": true,
|
||||
"boss": true,
|
||||
"eqnull": true
|
||||
}
|
||||
|
||||
24
public/novnc/node_modules/es-module-loader/.travis.yml
generated
vendored
24
public/novnc/node_modules/es-module-loader/.travis.yml
generated
vendored
@@ -1,12 +1,12 @@
|
||||
git:
|
||||
depth: 1
|
||||
language: node_js
|
||||
node_js:
|
||||
- '4'
|
||||
- '6'
|
||||
- '7'
|
||||
before_install:
|
||||
- npm install
|
||||
script:
|
||||
- npm run make-test
|
||||
- npm run test
|
||||
git:
|
||||
depth: 1
|
||||
language: node_js
|
||||
node_js:
|
||||
- '4'
|
||||
- '6'
|
||||
- '7'
|
||||
before_install:
|
||||
- npm install
|
||||
script:
|
||||
- npm run make-test
|
||||
- npm run test
|
||||
|
||||
44
public/novnc/node_modules/es-module-loader/LICENSE-MIT
generated
vendored
44
public/novnc/node_modules/es-module-loader/LICENSE-MIT
generated
vendored
@@ -1,22 +1,22 @@
|
||||
Copyright (c) 2013-2016 Guy Bedford, Peter Uithoven, Luke Hoban, Addy Osmani
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
Copyright (c) 2013-2016 Guy Bedford, Peter Uithoven, Luke Hoban, Addy Osmani
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
552
public/novnc/node_modules/es-module-loader/README.md
generated
vendored
552
public/novnc/node_modules/es-module-loader/README.md
generated
vendored
@@ -1,276 +1,276 @@
|
||||
# ES Module Loader Polyfill [![Build Status][travis-image]][travis-url]
|
||||
|
||||
Provides [low-level hooks](#registerloader-hooks) for creating ES module loaders, roughly based on the API of the [WhatWG loader spec](https://github.com/whatwg/loader),
|
||||
but with [adjustments](#spec-differences) to match the current proposals for the HTML modules specification, [unspecified WhatWG changes](https://github.com/whatwg/loader/issues/147), and [NodeJS ES module adoption](https://github.com/nodejs/node/issues/8866).
|
||||
|
||||
Supports the [loader import and registry API](#base-loader-polyfill-api) with the [System.register](docs/system-register.md) module format to provide exact module loading semantics for ES modules in environments today. In addition, support for the [System.registerDynamic](docs/system-register-dynamic.md) is provided to allow the linking
|
||||
of module graphs consisting of inter-dependent ES modules and CommonJS modules with their respective semantics retained.
|
||||
|
||||
This project aims to provide a fast, minimal, unopinionated loader API on top of which custom loaders can easily be built.
|
||||
|
||||
See the [spec differences](#spec-differences) section for a detailed description of some of the specification decisions made.
|
||||
|
||||
ES6 Module Loader Polyfill, the previous version of this project was built to the [outdated ES6 loader specification](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#august_24_2014_draft_rev_27) and can still be found at the [0.17 branch](https://github.com/ModuleLoader/es-module-loader/tree/0.17).
|
||||
|
||||
### Module Loader Examples
|
||||
|
||||
Some examples of common use case module loaders built with this project are provided below:
|
||||
|
||||
- [Browser ES Module Loader](https://github.com/ModuleLoader/browser-es-module-loader):
|
||||
A demonstration-only loader to load ES modules in the browser including support for the `<script type="module">` tag as specified in HTML.
|
||||
|
||||
- [Node ES Module Loader](https://github.com/ModuleLoader/node-es-module-loader)
|
||||
Allows loading ES modules with CommonJS interop in Node via `node-esml module/path.js` in line with the current Node
|
||||
plans for implementing ES modules. Used to run the tests and benchmarks in this project.
|
||||
|
||||
- [System Register Loader](https://github.com/ModuleLoader/system-register-loader):
|
||||
A fast optimized production loader that only loads `System.register` modules, recreating ES module semantics with CSP support.
|
||||
|
||||
### Installation
|
||||
|
||||
```
|
||||
npm install es-module-loader --save-dev
|
||||
```
|
||||
|
||||
### Creating a Loader
|
||||
|
||||
This project exposes a public API of ES modules in the `core` folder.
|
||||
|
||||
The minimal [polyfill loader API](#base-loader-polyfill-api) is provided in `core/loader-polyfill.js`. On top of this main API file is
|
||||
`core/register-loader.js` which provides a base loader class with the non-spec `System.register` and `System.registerDynamic` support to enable the exact
|
||||
linking semantics.
|
||||
|
||||
Helper functions are available in `core/resolve.js` and `core/common.js`. Everything that is exported can be considered
|
||||
part of the publicly versioned API of this project.
|
||||
|
||||
Any tool can be used to build the loader distribution file from these core modules - [Rollup](http://rollupjs.org) is used to do these builds in the example loaders above, provided by the `rollup.config.js` file in the example loader repos listed above.
|
||||
|
||||
### Base Loader Polyfill API
|
||||
|
||||
The `Loader` and `ModuleNamespace` classes in `core/loader-polyfill.js` provide the basic spec API method shells for a loader instance `loader`:
|
||||
|
||||
- *`new Loader()`*: Instantiate a new `loader` instance.
|
||||
Defaults to environment baseURI detection in NodeJS and browsers.
|
||||
- *`loader.import(key [, parentKey])`*: Promise for importing and executing a given module, returning its module instance.
|
||||
- *`loader.resolve(key [, parentKey])`*: Promise for resolving the idempotent fully-normalized string key for a module.
|
||||
- *`new ModuleNamespace(bindings)`*: Creates a new module namespace object instance for the given bindings object. The iterable properties
|
||||
of the bindings object are created as getters returning the corresponding values from the bindings object.
|
||||
- *`loader.registry.set(resolvedKey, namespace)`*: Set a module namespace into the registry.
|
||||
- *`loader.registry.get(resolvedKey)`*: Get a module namespace (if any) from the registry.
|
||||
- *`loader.registry.has(resolvedKey)`*: Boolean indicating whether the given key is present in the registry.
|
||||
- *`loader.registry.delete(resolvedKey)`*: Removes the given module from the registry (if any), returning true or false.
|
||||
- *`loader.registry.keys()`*: Function returning the keys iterator for the registry.
|
||||
- *`loader.registry.values()`*: Function returning the values iterator for the registry.
|
||||
- *`loader.registry.entries()`*: Function returning the entries iterator for the registry (keys and values).
|
||||
- *`loader.registry[Symbol.iterator]`*: In supported environments, provides registry entries iteration.
|
||||
|
||||
Example of using the base loader API:
|
||||
|
||||
```javascript
|
||||
import { Loader, ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
let loader = new Loader();
|
||||
|
||||
// override the resolve hook
|
||||
loader[Loader.resolve] = function (key, parent) {
|
||||
// intercept the load of "x"
|
||||
if (key === 'x') {
|
||||
this.registry.set('x', new ModuleNamespace({ some: 'exports' }));
|
||||
return key;
|
||||
}
|
||||
return Loader.prototype[Loader.resolve](key, parent);
|
||||
};
|
||||
|
||||
loader.import('x').then(function (m) {
|
||||
console.log(m.some);
|
||||
});
|
||||
```
|
||||
|
||||
### RegisterLoader Hooks
|
||||
|
||||
Instead of just hooking modules within the resolve hook, the `RegisterLoader` base class provides an instantiate hook
|
||||
to separate execution from resolution and enable spec linking semantics.
|
||||
|
||||
Implementing a loader on top of the `RegisterLoader` base class involves extending that class and providing these
|
||||
`resolve` and `instantiate` prototype hook methods:
|
||||
|
||||
```javascript
|
||||
import RegisterLoader from 'es-module-loader/core/register-loader.js';
|
||||
import { ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
class MyCustomLoader extends RegisterLoader {
|
||||
/*
|
||||
* Constructor
|
||||
* Purely for completeness in this example
|
||||
*/
|
||||
constructor (baseKey) {
|
||||
super(baseKey);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default resolve hook
|
||||
*
|
||||
* The default parent resolution matches the HTML spec module resolution
|
||||
* So super[RegisterLoader.resolve](key, parentKey) will return:
|
||||
* - undefined if "key" is a plain names (eg 'lodash')
|
||||
* - URL resolution if "key" is a relative URL (eg './x' will resolve to parentKey as a URL, or the baseURI)
|
||||
*
|
||||
* So relativeResolved becomes either a fully normalized URL or a plain name (|| key) in this example
|
||||
*/
|
||||
[RegisterLoader.resolve] (key, parentKey) {
|
||||
var relativeResolved = super[RegisterLoader.resolve](key, parentKey, metadata) || key;
|
||||
return relativeResolved;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default instantiate hook
|
||||
*
|
||||
* This is one form of instantiate which is to return a ModuleNamespace directly
|
||||
* This will result in every module supporting:
|
||||
*
|
||||
* import { moduleName } from 'my-module-name';
|
||||
* assert(moduleName === 'my-module-name');
|
||||
*/
|
||||
[RegisterLoader.instantiate] (key) {
|
||||
return new ModuleNamespace({ moduleName: key });
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The return value of `resolve` is the final key that is set in the registry.
|
||||
|
||||
The default normalization provided (`super[RegisterLoader.resolve]` above) follows the same approach as the HTML specification for module resolution, whereby _plain module names_ that are not valid URLs, and not starting with `./`, `../` or `/` return `undefined`.
|
||||
|
||||
So for example `lodash` will return `undefined`, while `./x` will resolve to `[baseURI]/x`. In NodeJS a `file:///` URL is used for the baseURI.
|
||||
|
||||
#### Instantiate Hook
|
||||
|
||||
Using these three types of return values for the `RegisterLoader` instantiate hook,
|
||||
we can recreate ES module semantics interacting with legacy module formats:
|
||||
|
||||
##### 1. Instantiating Dynamic Modules via ModuleNamespace
|
||||
|
||||
If the exact module definition is already known, or loaded through another method (like calling out fully to the Node require in the node-es-module-loader),
|
||||
then the direct module namespace value can be returned from instantiate:
|
||||
|
||||
```javascript
|
||||
|
||||
import { ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
// ...
|
||||
|
||||
instantiate (key) {
|
||||
var module = customModuleLoad(key);
|
||||
|
||||
return new ModuleNamespace({
|
||||
default: module,
|
||||
customExport: 'value'
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
##### 2. Instantiating ES Modules via System.register
|
||||
|
||||
When instantiate returns `undefined`, it is assumed that the module key has already been registered through a
|
||||
`loader.register(key, deps, declare)` call, following the System.register module format.
|
||||
|
||||
For example:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantate] (key) {
|
||||
// System.register
|
||||
this.register(key, ['./dep'], function (_export) {
|
||||
// ...
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
When using the anonymous form of System.register - `loader.register(deps, declare)`, in order to know
|
||||
the context in which it was called, it is necessary to call the `processAnonRegister` method passed to instantiate:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantiate] (key, processAnonRegister) {
|
||||
// System.register
|
||||
this.register(deps, declare);
|
||||
|
||||
processAnonRegister();
|
||||
}
|
||||
```
|
||||
|
||||
The loader can then match the anonymous `System.register` call to correct module in the registry. This is used to support `<script>` loading.
|
||||
|
||||
> System.register is not designed to be a handwritten module format, and would usually generated from a Babel or TypeScript conversion into the "system"
|
||||
module format.
|
||||
|
||||
##### 3. Instantiating Legacy Modules via System.registerDynamic
|
||||
|
||||
This is identical to the `System.register` process above, only running `loader.registerDynamic` instead of `loader.register`:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantiate] (key, processAnonRegister) {
|
||||
|
||||
// System.registerDynamic CommonJS wrapper format
|
||||
this.registerDynamic(['dep'], true, function (require, exports, module) {
|
||||
module.exports = require('dep').y;
|
||||
});
|
||||
|
||||
processAnonRegister();
|
||||
}
|
||||
```
|
||||
|
||||
For more information on the `System.registerDynamic` format [see the format explanation](docs/system-register-dynamic.md).
|
||||
|
||||
### Performance
|
||||
|
||||
Some simple benchmarks loading System.register modules are provided in the `bench` folder:
|
||||
|
||||
Each test operation includes a new loader class instantiation, `System.register` declarations, binding setup for ES module trees, loading and execution.
|
||||
|
||||
Sample results:
|
||||
|
||||
| Test | ES Module Loader 1.3 |
|
||||
| ----------------------------------------- |:--------------------:|
|
||||
| Importing multiple trees at the same time | 654 ops/sec |
|
||||
| Importing a deep tree of modules | 4,162 ops/sec |
|
||||
| Importing a single module with deps | 8,817 ops/sec |
|
||||
| Importing a single module without deps | 16,536 ops/sec |
|
||||
|
||||
### Tracing API
|
||||
|
||||
When `loader.trace = true` is set, `loader.loads` provides a simple tracing API.
|
||||
|
||||
Also not in the spec, this allows useful tooling to build on top of the loader.
|
||||
|
||||
`loader.loads` is keyed by the module ID, with each record of the form:
|
||||
|
||||
```javascript
|
||||
{
|
||||
key, // String, key
|
||||
deps, // Array, unnormalized dependencies
|
||||
depMap, // Object, mapping unnormalized dependencies to normalized dependencies
|
||||
metadata // Object, exactly as from normalize and instantiate hooks
|
||||
}
|
||||
```
|
||||
|
||||
### Spec Differences
|
||||
|
||||
The loader API in `core/loader-polyfill.js` matches the API of the current [WhatWG loader](https://whatwg.github.io/loader/) specification as closely as possible, while
|
||||
making a best-effort implementation of the upcoming loader simplification changes as descibred in https://github.com/whatwg/loader/issues/147.
|
||||
|
||||
- Default normalization and error handling is implemented as in the HTML specification for module loading. Default normalization follows the HTML specification treatment of module keys as URLs, with plain names ignored by default (effectively erroring unless altering this behaviour through the hooks). Errors are cached in the registry, until the `delete` API method is called for the module that has errored. Resolve and fetch errors throw during the tree instantiation phase, while evaluation errors throw during the evaluation phase, and this is true for cached errors as well in line with the spec - https://github.com/whatwg/html/pull/2595.
|
||||
- A direct `ModuleNamespace` constructor is provided over the `Module` mutator proposal in the WhatWG specification.
|
||||
Instead of storing a registry of `Module.Status` objects, we then store a registry of Module Namespace objects. The reason for this is that asynchronous rejection of registry entries as a source of truth leads to partial inconsistent rejection states
|
||||
(it is possible for the tick between the rejection of one load and its parent to have to deal with an overlapping in-progress tree),
|
||||
so in order to have a predictable load error rejection process, loads are only stored in the registry as fully-linked Namespace objects
|
||||
and not ModuleStatus objects as promises for Namespace objects. The custom private `ModuleNamespace` constructor is used over the `Module.Status` proposal to ensure a stable API instead of tracking in-progress specification work.
|
||||
- Linking between module formats does not use [zebra striping anymore](https://github.com/ModuleLoader/es6-module-loader/blob/v0.17.0/docs/circular-references-bindings.md#zebra-striping), but rather relies on linking the whole graph in deterministic order for each module format down the tree as is planned for NodeJS. This is made possible by the [dynamic modules TC39 proposal](https://github.com/caridy/proposal-dynamic-modules) which allows the export named bindings to only be determined at evaluation time for CommonJS modules. We do not currently provide tracking of circular references across module format boundaries so these will hang indefinitely like writing an infinite loop.
|
||||
- `Loader` is available as a named export from `core/loader-polyfill.js` but is not by default exported to the `global.Reflect` object.
|
||||
This is to allow individual loader implementations to determine their own impact on the environment.
|
||||
- A constructor argument is added to the loader that takes the environment `baseKey` to be used as the default normalization parent.
|
||||
- The `RegisterLoader` splits up the `resolve` hook into `resolve` and `instantiate`. The [WhatWG reduced specification proposal](https://github.com/whatwg/loader/issues/147) to remove the loader hooks implies having a single `resolve` hook by having the module set into the registry using the `registry.set` API as a side-effect of resolution to allow custom interception as in the first loader example above. As discussed in https://github.com/whatwg/loader/issues/147#issuecomment-230407764, this may cause unwanted execution of modules when only resolution is needed via `loader.resolve` calls, so the approach taken in the `RegisterLoader` is to implement separate `resolve` and `instantiate` hooks.
|
||||
|
||||
## License
|
||||
Licensed under the MIT license.
|
||||
|
||||
[travis-url]: https://travis-ci.org/ModuleLoader/es-module-loader
|
||||
[travis-image]: https://travis-ci.org/ModuleLoader/es-module-loader.svg?branch=master
|
||||
# ES Module Loader Polyfill [![Build Status][travis-image]][travis-url]
|
||||
|
||||
Provides [low-level hooks](#registerloader-hooks) for creating ES module loaders, roughly based on the API of the [WhatWG loader spec](https://github.com/whatwg/loader),
|
||||
but with [adjustments](#spec-differences) to match the current proposals for the HTML modules specification, [unspecified WhatWG changes](https://github.com/whatwg/loader/issues/147), and [NodeJS ES module adoption](https://github.com/nodejs/node/issues/8866).
|
||||
|
||||
Supports the [loader import and registry API](#base-loader-polyfill-api) with the [System.register](docs/system-register.md) module format to provide exact module loading semantics for ES modules in environments today. In addition, support for the [System.registerDynamic](docs/system-register-dynamic.md) is provided to allow the linking
|
||||
of module graphs consisting of inter-dependent ES modules and CommonJS modules with their respective semantics retained.
|
||||
|
||||
This project aims to provide a fast, minimal, unopinionated loader API on top of which custom loaders can easily be built.
|
||||
|
||||
See the [spec differences](#spec-differences) section for a detailed description of some of the specification decisions made.
|
||||
|
||||
ES6 Module Loader Polyfill, the previous version of this project was built to the [outdated ES6 loader specification](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#august_24_2014_draft_rev_27) and can still be found at the [0.17 branch](https://github.com/ModuleLoader/es-module-loader/tree/0.17).
|
||||
|
||||
### Module Loader Examples
|
||||
|
||||
Some examples of common use case module loaders built with this project are provided below:
|
||||
|
||||
- [Browser ES Module Loader](https://github.com/ModuleLoader/browser-es-module-loader):
|
||||
A demonstration-only loader to load ES modules in the browser including support for the `<script type="module">` tag as specified in HTML.
|
||||
|
||||
- [Node ES Module Loader](https://github.com/ModuleLoader/node-es-module-loader)
|
||||
Allows loading ES modules with CommonJS interop in Node via `node-esml module/path.js` in line with the current Node
|
||||
plans for implementing ES modules. Used to run the tests and benchmarks in this project.
|
||||
|
||||
- [System Register Loader](https://github.com/ModuleLoader/system-register-loader):
|
||||
A fast optimized production loader that only loads `System.register` modules, recreating ES module semantics with CSP support.
|
||||
|
||||
### Installation
|
||||
|
||||
```
|
||||
npm install es-module-loader --save-dev
|
||||
```
|
||||
|
||||
### Creating a Loader
|
||||
|
||||
This project exposes a public API of ES modules in the `core` folder.
|
||||
|
||||
The minimal [polyfill loader API](#base-loader-polyfill-api) is provided in `core/loader-polyfill.js`. On top of this main API file is
|
||||
`core/register-loader.js` which provides a base loader class with the non-spec `System.register` and `System.registerDynamic` support to enable the exact
|
||||
linking semantics.
|
||||
|
||||
Helper functions are available in `core/resolve.js` and `core/common.js`. Everything that is exported can be considered
|
||||
part of the publicly versioned API of this project.
|
||||
|
||||
Any tool can be used to build the loader distribution file from these core modules - [Rollup](http://rollupjs.org) is used to do these builds in the example loaders above, provided by the `rollup.config.js` file in the example loader repos listed above.
|
||||
|
||||
### Base Loader Polyfill API
|
||||
|
||||
The `Loader` and `ModuleNamespace` classes in `core/loader-polyfill.js` provide the basic spec API method shells for a loader instance `loader`:
|
||||
|
||||
- *`new Loader()`*: Instantiate a new `loader` instance.
|
||||
Defaults to environment baseURI detection in NodeJS and browsers.
|
||||
- *`loader.import(key [, parentKey])`*: Promise for importing and executing a given module, returning its module instance.
|
||||
- *`loader.resolve(key [, parentKey])`*: Promise for resolving the idempotent fully-normalized string key for a module.
|
||||
- *`new ModuleNamespace(bindings)`*: Creates a new module namespace object instance for the given bindings object. The iterable properties
|
||||
of the bindings object are created as getters returning the corresponding values from the bindings object.
|
||||
- *`loader.registry.set(resolvedKey, namespace)`*: Set a module namespace into the registry.
|
||||
- *`loader.registry.get(resolvedKey)`*: Get a module namespace (if any) from the registry.
|
||||
- *`loader.registry.has(resolvedKey)`*: Boolean indicating whether the given key is present in the registry.
|
||||
- *`loader.registry.delete(resolvedKey)`*: Removes the given module from the registry (if any), returning true or false.
|
||||
- *`loader.registry.keys()`*: Function returning the keys iterator for the registry.
|
||||
- *`loader.registry.values()`*: Function returning the values iterator for the registry.
|
||||
- *`loader.registry.entries()`*: Function returning the entries iterator for the registry (keys and values).
|
||||
- *`loader.registry[Symbol.iterator]`*: In supported environments, provides registry entries iteration.
|
||||
|
||||
Example of using the base loader API:
|
||||
|
||||
```javascript
|
||||
import { Loader, ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
let loader = new Loader();
|
||||
|
||||
// override the resolve hook
|
||||
loader[Loader.resolve] = function (key, parent) {
|
||||
// intercept the load of "x"
|
||||
if (key === 'x') {
|
||||
this.registry.set('x', new ModuleNamespace({ some: 'exports' }));
|
||||
return key;
|
||||
}
|
||||
return Loader.prototype[Loader.resolve](key, parent);
|
||||
};
|
||||
|
||||
loader.import('x').then(function (m) {
|
||||
console.log(m.some);
|
||||
});
|
||||
```
|
||||
|
||||
### RegisterLoader Hooks
|
||||
|
||||
Instead of just hooking modules within the resolve hook, the `RegisterLoader` base class provides an instantiate hook
|
||||
to separate execution from resolution and enable spec linking semantics.
|
||||
|
||||
Implementing a loader on top of the `RegisterLoader` base class involves extending that class and providing these
|
||||
`resolve` and `instantiate` prototype hook methods:
|
||||
|
||||
```javascript
|
||||
import RegisterLoader from 'es-module-loader/core/register-loader.js';
|
||||
import { ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
class MyCustomLoader extends RegisterLoader {
|
||||
/*
|
||||
* Constructor
|
||||
* Purely for completeness in this example
|
||||
*/
|
||||
constructor (baseKey) {
|
||||
super(baseKey);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default resolve hook
|
||||
*
|
||||
* The default parent resolution matches the HTML spec module resolution
|
||||
* So super[RegisterLoader.resolve](key, parentKey) will return:
|
||||
* - undefined if "key" is a plain names (eg 'lodash')
|
||||
* - URL resolution if "key" is a relative URL (eg './x' will resolve to parentKey as a URL, or the baseURI)
|
||||
*
|
||||
* So relativeResolved becomes either a fully normalized URL or a plain name (|| key) in this example
|
||||
*/
|
||||
[RegisterLoader.resolve] (key, parentKey) {
|
||||
var relativeResolved = super[RegisterLoader.resolve](key, parentKey, metadata) || key;
|
||||
return relativeResolved;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default instantiate hook
|
||||
*
|
||||
* This is one form of instantiate which is to return a ModuleNamespace directly
|
||||
* This will result in every module supporting:
|
||||
*
|
||||
* import { moduleName } from 'my-module-name';
|
||||
* assert(moduleName === 'my-module-name');
|
||||
*/
|
||||
[RegisterLoader.instantiate] (key) {
|
||||
return new ModuleNamespace({ moduleName: key });
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The return value of `resolve` is the final key that is set in the registry.
|
||||
|
||||
The default normalization provided (`super[RegisterLoader.resolve]` above) follows the same approach as the HTML specification for module resolution, whereby _plain module names_ that are not valid URLs, and not starting with `./`, `../` or `/` return `undefined`.
|
||||
|
||||
So for example `lodash` will return `undefined`, while `./x` will resolve to `[baseURI]/x`. In NodeJS a `file:///` URL is used for the baseURI.
|
||||
|
||||
#### Instantiate Hook
|
||||
|
||||
Using these three types of return values for the `RegisterLoader` instantiate hook,
|
||||
we can recreate ES module semantics interacting with legacy module formats:
|
||||
|
||||
##### 1. Instantiating Dynamic Modules via ModuleNamespace
|
||||
|
||||
If the exact module definition is already known, or loaded through another method (like calling out fully to the Node require in the node-es-module-loader),
|
||||
then the direct module namespace value can be returned from instantiate:
|
||||
|
||||
```javascript
|
||||
|
||||
import { ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
|
||||
|
||||
// ...
|
||||
|
||||
instantiate (key) {
|
||||
var module = customModuleLoad(key);
|
||||
|
||||
return new ModuleNamespace({
|
||||
default: module,
|
||||
customExport: 'value'
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
##### 2. Instantiating ES Modules via System.register
|
||||
|
||||
When instantiate returns `undefined`, it is assumed that the module key has already been registered through a
|
||||
`loader.register(key, deps, declare)` call, following the System.register module format.
|
||||
|
||||
For example:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantate] (key) {
|
||||
// System.register
|
||||
this.register(key, ['./dep'], function (_export) {
|
||||
// ...
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
When using the anonymous form of System.register - `loader.register(deps, declare)`, in order to know
|
||||
the context in which it was called, it is necessary to call the `processAnonRegister` method passed to instantiate:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantiate] (key, processAnonRegister) {
|
||||
// System.register
|
||||
this.register(deps, declare);
|
||||
|
||||
processAnonRegister();
|
||||
}
|
||||
```
|
||||
|
||||
The loader can then match the anonymous `System.register` call to correct module in the registry. This is used to support `<script>` loading.
|
||||
|
||||
> System.register is not designed to be a handwritten module format, and would usually generated from a Babel or TypeScript conversion into the "system"
|
||||
module format.
|
||||
|
||||
##### 3. Instantiating Legacy Modules via System.registerDynamic
|
||||
|
||||
This is identical to the `System.register` process above, only running `loader.registerDynamic` instead of `loader.register`:
|
||||
|
||||
```javascript
|
||||
[RegisterLoader.instantiate] (key, processAnonRegister) {
|
||||
|
||||
// System.registerDynamic CommonJS wrapper format
|
||||
this.registerDynamic(['dep'], true, function (require, exports, module) {
|
||||
module.exports = require('dep').y;
|
||||
});
|
||||
|
||||
processAnonRegister();
|
||||
}
|
||||
```
|
||||
|
||||
For more information on the `System.registerDynamic` format [see the format explanation](docs/system-register-dynamic.md).
|
||||
|
||||
### Performance
|
||||
|
||||
Some simple benchmarks loading System.register modules are provided in the `bench` folder:
|
||||
|
||||
Each test operation includes a new loader class instantiation, `System.register` declarations, binding setup for ES module trees, loading and execution.
|
||||
|
||||
Sample results:
|
||||
|
||||
| Test | ES Module Loader 1.3 |
|
||||
| ----------------------------------------- |:--------------------:|
|
||||
| Importing multiple trees at the same time | 654 ops/sec |
|
||||
| Importing a deep tree of modules | 4,162 ops/sec |
|
||||
| Importing a single module with deps | 8,817 ops/sec |
|
||||
| Importing a single module without deps | 16,536 ops/sec |
|
||||
|
||||
### Tracing API
|
||||
|
||||
When `loader.trace = true` is set, `loader.loads` provides a simple tracing API.
|
||||
|
||||
Also not in the spec, this allows useful tooling to build on top of the loader.
|
||||
|
||||
`loader.loads` is keyed by the module ID, with each record of the form:
|
||||
|
||||
```javascript
|
||||
{
|
||||
key, // String, key
|
||||
deps, // Array, unnormalized dependencies
|
||||
depMap, // Object, mapping unnormalized dependencies to normalized dependencies
|
||||
metadata // Object, exactly as from normalize and instantiate hooks
|
||||
}
|
||||
```
|
||||
|
||||
### Spec Differences
|
||||
|
||||
The loader API in `core/loader-polyfill.js` matches the API of the current [WhatWG loader](https://whatwg.github.io/loader/) specification as closely as possible, while
|
||||
making a best-effort implementation of the upcoming loader simplification changes as descibred in https://github.com/whatwg/loader/issues/147.
|
||||
|
||||
- Default normalization and error handling is implemented as in the HTML specification for module loading. Default normalization follows the HTML specification treatment of module keys as URLs, with plain names ignored by default (effectively erroring unless altering this behaviour through the hooks). Errors are cached in the registry, until the `delete` API method is called for the module that has errored. Resolve and fetch errors throw during the tree instantiation phase, while evaluation errors throw during the evaluation phase, and this is true for cached errors as well in line with the spec - https://github.com/whatwg/html/pull/2595.
|
||||
- A direct `ModuleNamespace` constructor is provided over the `Module` mutator proposal in the WhatWG specification.
|
||||
Instead of storing a registry of `Module.Status` objects, we then store a registry of Module Namespace objects. The reason for this is that asynchronous rejection of registry entries as a source of truth leads to partial inconsistent rejection states
|
||||
(it is possible for the tick between the rejection of one load and its parent to have to deal with an overlapping in-progress tree),
|
||||
so in order to have a predictable load error rejection process, loads are only stored in the registry as fully-linked Namespace objects
|
||||
and not ModuleStatus objects as promises for Namespace objects. The custom private `ModuleNamespace` constructor is used over the `Module.Status` proposal to ensure a stable API instead of tracking in-progress specification work.
|
||||
- Linking between module formats does not use [zebra striping anymore](https://github.com/ModuleLoader/es6-module-loader/blob/v0.17.0/docs/circular-references-bindings.md#zebra-striping), but rather relies on linking the whole graph in deterministic order for each module format down the tree as is planned for NodeJS. This is made possible by the [dynamic modules TC39 proposal](https://github.com/caridy/proposal-dynamic-modules) which allows the export named bindings to only be determined at evaluation time for CommonJS modules. We do not currently provide tracking of circular references across module format boundaries so these will hang indefinitely like writing an infinite loop.
|
||||
- `Loader` is available as a named export from `core/loader-polyfill.js` but is not by default exported to the `global.Reflect` object.
|
||||
This is to allow individual loader implementations to determine their own impact on the environment.
|
||||
- A constructor argument is added to the loader that takes the environment `baseKey` to be used as the default normalization parent.
|
||||
- The `RegisterLoader` splits up the `resolve` hook into `resolve` and `instantiate`. The [WhatWG reduced specification proposal](https://github.com/whatwg/loader/issues/147) to remove the loader hooks implies having a single `resolve` hook by having the module set into the registry using the `registry.set` API as a side-effect of resolution to allow custom interception as in the first loader example above. As discussed in https://github.com/whatwg/loader/issues/147#issuecomment-230407764, this may cause unwanted execution of modules when only resolution is needed via `loader.resolve` calls, so the approach taken in the `RegisterLoader` is to implement separate `resolve` and `instantiate` hooks.
|
||||
|
||||
## License
|
||||
Licensed under the MIT license.
|
||||
|
||||
[travis-url]: https://travis-ci.org/ModuleLoader/es-module-loader
|
||||
[travis-image]: https://travis-ci.org/ModuleLoader/es-module-loader.svg?branch=master
|
||||
|
||||
1546
public/novnc/node_modules/es-module-loader/bench/1-register-loading.js
generated
vendored
1546
public/novnc/node_modules/es-module-loader/bench/1-register-loading.js
generated
vendored
File diff suppressed because it is too large
Load Diff
42
public/novnc/node_modules/es-module-loader/bench/2-url-resolution.js
generated
vendored
42
public/novnc/node_modules/es-module-loader/bench/2-url-resolution.js
generated
vendored
@@ -1,21 +1,21 @@
|
||||
import { resolveIfNotPlain } from '../core/resolve.js';
|
||||
|
||||
var cases = [
|
||||
['./x', 'https://www.google.com'],
|
||||
['./x', 'https://www.google.com/asdf'],
|
||||
['./x', 'file:///asdf'],
|
||||
['./x', 'https://www.google.com'],
|
||||
['./x', 'https://www.google.com'],
|
||||
['..\\..\\', 'file:///C:/some/path'],
|
||||
['../../asdf', 'data://asdf/asdf/asdf/asdf/asdf/asdf'],
|
||||
['//asdf/asdf', 'file://asdf/asdf/asdf'],
|
||||
['/asdfasd', 'https://www.google.com/rterasdf/asdf/as/dfa/sdf/asdf/asdfadf'],
|
||||
['a:b', 'b:c'],
|
||||
['//asdfasdf', 'b:c']
|
||||
];
|
||||
|
||||
var results = [];
|
||||
suite.add('Resolve', function() {
|
||||
for (var i = 0; i < cases.length; i++)
|
||||
results.push(resolveIfNotPlain(cases[i][0], cases[i][1]));
|
||||
});
|
||||
import { resolveIfNotPlain } from '../core/resolve.js';
|
||||
|
||||
var cases = [
|
||||
['./x', 'https://www.google.com'],
|
||||
['./x', 'https://www.google.com/asdf'],
|
||||
['./x', 'file:///asdf'],
|
||||
['./x', 'https://www.google.com'],
|
||||
['./x', 'https://www.google.com'],
|
||||
['..\\..\\', 'file:///C:/some/path'],
|
||||
['../../asdf', 'data://asdf/asdf/asdf/asdf/asdf/asdf'],
|
||||
['//asdf/asdf', 'file://asdf/asdf/asdf'],
|
||||
['/asdfasd', 'https://www.google.com/rterasdf/asdf/as/dfa/sdf/asdf/asdfadf'],
|
||||
['a:b', 'b:c'],
|
||||
['//asdfasdf', 'b:c']
|
||||
];
|
||||
|
||||
var results = [];
|
||||
suite.add('Resolve', function() {
|
||||
for (var i = 0; i < cases.length; i++)
|
||||
results.push(resolveIfNotPlain(cases[i][0], cases[i][1]));
|
||||
});
|
||||
|
||||
94
public/novnc/node_modules/es-module-loader/bench/runner.js
generated
vendored
94
public/novnc/node_modules/es-module-loader/bench/runner.js
generated
vendored
@@ -1,47 +1,47 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import Benchmark from 'benchmark';
|
||||
|
||||
var benchmarks = fs.readdirSync('bench').filter(function(testName) {
|
||||
return testName != 'runner.js' && testName.endsWith('.js')
|
||||
});
|
||||
|
||||
process.on('unhandledRejection', function (e) {
|
||||
setTimeout(function () {
|
||||
throw e;
|
||||
});
|
||||
});
|
||||
|
||||
function runNextBenchmark() {
|
||||
var nextBenchmark = benchmarks.shift();
|
||||
|
||||
if (!nextBenchmark)
|
||||
return Promise.resolve();
|
||||
|
||||
global.suite = new Benchmark.Suite;
|
||||
|
||||
console.log('--- ' + nextBenchmark.substr(0, nextBenchmark.length - 3) + ' ---');
|
||||
|
||||
return loader.import(path.resolve('bench/' + nextBenchmark))
|
||||
.then(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
suite.on('cycle', function(event) {
|
||||
console.log(event.target.error ? event.target.error : String(event.target));
|
||||
});
|
||||
|
||||
suite.on('complete', function(event) {
|
||||
console.log('Fastest is ' + this.filter('fastest').map('name') + '\n');
|
||||
resolve();
|
||||
});
|
||||
|
||||
suite.on('error', reject);
|
||||
|
||||
suite.run({ defer: true });
|
||||
});
|
||||
})
|
||||
.then(function() {
|
||||
return runNextBenchmark();
|
||||
});
|
||||
}
|
||||
|
||||
runNextBenchmark();
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import Benchmark from 'benchmark';
|
||||
|
||||
var benchmarks = fs.readdirSync('bench').filter(function(testName) {
|
||||
return testName != 'runner.js' && testName.endsWith('.js')
|
||||
});
|
||||
|
||||
process.on('unhandledRejection', function (e) {
|
||||
setTimeout(function () {
|
||||
throw e;
|
||||
});
|
||||
});
|
||||
|
||||
function runNextBenchmark() {
|
||||
var nextBenchmark = benchmarks.shift();
|
||||
|
||||
if (!nextBenchmark)
|
||||
return Promise.resolve();
|
||||
|
||||
global.suite = new Benchmark.Suite;
|
||||
|
||||
console.log('--- ' + nextBenchmark.substr(0, nextBenchmark.length - 3) + ' ---');
|
||||
|
||||
return loader.import(path.resolve('bench/' + nextBenchmark))
|
||||
.then(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
suite.on('cycle', function(event) {
|
||||
console.log(event.target.error ? event.target.error : String(event.target));
|
||||
});
|
||||
|
||||
suite.on('complete', function(event) {
|
||||
console.log('Fastest is ' + this.filter('fastest').map('name') + '\n');
|
||||
resolve();
|
||||
});
|
||||
|
||||
suite.on('error', reject);
|
||||
|
||||
suite.run({ defer: true });
|
||||
});
|
||||
})
|
||||
.then(function() {
|
||||
return runNextBenchmark();
|
||||
});
|
||||
}
|
||||
|
||||
runNextBenchmark();
|
||||
|
||||
204
public/novnc/node_modules/es-module-loader/core/common.js
generated
vendored
204
public/novnc/node_modules/es-module-loader/core/common.js
generated
vendored
@@ -1,102 +1,102 @@
|
||||
/*
|
||||
* Environment
|
||||
*/
|
||||
export var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
export var isNode = typeof process !== 'undefined' && process.versions && process.versions.node;
|
||||
export var isWindows = typeof process !== 'undefined' && typeof process.platform === 'string' && process.platform.match(/^win/);
|
||||
|
||||
var envGlobal = typeof self !== 'undefined' ? self : global;
|
||||
export { envGlobal as global }
|
||||
|
||||
/*
|
||||
* Simple Symbol() shim
|
||||
*/
|
||||
var hasSymbol = typeof Symbol !== 'undefined';
|
||||
export function createSymbol (name) {
|
||||
return hasSymbol ? Symbol() : '@@' + name;
|
||||
}
|
||||
|
||||
export var toStringTag = hasSymbol && Symbol.toStringTag;
|
||||
|
||||
export function pathToFileUrl (filePath) {
|
||||
return 'file://' + (isWindows ? '/' : '') + (isWindows ? filePath.replace(/\\/g, '/') : filePath);
|
||||
}
|
||||
|
||||
export function fileUrlToPath (fileUrl) {
|
||||
if (fileUrl.substr(0, 7) !== 'file://')
|
||||
throw new RangeError(fileUrl + ' is not a valid file url');
|
||||
if (isWindows)
|
||||
return fileUrl.substr(8).replace(/\\/g, '/');
|
||||
else
|
||||
return fileUrl.substr(7);
|
||||
}
|
||||
|
||||
/*
|
||||
* Environment baseURI
|
||||
*/
|
||||
export var baseURI;
|
||||
|
||||
// environent baseURI detection
|
||||
if (typeof document != 'undefined' && document.getElementsByTagName) {
|
||||
baseURI = document.baseURI;
|
||||
|
||||
if (!baseURI) {
|
||||
var bases = document.getElementsByTagName('base');
|
||||
baseURI = bases[0] && bases[0].href || window.location.href;
|
||||
}
|
||||
}
|
||||
else if (typeof location != 'undefined') {
|
||||
baseURI = location.href;
|
||||
}
|
||||
|
||||
// sanitize out the hash and querystring
|
||||
if (baseURI) {
|
||||
baseURI = baseURI.split('#')[0].split('?')[0];
|
||||
var slashIndex = baseURI.lastIndexOf('/');
|
||||
if (slashIndex !== -1)
|
||||
baseURI = baseURI.substr(0, slashIndex + 1);
|
||||
}
|
||||
else if (typeof process !== 'undefined' && process.cwd) {
|
||||
baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd();
|
||||
if (isWindows)
|
||||
baseURI = baseURI.replace(/\\/g, '/');
|
||||
}
|
||||
else {
|
||||
throw new TypeError('No environment baseURI');
|
||||
}
|
||||
|
||||
// ensure baseURI has trailing "/"
|
||||
if (baseURI[baseURI.length - 1] !== '/')
|
||||
baseURI += '/';
|
||||
|
||||
/*
|
||||
* LoaderError with chaining for loader stacks
|
||||
*/
|
||||
var errArgs = new Error(0, '_').fileName == '_';
|
||||
function LoaderError__Check_error_message_for_loader_stack (childErr, newMessage) {
|
||||
// Convert file:/// URLs to paths in Node
|
||||
if (!isBrowser)
|
||||
newMessage = newMessage.replace(isWindows ? /file:\/\/\//g : /file:\/\//g, '');
|
||||
|
||||
var message = (childErr.message || childErr) + '\n ' + newMessage;
|
||||
|
||||
var err;
|
||||
if (errArgs && childErr.fileName)
|
||||
err = new Error(message, childErr.fileName, childErr.lineNumber);
|
||||
else
|
||||
err = new Error(message);
|
||||
|
||||
|
||||
var stack = childErr.originalErr ? childErr.originalErr.stack : childErr.stack;
|
||||
|
||||
if (isNode)
|
||||
// node doesn't show the message otherwise
|
||||
err.stack = message + '\n ' + stack;
|
||||
else
|
||||
err.stack = stack;
|
||||
|
||||
err.originalErr = childErr.originalErr || childErr;
|
||||
|
||||
return err;
|
||||
}
|
||||
export { LoaderError__Check_error_message_for_loader_stack as addToError }
|
||||
/*
|
||||
* Environment
|
||||
*/
|
||||
export var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
export var isNode = typeof process !== 'undefined' && process.versions && process.versions.node;
|
||||
export var isWindows = typeof process !== 'undefined' && typeof process.platform === 'string' && process.platform.match(/^win/);
|
||||
|
||||
var envGlobal = typeof self !== 'undefined' ? self : global;
|
||||
export { envGlobal as global }
|
||||
|
||||
/*
|
||||
* Simple Symbol() shim
|
||||
*/
|
||||
var hasSymbol = typeof Symbol !== 'undefined';
|
||||
export function createSymbol (name) {
|
||||
return hasSymbol ? Symbol() : '@@' + name;
|
||||
}
|
||||
|
||||
export var toStringTag = hasSymbol && Symbol.toStringTag;
|
||||
|
||||
export function pathToFileUrl (filePath) {
|
||||
return 'file://' + (isWindows ? '/' : '') + (isWindows ? filePath.replace(/\\/g, '/') : filePath);
|
||||
}
|
||||
|
||||
export function fileUrlToPath (fileUrl) {
|
||||
if (fileUrl.substr(0, 7) !== 'file://')
|
||||
throw new RangeError(fileUrl + ' is not a valid file url');
|
||||
if (isWindows)
|
||||
return fileUrl.substr(8).replace(/\\/g, '/');
|
||||
else
|
||||
return fileUrl.substr(7);
|
||||
}
|
||||
|
||||
/*
|
||||
* Environment baseURI
|
||||
*/
|
||||
export var baseURI;
|
||||
|
||||
// environent baseURI detection
|
||||
if (typeof document != 'undefined' && document.getElementsByTagName) {
|
||||
baseURI = document.baseURI;
|
||||
|
||||
if (!baseURI) {
|
||||
var bases = document.getElementsByTagName('base');
|
||||
baseURI = bases[0] && bases[0].href || window.location.href;
|
||||
}
|
||||
}
|
||||
else if (typeof location != 'undefined') {
|
||||
baseURI = location.href;
|
||||
}
|
||||
|
||||
// sanitize out the hash and querystring
|
||||
if (baseURI) {
|
||||
baseURI = baseURI.split('#')[0].split('?')[0];
|
||||
var slashIndex = baseURI.lastIndexOf('/');
|
||||
if (slashIndex !== -1)
|
||||
baseURI = baseURI.substr(0, slashIndex + 1);
|
||||
}
|
||||
else if (typeof process !== 'undefined' && process.cwd) {
|
||||
baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd();
|
||||
if (isWindows)
|
||||
baseURI = baseURI.replace(/\\/g, '/');
|
||||
}
|
||||
else {
|
||||
throw new TypeError('No environment baseURI');
|
||||
}
|
||||
|
||||
// ensure baseURI has trailing "/"
|
||||
if (baseURI[baseURI.length - 1] !== '/')
|
||||
baseURI += '/';
|
||||
|
||||
/*
|
||||
* LoaderError with chaining for loader stacks
|
||||
*/
|
||||
var errArgs = new Error(0, '_').fileName == '_';
|
||||
function LoaderError__Check_error_message_for_loader_stack (childErr, newMessage) {
|
||||
// Convert file:/// URLs to paths in Node
|
||||
if (!isBrowser)
|
||||
newMessage = newMessage.replace(isWindows ? /file:\/\/\//g : /file:\/\//g, '');
|
||||
|
||||
var message = (childErr.message || childErr) + '\n ' + newMessage;
|
||||
|
||||
var err;
|
||||
if (errArgs && childErr.fileName)
|
||||
err = new Error(message, childErr.fileName, childErr.lineNumber);
|
||||
else
|
||||
err = new Error(message);
|
||||
|
||||
|
||||
var stack = childErr.originalErr ? childErr.originalErr.stack : childErr.stack;
|
||||
|
||||
if (isNode)
|
||||
// node doesn't show the message otherwise
|
||||
err.stack = message + '\n ' + stack;
|
||||
else
|
||||
err.stack = stack;
|
||||
|
||||
err.originalErr = childErr.originalErr || childErr;
|
||||
|
||||
return err;
|
||||
}
|
||||
export { LoaderError__Check_error_message_for_loader_stack as addToError }
|
||||
|
||||
544
public/novnc/node_modules/es-module-loader/core/loader-polyfill.js
generated
vendored
544
public/novnc/node_modules/es-module-loader/core/loader-polyfill.js
generated
vendored
@@ -1,272 +1,272 @@
|
||||
import { addToError, createSymbol, toStringTag } from './common.js';
|
||||
|
||||
export { Loader, ModuleNamespace, REGISTRY }
|
||||
|
||||
var resolvedPromise = Promise.resolve();
|
||||
|
||||
/*
|
||||
* Simple Array values shim
|
||||
*/
|
||||
function arrayValues (arr) {
|
||||
if (arr.values)
|
||||
return arr.values();
|
||||
|
||||
if (typeof Symbol === 'undefined' || !Symbol.iterator)
|
||||
throw new Error('Symbol.iterator not supported in this browser');
|
||||
|
||||
var iterable = {};
|
||||
iterable[Symbol.iterator] = function () {
|
||||
var keys = Object.keys(arr);
|
||||
var keyIndex = 0;
|
||||
return {
|
||||
next: function () {
|
||||
if (keyIndex < keys.length)
|
||||
return {
|
||||
value: arr[keys[keyIndex++]],
|
||||
done: false
|
||||
};
|
||||
else
|
||||
return {
|
||||
value: undefined,
|
||||
done: true
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
||||
return iterable;
|
||||
}
|
||||
|
||||
/*
|
||||
* 3. Reflect.Loader
|
||||
*
|
||||
* We skip the entire native internal pipeline, just providing the bare API
|
||||
*/
|
||||
// 3.1.1
|
||||
function Loader () {
|
||||
this.registry = new Registry();
|
||||
}
|
||||
// 3.3.1
|
||||
Loader.prototype.constructor = Loader;
|
||||
|
||||
function ensureInstantiated (module) {
|
||||
if (module === undefined)
|
||||
return;
|
||||
if (module instanceof ModuleNamespace === false && module[toStringTag] !== 'module')
|
||||
throw new TypeError('Module instantiation did not return a valid namespace object.');
|
||||
return module;
|
||||
}
|
||||
|
||||
// 3.3.2
|
||||
Loader.prototype.import = function (key, parent) {
|
||||
if (typeof key !== 'string')
|
||||
throw new TypeError('Loader import method must be passed a module key string');
|
||||
// custom resolveInstantiate combined hook for better perf
|
||||
var loader = this;
|
||||
return resolvedPromise
|
||||
.then(function () {
|
||||
return loader[RESOLVE_INSTANTIATE](key, parent);
|
||||
})
|
||||
.then(ensureInstantiated)
|
||||
//.then(Module.evaluate)
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Loading ' + key + (parent ? ' from ' + parent : ''));
|
||||
});
|
||||
};
|
||||
// 3.3.3
|
||||
var RESOLVE = Loader.resolve = createSymbol('resolve');
|
||||
|
||||
/*
|
||||
* Combined resolve / instantiate hook
|
||||
*
|
||||
* Not in current reduced spec, but necessary to separate RESOLVE from RESOLVE + INSTANTIATE as described
|
||||
* in the spec notes of this repo to ensure that loader.resolve doesn't instantiate when not wanted.
|
||||
*
|
||||
* We implement RESOLVE_INSTANTIATE as a single hook instead of a separate INSTANTIATE in order to avoid
|
||||
* the need for double registry lookups as a performance optimization.
|
||||
*/
|
||||
var RESOLVE_INSTANTIATE = Loader.resolveInstantiate = createSymbol('resolveInstantiate');
|
||||
|
||||
// default resolveInstantiate is just to call resolve and then get from the registry
|
||||
// this provides compatibility for the resolveInstantiate optimization
|
||||
Loader.prototype[RESOLVE_INSTANTIATE] = function (key, parent) {
|
||||
var loader = this;
|
||||
return loader.resolve(key, parent)
|
||||
.then(function (resolved) {
|
||||
return loader.registry.get(resolved);
|
||||
});
|
||||
};
|
||||
|
||||
function ensureResolution (resolvedKey) {
|
||||
if (resolvedKey === undefined)
|
||||
throw new RangeError('No resolution found.');
|
||||
return resolvedKey;
|
||||
}
|
||||
|
||||
Loader.prototype.resolve = function (key, parent) {
|
||||
var loader = this;
|
||||
return resolvedPromise
|
||||
.then(function() {
|
||||
return loader[RESOLVE](key, parent);
|
||||
})
|
||||
.then(ensureResolution)
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Resolving ' + key + (parent ? ' to ' + parent : ''));
|
||||
});
|
||||
};
|
||||
|
||||
// 3.3.4 (import without evaluate)
|
||||
// this is not documented because the use of deferred evaluation as in Module.evaluate is not
|
||||
// documented, as it is not considered a stable feature to be encouraged
|
||||
// Loader.prototype.load may well be deprecated if this stays disabled
|
||||
/* Loader.prototype.load = function (key, parent) {
|
||||
return Promise.resolve(this[RESOLVE_INSTANTIATE](key, parent || this.key))
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Loading ' + key + (parent ? ' from ' + parent : ''));
|
||||
});
|
||||
}; */
|
||||
|
||||
/*
|
||||
* 4. Registry
|
||||
*
|
||||
* Instead of structuring through a Map, just use a dictionary object
|
||||
* We throw for construction attempts so this doesn't affect the public API
|
||||
*
|
||||
* Registry has been adjusted to use Namespace objects over ModuleStatus objects
|
||||
* as part of simplifying loader API implementation
|
||||
*/
|
||||
var iteratorSupport = typeof Symbol !== 'undefined' && Symbol.iterator;
|
||||
var REGISTRY = createSymbol('registry');
|
||||
function Registry() {
|
||||
this[REGISTRY] = {};
|
||||
}
|
||||
// 4.4.1
|
||||
if (iteratorSupport) {
|
||||
// 4.4.2
|
||||
Registry.prototype[Symbol.iterator] = function () {
|
||||
return this.entries()[Symbol.iterator]();
|
||||
};
|
||||
|
||||
// 4.4.3
|
||||
Registry.prototype.entries = function () {
|
||||
var registry = this[REGISTRY];
|
||||
return arrayValues(Object.keys(registry).map(function (key) {
|
||||
return [key, registry[key]];
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
// 4.4.4
|
||||
Registry.prototype.keys = function () {
|
||||
return arrayValues(Object.keys(this[REGISTRY]));
|
||||
};
|
||||
// 4.4.5
|
||||
Registry.prototype.values = function () {
|
||||
var registry = this[REGISTRY];
|
||||
return arrayValues(Object.keys(registry).map(function (key) {
|
||||
return registry[key];
|
||||
}));
|
||||
};
|
||||
// 4.4.6
|
||||
Registry.prototype.get = function (key) {
|
||||
return this[REGISTRY][key];
|
||||
};
|
||||
// 4.4.7
|
||||
Registry.prototype.set = function (key, namespace) {
|
||||
if (!(namespace instanceof ModuleNamespace || namespace[toStringTag] === 'module'))
|
||||
throw new Error('Registry must be set with an instance of Module Namespace');
|
||||
this[REGISTRY][key] = namespace;
|
||||
return this;
|
||||
};
|
||||
// 4.4.8
|
||||
Registry.prototype.has = function (key) {
|
||||
return Object.hasOwnProperty.call(this[REGISTRY], key);
|
||||
};
|
||||
// 4.4.9
|
||||
Registry.prototype.delete = function (key) {
|
||||
if (Object.hasOwnProperty.call(this[REGISTRY], key)) {
|
||||
delete this[REGISTRY][key];
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/*
|
||||
* Simple ModuleNamespace Exotic object based on a baseObject
|
||||
* We export this for allowing a fast-path for module namespace creation over Module descriptors
|
||||
*/
|
||||
// var EVALUATE = createSymbol('evaluate');
|
||||
var BASE_OBJECT = createSymbol('baseObject');
|
||||
|
||||
// 8.3.1 Reflect.Module
|
||||
/*
|
||||
* Best-effort simplified non-spec implementation based on
|
||||
* a baseObject referenced via getters.
|
||||
*
|
||||
* Allows:
|
||||
*
|
||||
* loader.registry.set('x', new Module({ default: 'x' }));
|
||||
*
|
||||
* Optional evaluation function provides experimental Module.evaluate
|
||||
* support for non-executed modules in registry.
|
||||
*/
|
||||
function ModuleNamespace (baseObject/*, evaluate*/) {
|
||||
Object.defineProperty(this, BASE_OBJECT, {
|
||||
value: baseObject
|
||||
});
|
||||
|
||||
// evaluate defers namespace population
|
||||
/* if (evaluate) {
|
||||
Object.defineProperty(this, EVALUATE, {
|
||||
value: evaluate,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
}
|
||||
else { */
|
||||
Object.keys(baseObject).forEach(extendNamespace, this);
|
||||
//}
|
||||
};
|
||||
// 8.4.2
|
||||
ModuleNamespace.prototype = Object.create(null);
|
||||
|
||||
if (toStringTag)
|
||||
Object.defineProperty(ModuleNamespace.prototype, toStringTag, {
|
||||
value: 'Module'
|
||||
});
|
||||
|
||||
function extendNamespace (key) {
|
||||
Object.defineProperty(this, key, {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return this[BASE_OBJECT][key];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* function doEvaluate (evaluate, context) {
|
||||
try {
|
||||
evaluate.call(context);
|
||||
}
|
||||
catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
// 8.4.1 Module.evaluate... not documented or used because this is potentially unstable
|
||||
Module.evaluate = function (ns) {
|
||||
var evaluate = ns[EVALUATE];
|
||||
if (evaluate) {
|
||||
ns[EVALUATE] = undefined;
|
||||
var err = doEvaluate(evaluate);
|
||||
if (err) {
|
||||
// cache the error
|
||||
ns[EVALUATE] = function () {
|
||||
throw err;
|
||||
};
|
||||
throw err;
|
||||
}
|
||||
Object.keys(ns[BASE_OBJECT]).forEach(extendNamespace, ns);
|
||||
}
|
||||
// make chainable
|
||||
return ns;
|
||||
}; */
|
||||
import { addToError, createSymbol, toStringTag } from './common.js';
|
||||
|
||||
export { Loader, ModuleNamespace, REGISTRY }
|
||||
|
||||
var resolvedPromise = Promise.resolve();
|
||||
|
||||
/*
|
||||
* Simple Array values shim
|
||||
*/
|
||||
function arrayValues (arr) {
|
||||
if (arr.values)
|
||||
return arr.values();
|
||||
|
||||
if (typeof Symbol === 'undefined' || !Symbol.iterator)
|
||||
throw new Error('Symbol.iterator not supported in this browser');
|
||||
|
||||
var iterable = {};
|
||||
iterable[Symbol.iterator] = function () {
|
||||
var keys = Object.keys(arr);
|
||||
var keyIndex = 0;
|
||||
return {
|
||||
next: function () {
|
||||
if (keyIndex < keys.length)
|
||||
return {
|
||||
value: arr[keys[keyIndex++]],
|
||||
done: false
|
||||
};
|
||||
else
|
||||
return {
|
||||
value: undefined,
|
||||
done: true
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
||||
return iterable;
|
||||
}
|
||||
|
||||
/*
|
||||
* 3. Reflect.Loader
|
||||
*
|
||||
* We skip the entire native internal pipeline, just providing the bare API
|
||||
*/
|
||||
// 3.1.1
|
||||
function Loader () {
|
||||
this.registry = new Registry();
|
||||
}
|
||||
// 3.3.1
|
||||
Loader.prototype.constructor = Loader;
|
||||
|
||||
function ensureInstantiated (module) {
|
||||
if (module === undefined)
|
||||
return;
|
||||
if (module instanceof ModuleNamespace === false && module[toStringTag] !== 'module')
|
||||
throw new TypeError('Module instantiation did not return a valid namespace object.');
|
||||
return module;
|
||||
}
|
||||
|
||||
// 3.3.2
|
||||
Loader.prototype.import = function (key, parent) {
|
||||
if (typeof key !== 'string')
|
||||
throw new TypeError('Loader import method must be passed a module key string');
|
||||
// custom resolveInstantiate combined hook for better perf
|
||||
var loader = this;
|
||||
return resolvedPromise
|
||||
.then(function () {
|
||||
return loader[RESOLVE_INSTANTIATE](key, parent);
|
||||
})
|
||||
.then(ensureInstantiated)
|
||||
//.then(Module.evaluate)
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Loading ' + key + (parent ? ' from ' + parent : ''));
|
||||
});
|
||||
};
|
||||
// 3.3.3
|
||||
var RESOLVE = Loader.resolve = createSymbol('resolve');
|
||||
|
||||
/*
|
||||
* Combined resolve / instantiate hook
|
||||
*
|
||||
* Not in current reduced spec, but necessary to separate RESOLVE from RESOLVE + INSTANTIATE as described
|
||||
* in the spec notes of this repo to ensure that loader.resolve doesn't instantiate when not wanted.
|
||||
*
|
||||
* We implement RESOLVE_INSTANTIATE as a single hook instead of a separate INSTANTIATE in order to avoid
|
||||
* the need for double registry lookups as a performance optimization.
|
||||
*/
|
||||
var RESOLVE_INSTANTIATE = Loader.resolveInstantiate = createSymbol('resolveInstantiate');
|
||||
|
||||
// default resolveInstantiate is just to call resolve and then get from the registry
|
||||
// this provides compatibility for the resolveInstantiate optimization
|
||||
Loader.prototype[RESOLVE_INSTANTIATE] = function (key, parent) {
|
||||
var loader = this;
|
||||
return loader.resolve(key, parent)
|
||||
.then(function (resolved) {
|
||||
return loader.registry.get(resolved);
|
||||
});
|
||||
};
|
||||
|
||||
function ensureResolution (resolvedKey) {
|
||||
if (resolvedKey === undefined)
|
||||
throw new RangeError('No resolution found.');
|
||||
return resolvedKey;
|
||||
}
|
||||
|
||||
Loader.prototype.resolve = function (key, parent) {
|
||||
var loader = this;
|
||||
return resolvedPromise
|
||||
.then(function() {
|
||||
return loader[RESOLVE](key, parent);
|
||||
})
|
||||
.then(ensureResolution)
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Resolving ' + key + (parent ? ' to ' + parent : ''));
|
||||
});
|
||||
};
|
||||
|
||||
// 3.3.4 (import without evaluate)
|
||||
// this is not documented because the use of deferred evaluation as in Module.evaluate is not
|
||||
// documented, as it is not considered a stable feature to be encouraged
|
||||
// Loader.prototype.load may well be deprecated if this stays disabled
|
||||
/* Loader.prototype.load = function (key, parent) {
|
||||
return Promise.resolve(this[RESOLVE_INSTANTIATE](key, parent || this.key))
|
||||
.catch(function (err) {
|
||||
throw addToError(err, 'Loading ' + key + (parent ? ' from ' + parent : ''));
|
||||
});
|
||||
}; */
|
||||
|
||||
/*
|
||||
* 4. Registry
|
||||
*
|
||||
* Instead of structuring through a Map, just use a dictionary object
|
||||
* We throw for construction attempts so this doesn't affect the public API
|
||||
*
|
||||
* Registry has been adjusted to use Namespace objects over ModuleStatus objects
|
||||
* as part of simplifying loader API implementation
|
||||
*/
|
||||
var iteratorSupport = typeof Symbol !== 'undefined' && Symbol.iterator;
|
||||
var REGISTRY = createSymbol('registry');
|
||||
function Registry() {
|
||||
this[REGISTRY] = {};
|
||||
}
|
||||
// 4.4.1
|
||||
if (iteratorSupport) {
|
||||
// 4.4.2
|
||||
Registry.prototype[Symbol.iterator] = function () {
|
||||
return this.entries()[Symbol.iterator]();
|
||||
};
|
||||
|
||||
// 4.4.3
|
||||
Registry.prototype.entries = function () {
|
||||
var registry = this[REGISTRY];
|
||||
return arrayValues(Object.keys(registry).map(function (key) {
|
||||
return [key, registry[key]];
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
// 4.4.4
|
||||
Registry.prototype.keys = function () {
|
||||
return arrayValues(Object.keys(this[REGISTRY]));
|
||||
};
|
||||
// 4.4.5
|
||||
Registry.prototype.values = function () {
|
||||
var registry = this[REGISTRY];
|
||||
return arrayValues(Object.keys(registry).map(function (key) {
|
||||
return registry[key];
|
||||
}));
|
||||
};
|
||||
// 4.4.6
|
||||
Registry.prototype.get = function (key) {
|
||||
return this[REGISTRY][key];
|
||||
};
|
||||
// 4.4.7
|
||||
Registry.prototype.set = function (key, namespace) {
|
||||
if (!(namespace instanceof ModuleNamespace || namespace[toStringTag] === 'module'))
|
||||
throw new Error('Registry must be set with an instance of Module Namespace');
|
||||
this[REGISTRY][key] = namespace;
|
||||
return this;
|
||||
};
|
||||
// 4.4.8
|
||||
Registry.prototype.has = function (key) {
|
||||
return Object.hasOwnProperty.call(this[REGISTRY], key);
|
||||
};
|
||||
// 4.4.9
|
||||
Registry.prototype.delete = function (key) {
|
||||
if (Object.hasOwnProperty.call(this[REGISTRY], key)) {
|
||||
delete this[REGISTRY][key];
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/*
|
||||
* Simple ModuleNamespace Exotic object based on a baseObject
|
||||
* We export this for allowing a fast-path for module namespace creation over Module descriptors
|
||||
*/
|
||||
// var EVALUATE = createSymbol('evaluate');
|
||||
var BASE_OBJECT = createSymbol('baseObject');
|
||||
|
||||
// 8.3.1 Reflect.Module
|
||||
/*
|
||||
* Best-effort simplified non-spec implementation based on
|
||||
* a baseObject referenced via getters.
|
||||
*
|
||||
* Allows:
|
||||
*
|
||||
* loader.registry.set('x', new Module({ default: 'x' }));
|
||||
*
|
||||
* Optional evaluation function provides experimental Module.evaluate
|
||||
* support for non-executed modules in registry.
|
||||
*/
|
||||
function ModuleNamespace (baseObject/*, evaluate*/) {
|
||||
Object.defineProperty(this, BASE_OBJECT, {
|
||||
value: baseObject
|
||||
});
|
||||
|
||||
// evaluate defers namespace population
|
||||
/* if (evaluate) {
|
||||
Object.defineProperty(this, EVALUATE, {
|
||||
value: evaluate,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
}
|
||||
else { */
|
||||
Object.keys(baseObject).forEach(extendNamespace, this);
|
||||
//}
|
||||
};
|
||||
// 8.4.2
|
||||
ModuleNamespace.prototype = Object.create(null);
|
||||
|
||||
if (toStringTag)
|
||||
Object.defineProperty(ModuleNamespace.prototype, toStringTag, {
|
||||
value: 'Module'
|
||||
});
|
||||
|
||||
function extendNamespace (key) {
|
||||
Object.defineProperty(this, key, {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return this[BASE_OBJECT][key];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* function doEvaluate (evaluate, context) {
|
||||
try {
|
||||
evaluate.call(context);
|
||||
}
|
||||
catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
// 8.4.1 Module.evaluate... not documented or used because this is potentially unstable
|
||||
Module.evaluate = function (ns) {
|
||||
var evaluate = ns[EVALUATE];
|
||||
if (evaluate) {
|
||||
ns[EVALUATE] = undefined;
|
||||
var err = doEvaluate(evaluate);
|
||||
if (err) {
|
||||
// cache the error
|
||||
ns[EVALUATE] = function () {
|
||||
throw err;
|
||||
};
|
||||
throw err;
|
||||
}
|
||||
Object.keys(ns[BASE_OBJECT]).forEach(extendNamespace, ns);
|
||||
}
|
||||
// make chainable
|
||||
return ns;
|
||||
}; */
|
||||
|
||||
1446
public/novnc/node_modules/es-module-loader/core/register-loader.js
generated
vendored
1446
public/novnc/node_modules/es-module-loader/core/register-loader.js
generated
vendored
File diff suppressed because it is too large
Load Diff
256
public/novnc/node_modules/es-module-loader/core/resolve.js
generated
vendored
256
public/novnc/node_modules/es-module-loader/core/resolve.js
generated
vendored
@@ -1,128 +1,128 @@
|
||||
import { isNode } from './common.js';
|
||||
|
||||
/*
|
||||
* Optimized URL normalization assuming a syntax-valid URL parent
|
||||
*/
|
||||
function throwResolveError (relUrl, parentUrl) {
|
||||
throw new RangeError('Unable to resolve "' + relUrl + '" to ' + parentUrl);
|
||||
}
|
||||
var backslashRegEx = /\\/g;
|
||||
export function resolveIfNotPlain (relUrl, parentUrl) {
|
||||
if (relUrl[0] === ' ' || relUrl[relUrl.length - 1] === ' ')
|
||||
relUrl = relUrl.trim();
|
||||
var parentProtocol = parentUrl && parentUrl.substr(0, parentUrl.indexOf(':') + 1);
|
||||
|
||||
var firstChar = relUrl[0];
|
||||
var secondChar = relUrl[1];
|
||||
|
||||
// protocol-relative
|
||||
if (firstChar === '/' && secondChar === '/') {
|
||||
if (!parentProtocol)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
if (relUrl.indexOf('\\') !== -1)
|
||||
relUrl = relUrl.replace(backslashRegEx, '/');
|
||||
return parentProtocol + relUrl;
|
||||
}
|
||||
// relative-url
|
||||
else if (firstChar === '.' && (secondChar === '/' || secondChar === '.' && (relUrl[2] === '/' || relUrl.length === 2 && (relUrl += '/')) ||
|
||||
relUrl.length === 1 && (relUrl += '/')) ||
|
||||
firstChar === '/') {
|
||||
if (relUrl.indexOf('\\') !== -1)
|
||||
relUrl = relUrl.replace(backslashRegEx, '/');
|
||||
var parentIsPlain = !parentProtocol || parentUrl[parentProtocol.length] !== '/';
|
||||
|
||||
// read pathname from parent if a URL
|
||||
// pathname taken to be part after leading "/"
|
||||
var pathname;
|
||||
if (parentIsPlain) {
|
||||
// resolving to a plain parent -> skip standard URL prefix, and treat entire parent as pathname
|
||||
if (parentUrl === undefined)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
pathname = parentUrl;
|
||||
}
|
||||
else if (parentUrl[parentProtocol.length + 1] === '/') {
|
||||
// resolving to a :// so we need to read out the auth and host
|
||||
if (parentProtocol !== 'file:') {
|
||||
pathname = parentUrl.substr(parentProtocol.length + 2);
|
||||
pathname = pathname.substr(pathname.indexOf('/') + 1);
|
||||
}
|
||||
else {
|
||||
pathname = parentUrl.substr(8);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// resolving to :/ so pathname is the /... part
|
||||
pathname = parentUrl.substr(parentProtocol.length + 1);
|
||||
}
|
||||
|
||||
if (firstChar === '/') {
|
||||
if (parentIsPlain)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
else
|
||||
return parentUrl.substr(0, parentUrl.length - pathname.length - 1) + relUrl;
|
||||
}
|
||||
|
||||
// join together and split for removal of .. and . segments
|
||||
// looping the string instead of anything fancy for perf reasons
|
||||
// '../../../../../z' resolved to 'x/y' is just 'z' regardless of parentIsPlain
|
||||
var segmented = pathname.substr(0, pathname.lastIndexOf('/') + 1) + relUrl;
|
||||
|
||||
var output = [];
|
||||
var segmentIndex = -1;
|
||||
|
||||
for (var i = 0; i < segmented.length; i++) {
|
||||
// busy reading a segment - only terminate on '/'
|
||||
if (segmentIndex !== -1) {
|
||||
if (segmented[i] === '/') {
|
||||
output.push(segmented.substring(segmentIndex, i + 1));
|
||||
segmentIndex = -1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// new segment - check if it is relative
|
||||
if (segmented[i] === '.') {
|
||||
// ../ segment
|
||||
if (segmented[i + 1] === '.' && (segmented[i + 2] === '/' || i + 2 === segmented.length)) {
|
||||
output.pop();
|
||||
i += 2;
|
||||
}
|
||||
// ./ segment
|
||||
else if (segmented[i + 1] === '/' || i + 1 === segmented.length) {
|
||||
i += 1;
|
||||
}
|
||||
else {
|
||||
// the start of a new segment as below
|
||||
segmentIndex = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
// this is the plain URI backtracking error (../, package:x -> error)
|
||||
if (parentIsPlain && output.length === 0)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// it is the start of a new segment
|
||||
segmentIndex = i;
|
||||
}
|
||||
// finish reading out the last segment
|
||||
if (segmentIndex !== -1)
|
||||
output.push(segmented.substr(segmentIndex));
|
||||
|
||||
return parentUrl.substr(0, parentUrl.length - pathname.length) + output.join('');
|
||||
}
|
||||
|
||||
// sanitizes and verifies (by returning undefined if not a valid URL-like form)
|
||||
// Windows filepath compatibility is an added convenience here
|
||||
var protocolIndex = relUrl.indexOf(':');
|
||||
if (protocolIndex !== -1) {
|
||||
if (isNode) {
|
||||
// C:\x becomes file:///c:/x (we don't support C|\x)
|
||||
if (relUrl[1] === ':' && relUrl[2] === '\\' && relUrl[0].match(/[a-z]/i))
|
||||
return 'file:///' + relUrl.replace(backslashRegEx, '/');
|
||||
}
|
||||
return relUrl;
|
||||
}
|
||||
}
|
||||
import { isNode } from './common.js';
|
||||
|
||||
/*
|
||||
* Optimized URL normalization assuming a syntax-valid URL parent
|
||||
*/
|
||||
function throwResolveError (relUrl, parentUrl) {
|
||||
throw new RangeError('Unable to resolve "' + relUrl + '" to ' + parentUrl);
|
||||
}
|
||||
var backslashRegEx = /\\/g;
|
||||
export function resolveIfNotPlain (relUrl, parentUrl) {
|
||||
if (relUrl[0] === ' ' || relUrl[relUrl.length - 1] === ' ')
|
||||
relUrl = relUrl.trim();
|
||||
var parentProtocol = parentUrl && parentUrl.substr(0, parentUrl.indexOf(':') + 1);
|
||||
|
||||
var firstChar = relUrl[0];
|
||||
var secondChar = relUrl[1];
|
||||
|
||||
// protocol-relative
|
||||
if (firstChar === '/' && secondChar === '/') {
|
||||
if (!parentProtocol)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
if (relUrl.indexOf('\\') !== -1)
|
||||
relUrl = relUrl.replace(backslashRegEx, '/');
|
||||
return parentProtocol + relUrl;
|
||||
}
|
||||
// relative-url
|
||||
else if (firstChar === '.' && (secondChar === '/' || secondChar === '.' && (relUrl[2] === '/' || relUrl.length === 2 && (relUrl += '/')) ||
|
||||
relUrl.length === 1 && (relUrl += '/')) ||
|
||||
firstChar === '/') {
|
||||
if (relUrl.indexOf('\\') !== -1)
|
||||
relUrl = relUrl.replace(backslashRegEx, '/');
|
||||
var parentIsPlain = !parentProtocol || parentUrl[parentProtocol.length] !== '/';
|
||||
|
||||
// read pathname from parent if a URL
|
||||
// pathname taken to be part after leading "/"
|
||||
var pathname;
|
||||
if (parentIsPlain) {
|
||||
// resolving to a plain parent -> skip standard URL prefix, and treat entire parent as pathname
|
||||
if (parentUrl === undefined)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
pathname = parentUrl;
|
||||
}
|
||||
else if (parentUrl[parentProtocol.length + 1] === '/') {
|
||||
// resolving to a :// so we need to read out the auth and host
|
||||
if (parentProtocol !== 'file:') {
|
||||
pathname = parentUrl.substr(parentProtocol.length + 2);
|
||||
pathname = pathname.substr(pathname.indexOf('/') + 1);
|
||||
}
|
||||
else {
|
||||
pathname = parentUrl.substr(8);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// resolving to :/ so pathname is the /... part
|
||||
pathname = parentUrl.substr(parentProtocol.length + 1);
|
||||
}
|
||||
|
||||
if (firstChar === '/') {
|
||||
if (parentIsPlain)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
else
|
||||
return parentUrl.substr(0, parentUrl.length - pathname.length - 1) + relUrl;
|
||||
}
|
||||
|
||||
// join together and split for removal of .. and . segments
|
||||
// looping the string instead of anything fancy for perf reasons
|
||||
// '../../../../../z' resolved to 'x/y' is just 'z' regardless of parentIsPlain
|
||||
var segmented = pathname.substr(0, pathname.lastIndexOf('/') + 1) + relUrl;
|
||||
|
||||
var output = [];
|
||||
var segmentIndex = -1;
|
||||
|
||||
for (var i = 0; i < segmented.length; i++) {
|
||||
// busy reading a segment - only terminate on '/'
|
||||
if (segmentIndex !== -1) {
|
||||
if (segmented[i] === '/') {
|
||||
output.push(segmented.substring(segmentIndex, i + 1));
|
||||
segmentIndex = -1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// new segment - check if it is relative
|
||||
if (segmented[i] === '.') {
|
||||
// ../ segment
|
||||
if (segmented[i + 1] === '.' && (segmented[i + 2] === '/' || i + 2 === segmented.length)) {
|
||||
output.pop();
|
||||
i += 2;
|
||||
}
|
||||
// ./ segment
|
||||
else if (segmented[i + 1] === '/' || i + 1 === segmented.length) {
|
||||
i += 1;
|
||||
}
|
||||
else {
|
||||
// the start of a new segment as below
|
||||
segmentIndex = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
// this is the plain URI backtracking error (../, package:x -> error)
|
||||
if (parentIsPlain && output.length === 0)
|
||||
throwResolveError(relUrl, parentUrl);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// it is the start of a new segment
|
||||
segmentIndex = i;
|
||||
}
|
||||
// finish reading out the last segment
|
||||
if (segmentIndex !== -1)
|
||||
output.push(segmented.substr(segmentIndex));
|
||||
|
||||
return parentUrl.substr(0, parentUrl.length - pathname.length) + output.join('');
|
||||
}
|
||||
|
||||
// sanitizes and verifies (by returning undefined if not a valid URL-like form)
|
||||
// Windows filepath compatibility is an added convenience here
|
||||
var protocolIndex = relUrl.indexOf(':');
|
||||
if (protocolIndex !== -1) {
|
||||
if (isNode) {
|
||||
// C:\x becomes file:///c:/x (we don't support C|\x)
|
||||
if (relUrl[1] === ':' && relUrl[2] === '\\' && relUrl[0].match(/[a-z]/i))
|
||||
return 'file:///' + relUrl.replace(backslashRegEx, '/');
|
||||
}
|
||||
return relUrl;
|
||||
}
|
||||
}
|
||||
|
||||
80
public/novnc/node_modules/es-module-loader/docs/system-register-dynamic.md
generated
vendored
80
public/novnc/node_modules/es-module-loader/docs/system-register-dynamic.md
generated
vendored
@@ -1,40 +1,40 @@
|
||||
### System.registerDynamic
|
||||
|
||||
Like [System.register](system-register.md), `System.registerDynamic` is a wrapper format to ensure the exact linking
|
||||
semantics of modules in all environments, such that it can wrap CommonJS, AMD and global modules.
|
||||
|
||||
Babel transforms can be used to convert these formats into `System.registerDynamic`. Currently the existing
|
||||
transforms are still coupled to SystemJS as they rely on special helper functions and modules in SystemJS,
|
||||
but the goal is to make these fully independent transformers in future:
|
||||
|
||||
* CommonJS: [babel-plugin-transform-cjs-system-wrapper](https://github.com/systemjs/babel-plugin-transform-cjs-system-wrapper)
|
||||
* AMD: [babel-plugin-transform-amd-system-wrapper](https://github.com/jrauschenbusch/babel-plugin-transform-amd-system-wrapper)
|
||||
* Global: [babel-plugin-transform-global-system-wrapper](https://github.com/systemjs/babel-plugin-transform-global-system-wrapper)
|
||||
|
||||
Like `System.register`, `System.registerDynamic` has both an anonymous and named form, by making the first string key argument
|
||||
optional. This allows it to work as both a bundle transport format and a wrapper.
|
||||
|
||||
The format of `System.registerDynamic` is designed to closely match CommonJS:
|
||||
|
||||
```javascript
|
||||
System.registerDynamic('optional-name', ['unnormalized-dependency'], true, function (require, exports, module) {
|
||||
// require is executing - the dependency is only executed when we hit this require
|
||||
// Note that we can only require modules that have already been declared through the dependencies
|
||||
// array above. This is because synchronous module instantiation is not supported in the loader.
|
||||
var dep = require('unnormalized-dependency');
|
||||
|
||||
// named exports
|
||||
exports.someExport = 'export';
|
||||
// Like CommonJS, "this" is the module.exports
|
||||
this.export = 'another';
|
||||
|
||||
// module.id can be read as a string (but it is a file:/// URL)
|
||||
var thisModuleKey = module.id;
|
||||
|
||||
// module exports object can even be set directly
|
||||
module.exports = 'can even assign module exports';
|
||||
});
|
||||
```
|
||||
|
||||
The resultant `ModuleNamespace` object is taken to be the object with the `default` export equal to the `module.exports` value
|
||||
from the CommonJS module, with this property set to the exports object from the beginning of the linking phase.
|
||||
### System.registerDynamic
|
||||
|
||||
Like [System.register](system-register.md), `System.registerDynamic` is a wrapper format to ensure the exact linking
|
||||
semantics of modules in all environments, such that it can wrap CommonJS, AMD and global modules.
|
||||
|
||||
Babel transforms can be used to convert these formats into `System.registerDynamic`. Currently the existing
|
||||
transforms are still coupled to SystemJS as they rely on special helper functions and modules in SystemJS,
|
||||
but the goal is to make these fully independent transformers in future:
|
||||
|
||||
* CommonJS: [babel-plugin-transform-cjs-system-wrapper](https://github.com/systemjs/babel-plugin-transform-cjs-system-wrapper)
|
||||
* AMD: [babel-plugin-transform-amd-system-wrapper](https://github.com/jrauschenbusch/babel-plugin-transform-amd-system-wrapper)
|
||||
* Global: [babel-plugin-transform-global-system-wrapper](https://github.com/systemjs/babel-plugin-transform-global-system-wrapper)
|
||||
|
||||
Like `System.register`, `System.registerDynamic` has both an anonymous and named form, by making the first string key argument
|
||||
optional. This allows it to work as both a bundle transport format and a wrapper.
|
||||
|
||||
The format of `System.registerDynamic` is designed to closely match CommonJS:
|
||||
|
||||
```javascript
|
||||
System.registerDynamic('optional-name', ['unnormalized-dependency'], true, function (require, exports, module) {
|
||||
// require is executing - the dependency is only executed when we hit this require
|
||||
// Note that we can only require modules that have already been declared through the dependencies
|
||||
// array above. This is because synchronous module instantiation is not supported in the loader.
|
||||
var dep = require('unnormalized-dependency');
|
||||
|
||||
// named exports
|
||||
exports.someExport = 'export';
|
||||
// Like CommonJS, "this" is the module.exports
|
||||
this.export = 'another';
|
||||
|
||||
// module.id can be read as a string (but it is a file:/// URL)
|
||||
var thisModuleKey = module.id;
|
||||
|
||||
// module exports object can even be set directly
|
||||
module.exports = 'can even assign module exports';
|
||||
});
|
||||
```
|
||||
|
||||
The resultant `ModuleNamespace` object is taken to be the object with the `default` export equal to the `module.exports` value
|
||||
from the CommonJS module, with this property set to the exports object from the beginning of the linking phase.
|
||||
|
||||
302
public/novnc/node_modules/es-module-loader/docs/system-register.md
generated
vendored
302
public/novnc/node_modules/es-module-loader/docs/system-register.md
generated
vendored
@@ -1,152 +1,152 @@
|
||||
### What it is
|
||||
|
||||
System.register can be considered as a new module format designed to support the exact semantics of ES6 modules within ES5.
|
||||
It is a format that was developed out of collaboration and is supported as a module output in Traceur (as _instantiate_),
|
||||
Babel and TypeScript (as _system_). All dynamic binding and circular reference behaviors supported by ES6 modules are supported
|
||||
by this format. In this way it acts as a safe and comprehensive target format for the polyfill path into ES6 modules.
|
||||
|
||||
To run the format, a suitable loader implementation needs to be used that understands how to execute it. Currently these include
|
||||
[SystemJS](https://github.com/systemjs/systemjs), [SystemJS Self-Executing Bundles](https://github.com/systemjs/builder#sfx-bundles)
|
||||
and [ES6 Micro Loader](https://github.com/caridy/es6-micro-loader). The ES6 Module Loader polyfill also uses this format
|
||||
internally when transpiling and executing ES6.
|
||||
|
||||
#### Bundled vs On-Demand
|
||||
|
||||
Just like AMD define, System.register can be both named and anonymous.
|
||||
|
||||
When a module name string is provided as the first argument in the `System.register` call, the format is suitable for
|
||||
naming multiple modules in the same JS file creating a bundle format.
|
||||
|
||||
When files are separately compiled, with only one `System.register` call per module, the name should not be set.
|
||||
This allows the importing environment to name the module into whatever namespace it likes without imposing a specific
|
||||
schema for maximum portability.
|
||||
|
||||
### How it works
|
||||
|
||||
When compiling ES6 modules to ES5, the Traceur `instantiate` output and Babel `system` output generates something like the following:
|
||||
|
||||
```javascript
|
||||
import { p as q } from './dep';
|
||||
|
||||
var s = 'local';
|
||||
|
||||
export function func() {
|
||||
return q;
|
||||
}
|
||||
|
||||
export class C {
|
||||
}
|
||||
```
|
||||
|
||||
->
|
||||
|
||||
```javascript
|
||||
System.register(['./dep'], function($__export, $__moduleContext) {
|
||||
var s, C, q;
|
||||
function func() {
|
||||
return q;
|
||||
}
|
||||
$__export('func', func);
|
||||
return {
|
||||
setters: [
|
||||
// every time a dependency updates an export,
|
||||
// this function is called to update the local binding
|
||||
// the setter array matches up with the dependency array above
|
||||
function(m) {
|
||||
q = m.p;
|
||||
}
|
||||
],
|
||||
execute: function() {
|
||||
// use the export function to update the exports of this module
|
||||
s = 'local';
|
||||
$__export('C', C = $traceurRuntime.createClass(...));
|
||||
var moduleName = $__moduleContext.id;
|
||||
}
|
||||
};
|
||||
});
|
||||
```
|
||||
|
||||
Initial exports and changes to exports are pushed through the setter function, `$__export`. Values of dependencies and
|
||||
changes to dependency bindings are set through the dependency setters, `setters`, corresponding to the `$__export` calls of dependencies.
|
||||
|
||||
Functions and variables get hoisted into the declaration scope. This outer function sets up all the bindings,
|
||||
and the execution is entirely separated from this process. Hoisted functions are immediately exported.
|
||||
All of the modules in the tree first run this first function setting up all the bindings.
|
||||
Then we separately run all the execution functions left to right from the bottom of the tree ending at circular references.
|
||||
|
||||
In this way we get the live binding and circular reference support exactly as expected by the spec,
|
||||
while supporting ES3 environments for the module syntax conversion.
|
||||
|
||||
#### Why the System.register name
|
||||
|
||||
Since `System` is the loader name, `System.register` is a function that allows us to _define_ a module directly into the loader instance.
|
||||
|
||||
Note that the loader name is not fixed and can be changed here. For example to `SystemJS.register` in the case of bundling for SystemJS.
|
||||
|
||||
When code is executed, we only need to assume that `System` is in the scope of execution.
|
||||
|
||||
This then has the same advantages of the AMD `define` function in that it is a CSP-compatible output mechanism, allowing support
|
||||
in environments where _eval_ is not supported, which would be necessary for other types of plain script outputs.
|
||||
|
||||
#### Why deferred execution
|
||||
|
||||
The use of `return { setters: ..., execute: ... }` is done instead of direct execution to allow bindings to be fully propogated
|
||||
through the module tree before running execution functions. This separation of setting up bindings, and then running execution
|
||||
allows us to match the exact ES module execution semantics.
|
||||
|
||||
This enables supporting the edge cases of for example:
|
||||
|
||||
a.js
|
||||
```javascript
|
||||
import {b} from './b.js';
|
||||
export function a() {
|
||||
b();
|
||||
}
|
||||
```
|
||||
|
||||
b.js
|
||||
```javascript
|
||||
import {a} from './a.js';
|
||||
export function b() {
|
||||
console.log('b');
|
||||
}
|
||||
a();
|
||||
```
|
||||
|
||||
If a.js is imported first, then b.js will execute first. In ES module execution, b.js will successfully call the function export
|
||||
from a.js before a.js has even executed since function bindings are setup before execution. This is supported fully by
|
||||
the deferred loading step in this System.register approach.
|
||||
|
||||
It can be argued that this full support of ES module circular references is unnecessary. There is minimal additional performance
|
||||
cost to this extra return statement though and it ensures that during the transition period where ES modules and traditional
|
||||
environments are running side-by-side, that the best parity is provided between the systems.
|
||||
|
||||
#### Bulk exports
|
||||
|
||||
The `$__export` function above can also be used to export multiple exports at the same time:
|
||||
|
||||
```javascript
|
||||
$__export({ key: 'value', another: 'value' });
|
||||
```
|
||||
|
||||
This is useful for performance of deep re-exports where unnecessary setter operations can be avoided, otherwise setter performance
|
||||
grows quadratically with the `export *` tree depth, and can cause noticable slowdowns on large trees.
|
||||
|
||||
#### Metadata
|
||||
|
||||
The next iteration of this format will include support for ES6 module meta information through a new
|
||||
System.register argument as soon as the specification for this is proposed.
|
||||
|
||||
### Limitations
|
||||
|
||||
The main limitation with authoring in this format and transitioning to ES6 is if unresolved exports exist such as:
|
||||
|
||||
```javascript
|
||||
import {p} from 'q';
|
||||
```
|
||||
|
||||
Where module `q` does not export a `p` at all.
|
||||
|
||||
This code will run in the System.register output but not in ES6 environments.
|
||||
|
||||
### What it is
|
||||
|
||||
System.register can be considered as a new module format designed to support the exact semantics of ES6 modules within ES5.
|
||||
It is a format that was developed out of collaboration and is supported as a module output in Traceur (as _instantiate_),
|
||||
Babel and TypeScript (as _system_). All dynamic binding and circular reference behaviors supported by ES6 modules are supported
|
||||
by this format. In this way it acts as a safe and comprehensive target format for the polyfill path into ES6 modules.
|
||||
|
||||
To run the format, a suitable loader implementation needs to be used that understands how to execute it. Currently these include
|
||||
[SystemJS](https://github.com/systemjs/systemjs), [SystemJS Self-Executing Bundles](https://github.com/systemjs/builder#sfx-bundles)
|
||||
and [ES6 Micro Loader](https://github.com/caridy/es6-micro-loader). The ES6 Module Loader polyfill also uses this format
|
||||
internally when transpiling and executing ES6.
|
||||
|
||||
#### Bundled vs On-Demand
|
||||
|
||||
Just like AMD define, System.register can be both named and anonymous.
|
||||
|
||||
When a module name string is provided as the first argument in the `System.register` call, the format is suitable for
|
||||
naming multiple modules in the same JS file creating a bundle format.
|
||||
|
||||
When files are separately compiled, with only one `System.register` call per module, the name should not be set.
|
||||
This allows the importing environment to name the module into whatever namespace it likes without imposing a specific
|
||||
schema for maximum portability.
|
||||
|
||||
### How it works
|
||||
|
||||
When compiling ES6 modules to ES5, the Traceur `instantiate` output and Babel `system` output generates something like the following:
|
||||
|
||||
```javascript
|
||||
import { p as q } from './dep';
|
||||
|
||||
var s = 'local';
|
||||
|
||||
export function func() {
|
||||
return q;
|
||||
}
|
||||
|
||||
export class C {
|
||||
}
|
||||
```
|
||||
|
||||
->
|
||||
|
||||
```javascript
|
||||
System.register(['./dep'], function($__export, $__moduleContext) {
|
||||
var s, C, q;
|
||||
function func() {
|
||||
return q;
|
||||
}
|
||||
$__export('func', func);
|
||||
return {
|
||||
setters: [
|
||||
// every time a dependency updates an export,
|
||||
// this function is called to update the local binding
|
||||
// the setter array matches up with the dependency array above
|
||||
function(m) {
|
||||
q = m.p;
|
||||
}
|
||||
],
|
||||
execute: function() {
|
||||
// use the export function to update the exports of this module
|
||||
s = 'local';
|
||||
$__export('C', C = $traceurRuntime.createClass(...));
|
||||
var moduleName = $__moduleContext.id;
|
||||
}
|
||||
};
|
||||
});
|
||||
```
|
||||
|
||||
Initial exports and changes to exports are pushed through the setter function, `$__export`. Values of dependencies and
|
||||
changes to dependency bindings are set through the dependency setters, `setters`, corresponding to the `$__export` calls of dependencies.
|
||||
|
||||
Functions and variables get hoisted into the declaration scope. This outer function sets up all the bindings,
|
||||
and the execution is entirely separated from this process. Hoisted functions are immediately exported.
|
||||
All of the modules in the tree first run this first function setting up all the bindings.
|
||||
Then we separately run all the execution functions left to right from the bottom of the tree ending at circular references.
|
||||
|
||||
In this way we get the live binding and circular reference support exactly as expected by the spec,
|
||||
while supporting ES3 environments for the module syntax conversion.
|
||||
|
||||
#### Why the System.register name
|
||||
|
||||
Since `System` is the loader name, `System.register` is a function that allows us to _define_ a module directly into the loader instance.
|
||||
|
||||
Note that the loader name is not fixed and can be changed here. For example to `SystemJS.register` in the case of bundling for SystemJS.
|
||||
|
||||
When code is executed, we only need to assume that `System` is in the scope of execution.
|
||||
|
||||
This then has the same advantages of the AMD `define` function in that it is a CSP-compatible output mechanism, allowing support
|
||||
in environments where _eval_ is not supported, which would be necessary for other types of plain script outputs.
|
||||
|
||||
#### Why deferred execution
|
||||
|
||||
The use of `return { setters: ..., execute: ... }` is done instead of direct execution to allow bindings to be fully propogated
|
||||
through the module tree before running execution functions. This separation of setting up bindings, and then running execution
|
||||
allows us to match the exact ES module execution semantics.
|
||||
|
||||
This enables supporting the edge cases of for example:
|
||||
|
||||
a.js
|
||||
```javascript
|
||||
import {b} from './b.js';
|
||||
export function a() {
|
||||
b();
|
||||
}
|
||||
```
|
||||
|
||||
b.js
|
||||
```javascript
|
||||
import {a} from './a.js';
|
||||
export function b() {
|
||||
console.log('b');
|
||||
}
|
||||
a();
|
||||
```
|
||||
|
||||
If a.js is imported first, then b.js will execute first. In ES module execution, b.js will successfully call the function export
|
||||
from a.js before a.js has even executed since function bindings are setup before execution. This is supported fully by
|
||||
the deferred loading step in this System.register approach.
|
||||
|
||||
It can be argued that this full support of ES module circular references is unnecessary. There is minimal additional performance
|
||||
cost to this extra return statement though and it ensures that during the transition period where ES modules and traditional
|
||||
environments are running side-by-side, that the best parity is provided between the systems.
|
||||
|
||||
#### Bulk exports
|
||||
|
||||
The `$__export` function above can also be used to export multiple exports at the same time:
|
||||
|
||||
```javascript
|
||||
$__export({ key: 'value', another: 'value' });
|
||||
```
|
||||
|
||||
This is useful for performance of deep re-exports where unnecessary setter operations can be avoided, otherwise setter performance
|
||||
grows quadratically with the `export *` tree depth, and can cause noticable slowdowns on large trees.
|
||||
|
||||
#### Metadata
|
||||
|
||||
The next iteration of this format will include support for ES6 module meta information through a new
|
||||
System.register argument as soon as the specification for this is proposed.
|
||||
|
||||
### Limitations
|
||||
|
||||
The main limitation with authoring in this format and transitioning to ES6 is if unresolved exports exist such as:
|
||||
|
||||
```javascript
|
||||
import {p} from 'q';
|
||||
```
|
||||
|
||||
Where module `q` does not export a `p` at all.
|
||||
|
||||
This code will run in the System.register output but not in ES6 environments.
|
||||
|
||||
While this format can be adjusted to handle the SyntaxErrors that get thrown when an imported name does not exist, for performance and code-size constraints this is not provided. Ideally static checking via tooling should catch these issues rather.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user