Toolbox/static/js/app.js

494 lines
13 KiB
JavaScript

//
//***********************************************************************
// *
// This file is part of the "fubagToobox" System *
// Author: Marko Seidel *
// Copyright (C) 2021, archium GmbH *
// *
//***********************************************************************
//
/**
= Creative Commons Lizenzvertrag =
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
= Creative Commons License =
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
Individual permissions beyond the scope of this license may be available at https://archium.org.
**/
//
var local_ip = '0.0.0.0';
var local_port = '0';
var timeHandlerPassive = false;
var app = {
sid: '',
trans: {
yes: 'Yes',
no: 'No',
ok: 'OK',
cancel: 'Cancel',
items: 'Item(s)',
today: 'Heute',
close: 'Schließen',
weeks: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
months: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez']
},
lang: 'de',
theme: 'default',
user: null,
user_id: null,
user_group: null,
user_bmson: null,
schema: null,
range: null,
module: [],
timestart: 0,
timeend: 0,
active_module: 'archium',
characters:'ACBDFEGIHJLKMONPRQSUTVXWZY9876543210acbdfegihjlkmonprqsutvxwzy',
easyui: function (id) {
return $.parser.parse(id);
},
// declare all characters
generateId(length) {
let result = '';
const charlength = app.characters.length;
for ( let i = 0; i < length; i++ ) {
result += app.characters.charAt(Math.floor(Math.random() * charlength));
}
return result;
},
createID: function () {
var maxlen = 59
var actlen = 0;
var id = '';
for (var i =0; i<maxlen; i++){
var ran = Math.random(5);
id = id + app.generateId(ran);
actlen = id.length;
if (actlen >= maxlen){
id = id.substr(0, maxlen);
}
}
return 'sess_'+id;
},
getID: function (_new) {
if (((app.sid).length == 0) || (_new)) {
app.sid = app.createID();
console.log('app.getId():', _new, app.sid);
}
return app.sid;
},
// locale IP ermitteln (2021.07.14)
getLocalip: function(){
// getlocalIp();
var params = {};
params.app = (app!=null)?((typeof app.sid === 'string')?app.sid:''):'null';
params.caller = 'app.getlocalIp()';
params.fn = 'getlocalIp';
//
//console.log('>>getlocalIp(params):', params);
$.postJSON('', params, function(data){
app.message(data.msg);
//console.log('>>getlocalIp(data):', data);
if (data.success == true){
local_ip = data.ip;
}
});
}, isWindow: function (obj) {
return obj != null && obj === obj.window;
},
isWindowJ: function (obj) {
return (obj.length > 0);
},
// schliessen der dialoge auf ESC und ENTER
bindKeyaction: function (_formname){
// console.log('bindKeyaction('+_formname+')');
var dlg = $(_formname);
if (dlg.length == 1){
dlg.window('window').focus().bind('keyup', function(e){
switch(e.keyCode){
case 27:{ // ESCAPE
dlg.window('close').panel('destroy');
break;
}
case 13:{ // ENTER
// console.log('bindKeyaction('+_formname+'):', dlg);
if (app.module[app.active_module]){
if (typeof(app.module[app.active_module].gosearch) == 'function'){
app.module[app.active_module].gosearch($(dlg), dlg); // suche ausführen
}else{
if (typeof(app.module[app.active_module].gosave) == 'function'){
app.module[app.active_module].gosave(); // ergebnis sichern
}
}
}
break;
}
}
});
}
},
iffileexistExecute: function(_src, _callback, _failed) {
const xhr = new XMLHttpRequest(),
method = "GET",
url = _src;
xhr.open(method, url, true);
xhr.onreadystatechange = function() {
if (this.readyState === this.DONE) {
var status = xhr.status;
if (status === 0 || (status >= 200 && status < 400)) {
if (typeof _callback == 'function'){
_callback();
}
} else {
if (typeof _failed == 'function'){
_failed();
}
console.log('error:', xhr.responseText);
}
}
}
xhr.send();
},
makeStruct: function(_names) {
var names = _names.split(' ');
var count = names.length;
function constructor() {
for (var i = 0; i < count; i++) {
this[names[i]] = arguments[i];
}
}
return constructor;
},
message: function (msg) {
if (msg) {
switch (msg) {
case 'close': {
console.log('message.close:');
return $.messager.close();
}
default: {
//console.log('message.text:', msg.msg)
if (!msg.type)
msg.type = 'show';
msg.width = '30%';
msg.height = '25%';
$.messager.defaults.ok = app.trans.ok;
return $.messager[msg.type](msg);
}
}
}
},
confirm: function(msg, _callback){
if (msg) {
switch (msg) {
case 'close': {
console.log('message.close:');
return $.messager.close();
}
default: {
//console.log('message.text:', msg.msg)
if (!msg.type)
msg.type = 'show';
msg.width = '35%';
msg.height = '25%';
$.messager.defaults.yes = app.trans.yes;
$.messager.defaults.cancel = app.trans.cancel;
return $.messager.confirm('Information', msg.msg, _callback);
}
}
}
},
msgcenter: function(_msg, _callback){
var dlg = $.messager.show({
title: '<span style="color:red;">'+_msg.title+'</span>',
msg: _msg.msg,
width: '25%',
height: '20%',
showType:'fade',
closable: false,
style:{
right:'',
bottom:''
}
});
if (typeof _callback == 'function'){
window.setTimeout(function(_callback){
dlg.dialog('close');
_callback();
}, 3000, _callback);
}
},
// #############################################################################################
// get string between
// #############################################################################################
getstringBetween: function (_string, _start, _end){
var string = ' ' + _string;
var ini = string.indexOf(_start);
if (ini == 0) return '';
ini += _start.length;
string = string.substr(ini)
var len = string.indexOf(_end);
return string.substr(0, len);
},
getTimecompact: function(_time){
var timestr =
_time.getUTCFullYear() +
("0" + (_time.getUTCMonth()+1)).slice(-2) +
("0" + _time.getUTCDate()).slice(-2) +
("0" + _time.getUTCHours()).slice(-2) +
("0" + _time.getUTCMinutes()).slice(-2) +
("0" + _time.getUTCSeconds()).slice(-2);
//
return timestr;
},
setLogin: function (_this) {
console.log('setLogin(): ', app.sid, _this)
app.module[app.active_module].execute(_this, 'login', '');
},
themechange: function(_theme){
if (typeof _theme != 'undefined'){
var link = $('.theme').find('link');
if (link.length == 1){
app.theme = _theme;
link.attr('href', ('jeasyui/themes/'+_theme+'/easyui.css').toLowerCase());
}
}
var linkcloud = $('.cloud').find('link:first');
if (linkcloud.length == 1){
linkcloud.attr('href', ('css/cloud.css').toLowerCase());
}
},
//
win: null,
waitpos: 0,
waitint: 300,
waitrun: false,
waitmax: 100,
wait_timer: false,
wait: function(_title, _caption, _first){
window.clearTimeout(app.wait_timer);
if ((_first == true) | (app.waitpos == 0)){
app.waitrun = true;
app.waitpos = 0;
app.win = $.messager.progress({
title:_title
,width:'350px'
,msg: _caption.replace('%seconds%', Math.round(app.waitmax/10).toString())
,interval: 0
});
}
// console.log('wait-close:', app.waitpos, app.waitmax, app.wait_timer, app.waitrun);
//
if ((app.waitrun == false) || (app.waitpos >= app.waitmax)){
app.waitclose();
return;
}
app.wait_timer = window.setTimeout(function(){
app.waitpos++;
app.waitprogress(app.waitpos, 'app.wait()', app.waitpos);
app.wait(_title, _caption, false);
}, app.waitint);
},
waittitle: function(_title, _caption, _first){
app.waitrun = true;
if (_first){
app.timestart = Date.now()
$.messager.progress('close');
app.win = $.messager.progress({
title:_title,
msg:_caption,
//value: false,
interval: 0
});
if (app.win != null){
app.win.dialog('setTitle', _title);
app.win.find('.messager-p-msg').html(_caption);
}else{
app.win = $.messager.progress({
title:_title,
msg:_caption,
interval: 0
});
}
}
},
waitprogress: function(_progress, _func, _what){
app.waitpos = _progress;
if (app.win != null){
//console.log('wait-progress:', _progress, _func, _what, app.waitpos, app.waitmax, app.win);
app.win.find('.messager-p-bar').progressbar('setValue', Math.round((app.waitpos*100)/app.waitmax).toString());
}
},
waitclose: function(){
if (app.wait_timer){
window.clearTimeout(app.wait_timer);
}
app.wait_timer = false;
app.waitprogress(100);
app.waitpos = 0;
app.waitrun = false;
app.wait_timer = window.setTimeout(function(){
$.messager.progress('close');
app.timeend = Date.now()
// console.log('wait-close:', ', dauer(ms):', app.timeend-app.timestart, app.waitpos, app.waitmax);
app.win = null;
}, app.waitint);
return;
}
//
}
var sids = [];
function block(_message, _width, _caption){
var message = _message;
if (_caption){
message = message.replace('%caption%', '"'+_caption+'"');
}
$.blockUI({
message: message,
css:{
width: ''+_width,
border: 'none',
padding: '10px',
backgroundColor: '#808080', '-webkit-border-radius': '5px', '-moz-border-radius': '5px',
opacity: .5,
color: 'white'
}
});
}
function unblock(){
$.unblockUI();
}
$.postJSON = function (url, params, _success, _complete){
// console.log('(POST) postJSON-request:', params);
jQuery.ajax({
'type': 'POST',
'url': url,
'data': params,
'async': true,
'dataType': params.type,
'success': function(data){
if (typeof _success == 'function'){
//console.log('postJSON received data: ', params.type, params.what, data);
// umwandlung sting in JSON-array bzw. object
var obj = undefined;
// data = data.replace('&#34;', '"');
switch (params.type){
case 'json':{
if (typeof data === 'object'){
obj = data;
}else{
obj = JSON.parse(data);
}
}
case 'html':{
if (typeof data === 'string'){
obj = data;
}else{
if (typeof data === 'object'){
obj = JSON.stringify(data);
}
}
obj = JSON.stringify(data);
}
default: obj = data;
}
if (typeof data === 'object'){
if (data.released == true){
window.setTimeout(function(_msg){
_msg.title = 'Session timed out..';
console.log(_msg);
app.msgcenter(_msg, function(){
app.module[app.active_module].logout();
});
}, 100, data.msg);
data.msg = null;
}
if (data.success == false){
app.waitclose();
}
}
_success(obj);
}
},
'complete': _complete
}).fail(function(jqxhr, textStatus, error){
console.log('postJSON fail: ', jqxhr, textStatus, error, jqxhr.responseText);
app.message({type:'alert', title:'ERROR postJSON in "'+params.func+'"', msg:textStatus + ", " + error});
app.waitclose();
});
};
$.toJSON = function (o){
if (typeof(JSON) == 'object' && JSON.stringify)
return JSON.stringify(o);
var type = typeof(o);
if (o === null)
return "null";
if (type == "undefined")
return undefined;
if (type == "number" || type == "boolean")
return o + "";
if (type == "string")
return $.quoteString(o);
if (type == 'object'){
if (typeof o.toJSON == "function")
return $.toJSON(o.toJSON());
if (o.constructor === Date){
var month = o.getUTCMonth() + 1;
if (month < 10)
month = '0' + month;
var day = o.getUTCDate();
if (day < 10)
day = '0' + day;
var year = o.getUTCFullYear();
var hours = o.getUTCHours();
if (hours < 10)
hours = '0' + hours;
var minutes = o.getUTCMinutes();
if (minutes < 10)
minutes = '0' + minutes;
var seconds = o.getUTCSeconds();
if (seconds < 10)
seconds = '0' + seconds;
var milli = o.getUTCMilliseconds();
if (milli < 100)
milli = '0' + milli;
if (milli < 10)
milli = '0' + milli;
return '"' + year + '-' + month + '-' + day + 'T' + hours + ':' + minutes + ':' + seconds + '.' + milli + 'Z"';
}
if (o.constructor === Array){
var ret = [];
for (var i = 0; i < o.length; i++)
ret.push($.toJSON(o[i]) || "null");
return "[" + ret.join(",") + "]";
}
var pairs = [];
for (var k in o){
var name;
var type = typeof k;
if (type == "number")
name = '"' + k + '"';
else if (type == "string")
name = $.quoteString(k);
else
continue; //skip non-string or number keys
if (typeof o[k] == "function")
continue; //skip pairs where the value is a function.
var val = $.toJSON(o[k]);
pairs.push(name + ":" + val);
}
return "{" + pairs.join(", ") + "}";
}
};