#wip(emca): Started project.
This commit is contained in:
parent
7c5a8975d1
commit
223c355603
133
Public/ecma/Sizerboard.ecma.js
Normal file
133
Public/ecma/Sizerboard.ecma.js
Normal file
@ -0,0 +1,133 @@
|
||||
Sizerboard = function(inputs){
|
||||
|
||||
const self = this,
|
||||
default_settings = {},
|
||||
settings = {};
|
||||
let started = false;
|
||||
|
||||
const construct = () => {};
|
||||
|
||||
this.start = callback => {
|
||||
|
||||
const end = status => typeof callback == "function" && callback(status);
|
||||
|
||||
if(started){
|
||||
end(false);
|
||||
return false;
|
||||
};
|
||||
started = true;
|
||||
|
||||
end(true);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
this.nulls = nulls => typeof nulls == "boolean" ? nulls : self.settings("nulls", null, false, false);
|
||||
|
||||
this.default_value = (_default, nulls) => _default !== undefined && (_default !== null || self.nulls(nulls)) ? _default : self.settings("default_value", null, null, true);
|
||||
|
||||
this.settings = (keys, inputs, _default, nulls) => {
|
||||
|
||||
const m = (keys = (typeof inputs == "object" && inputs instanceof Array ? inputs : [inputs]).filter(subinputs => typeof subinpunts == "string" && subinputs.trim()).map(subinputs => subinputs.trim())).length;
|
||||
|
||||
if(m){
|
||||
|
||||
const l = (inputs = (
|
||||
inputs == "object" ? inputs instanceof Array ? inputs : [inputs] : []
|
||||
).concat(
|
||||
[inputs, settings, default_settings]
|
||||
)).length;
|
||||
|
||||
nulls = self.nulls(nulls);
|
||||
|
||||
for(let i = 0; i < l; i ++)
|
||||
if(typeof inputs[i] == "object")
|
||||
for(let j = 0; j < m; j ++)
|
||||
if(inputs[i][keys[j]] !== undefined && (nulls || inputs[i][keys[j]] !== null))
|
||||
return inputs[i][keys[j]];
|
||||
};
|
||||
return self.default_value(_default, nulls);
|
||||
};
|
||||
|
||||
this.load_file = (url, callback) => {
|
||||
|
||||
let ended = false;
|
||||
const ajax = new XMLHttpRequest(),
|
||||
end = message => !ended && (ended = true) && typeof callback == "function" && callback(ajax.responseText, ajax.status, ajax.readyState, message, message == "OK");
|
||||
timeout = self.settings(["ajax_timeout", "timeout"]),
|
||||
date = Date.now();
|
||||
|
||||
ajax.send("get", url, true);
|
||||
ajax.timeout = timeout;
|
||||
ajax.onreadystatechange = () => {
|
||||
if(ended)
|
||||
return;
|
||||
if(ajax.readyState == 4)
|
||||
end((ajax.status >= 200 && ajax.status < 300) || [301, 302, 304].includes(ajax.status) ? "OK" : "HTTP_ERROR");
|
||||
else if(Date.now() - date > timeout)
|
||||
end("FORCED_TIMEOUT");
|
||||
};
|
||||
ajax.send(null);
|
||||
|
||||
ajax.onabort = () => end("ABORTED");
|
||||
ajax.onerror = () => end("ERROR");
|
||||
ajax.ontimeout = () => end("TIMEOUT");
|
||||
|
||||
return ajax;
|
||||
};
|
||||
|
||||
this.execute_array_dictionaries = (inputs, partial_callback, full_callback, i) => {
|
||||
|
||||
if(typeof inputs != "object" || inputs instanceof Array || (i || (i = 0)) >= inputs.length){
|
||||
typeof full_callback == "function" && full_callback();
|
||||
return;
|
||||
};
|
||||
|
||||
const end = () => {
|
||||
inputs[i] && typeof partial_callback == "function" && partial_callback(inputs[i]);
|
||||
execute_array_dictionaries(inputs, partial_callback, full_callback, i + 1);
|
||||
};
|
||||
|
||||
if(!inputs[i]){
|
||||
end();
|
||||
return;
|
||||
};
|
||||
|
||||
if(typeof inputs[i] == "object"){
|
||||
if(inputs[i] instanceof Array){
|
||||
self.execute_array_dictionaries(inputs[i], partial_callback, end, 0);
|
||||
return;
|
||||
};
|
||||
}else if(typeof inputs[i] == "string"){
|
||||
|
||||
let json;
|
||||
|
||||
if(/^(\{(.|[\r\n])*\}|\[(.|[\r\n])*)\])$/.test(inputs[i].trim()){
|
||||
try{
|
||||
json = JSON.parse(inputs[i]);
|
||||
}catch(exception){};
|
||||
json && self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0);
|
||||
}else
|
||||
self.load_file(inputs[i], data => {
|
||||
try{
|
||||
json = JSON.parse(data);
|
||||
}catch(exception){};
|
||||
json && self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0);
|
||||
});
|
||||
}else
|
||||
end();
|
||||
|
||||
};
|
||||
|
||||
this.settings_add = (inputs, overwrite, callback) => {
|
||||
typeof overwrite != "boolean" && (overwrite = settings_overwrite);
|
||||
self.execute_array_dictionaries(inputs, data => {
|
||||
for(const key in data)
|
||||
if(overwrite || settings[key] === undefined)
|
||||
settings[key] = data[key];
|
||||
}, callback);
|
||||
};
|
||||
|
||||
construct();
|
||||
|
||||
};
|
12
Public/index.html
Normal file
12
Public/index.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title data-i18n="sizerboard">Sizerboard</title>
|
||||
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/Sizerboard.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
|
||||
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user