mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-01-11 17:58:41 +00:00
1980 lines
58 KiB
JavaScript
1980 lines
58 KiB
JavaScript
/**
|
||
* Core JS functionality
|
||
*
|
||
* This logic is supposed to minimize coding and support core javascript functionality.
|
||
*
|
||
* @category App
|
||
* @package Framework
|
||
* @since 1.0.0
|
||
*/
|
||
(function (jsOMS, undefined) {
|
||
|
||
/**
|
||
* Property loader
|
||
*
|
||
* @param {Object} ele DOM Element
|
||
* @param {string} value Property to get
|
||
*
|
||
* @return string
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.getPropertyValue = function (ele, value) {
|
||
return window.getComputedStyle(ele, null).getPropertyValue(value);
|
||
};
|
||
|
||
/**
|
||
* Class finder
|
||
*
|
||
* Checking if a element has a class
|
||
*
|
||
* @param {Object} ele DOM Element
|
||
* @param {string} cls Class to find
|
||
*
|
||
* @return boolean
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.hasClass = function (ele, cls) {
|
||
return ele !== undefined && ele !== null && ele.className !== undefined && ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
|
||
};
|
||
|
||
/**
|
||
* Add class
|
||
*
|
||
* Adding a class to an element
|
||
*
|
||
* @param ele DOM Element
|
||
* @param cls Class to add
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.addClass = function (ele, cls) {
|
||
if (!jsOMS.hasClass(ele, cls)) {
|
||
ele.className += " " + cls;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Remove class
|
||
*
|
||
* Removing a class form an element
|
||
*
|
||
* @param ele DOM Element
|
||
* @param cls Class to remove
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.removeClass = function (ele, cls) {
|
||
if (jsOMS.hasClass(ele, cls)) {
|
||
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
|
||
ele.className = ele.className.replace(reg, '');
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Delayed watcher
|
||
*
|
||
* Used to fire event after delay
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.watcher = function () {
|
||
var timer = 0;
|
||
return function (callback, ms) {
|
||
clearTimeout(timer);
|
||
timer = setTimeout(callback, ms);
|
||
};
|
||
}();
|
||
|
||
/**
|
||
* Action prevent
|
||
*
|
||
* Preventing event from firering and passing through
|
||
*
|
||
* @param event Event Event to stop
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.preventAll = function(event) {
|
||
if (event.stopPropagation) {
|
||
event.stopPropagation();
|
||
} else {
|
||
event.cancelBubble = true;
|
||
}
|
||
|
||
event.preventDefault();
|
||
};
|
||
|
||
/**
|
||
* Ready invoke
|
||
*
|
||
* Invoking a function after page load
|
||
*
|
||
* @param func Callback function
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.ready = function (func) {
|
||
// TODO: IE problems? + Maybe interactive + loaded can cause problems since elements might not be loaded yet?!!?!!?!
|
||
if (document.readyState === 'complete' || document.readyState === 'loaded' || document.readyState === 'interactive') {
|
||
func();
|
||
} else {
|
||
document.addEventListener("DOMContentLoaded", function (event) {
|
||
func();
|
||
});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Each loop
|
||
*
|
||
* Looping over a node array and performing a task with these nodes
|
||
*
|
||
* @param nodes DOM Nodes
|
||
* @param func Callback function
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.each = function (nodes, func) {
|
||
var length = nodes.length;
|
||
|
||
for (var i = 0; i < length; i++) {
|
||
func(nodes[i]);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Empty element
|
||
*
|
||
* Deleting content from element
|
||
*
|
||
* @param ele DOM Element
|
||
*
|
||
* @return void
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.empty = function (ele) {
|
||
while (ele.firstChild) {
|
||
ele.removeChild(ele.firstChild);
|
||
}
|
||
};
|
||
|
||
jsOMS.hash = function (str) {
|
||
var res = 0,
|
||
len = str.length;
|
||
for (var i = 0; i < len; i++) {
|
||
res = res * 31 + str.charCodeAt(i);
|
||
}
|
||
return res;
|
||
};
|
||
|
||
/**
|
||
* Check node
|
||
*
|
||
* Checking if a selection is a node
|
||
*
|
||
* @param ele DOM Node
|
||
*
|
||
* @return boolean
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.isNode = function (ele) {
|
||
return (
|
||
typeof Node === "object" ? ele instanceof Node :
|
||
ele && typeof ele === "object" && typeof ele.nodeType === "number" && typeof ele.nodeName === "string"
|
||
);
|
||
};
|
||
|
||
/**
|
||
* Check element
|
||
*
|
||
* Checking if a selection is a element
|
||
*
|
||
* @param o DOM Element
|
||
*
|
||
* @return boolean
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.isElement = function (o) {
|
||
return (
|
||
typeof HTMLElement === "object" ? o instanceof HTMLElement : o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
|
||
);
|
||
};
|
||
|
||
/**
|
||
* Getting element by class
|
||
*
|
||
* Getting a element by class in the first level
|
||
*
|
||
* @param ele DOM Element
|
||
* @param cls Class to find
|
||
*
|
||
* @return Element
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.getByClass = function (ele, cls) {
|
||
var length = ele.childNodes.length;
|
||
|
||
for (var i = 0; i < length; i++) {
|
||
if (jsOMS.hasClass(ele.childNodes[i], cls)) {
|
||
return ele.childNodes[i];
|
||
}
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
/**
|
||
* Getting element by tag
|
||
*
|
||
* Getting a element by tag in the first level
|
||
*
|
||
* @param ele DOM Element
|
||
* @param tag Tag to find
|
||
*
|
||
* @return Element
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.getByTag = function (ele, tag) {
|
||
return ele.getElementsByTagName(tag);
|
||
};
|
||
|
||
/**
|
||
* Merging two arrays recursively
|
||
*
|
||
* @param target Target array
|
||
* @param source Source array
|
||
*
|
||
* @return array
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.merge = function (target, source) {
|
||
for (var p in source) {
|
||
try {
|
||
if (source[p].constructor == Object) {
|
||
target[p] = merge(target[p], source[p]);
|
||
|
||
} else {
|
||
target[p] = source[p];
|
||
}
|
||
|
||
} catch (e) {
|
||
target[p] = source[p];
|
||
|
||
}
|
||
}
|
||
|
||
return target;
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.Options = function ()
|
||
{
|
||
this.options = {};
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Options.prototype.set = function (key, value, overwrite)
|
||
{
|
||
overwrite = typeof overwrite === bool ? overwrite : true;
|
||
|
||
if (overwrite || !options[key]) {
|
||
options[key] = value;
|
||
}
|
||
|
||
// TODO: return boolean for success
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Options.prototype.get = function (key)
|
||
{
|
||
// TODO: handle isset
|
||
return options[key];
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Options.prototype.remove = function (key)
|
||
{
|
||
// TODO: Handle isset and return boolean
|
||
delete options[key];
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.AccountManager = function ()
|
||
{
|
||
this.accounts = [];
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AccountManager.prototype.add = function(account)
|
||
{
|
||
this.accounts[account.getId()] = account;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AccountManager.prototype.remove = function(id)
|
||
{
|
||
if (typeof this.accounts[id] !== 'undefined') {
|
||
delete this.accounts[id];
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AccountManager.prototype.get = function(id)
|
||
{
|
||
if (this.accounts[id]) {
|
||
return this.accounts[id];
|
||
}
|
||
|
||
return undefined;
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.Auth = function (uri)
|
||
{
|
||
this.account = null;
|
||
this.uri = uri;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.setAccount = function (account)
|
||
{
|
||
this.account = account;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.getAccount = function () {
|
||
return this.account;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.login = function ()
|
||
{
|
||
var authRequest = new jsOMS.Request();
|
||
authRequest.setUri(this.uri);
|
||
authRequest.setMethod(jsOMS.EnumRequestMethod.POST);
|
||
authRequest.setResponseType(jsOMS.EnumRequestType.JSON);
|
||
authRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||
authRequest.setSuccess(function (xhr) {
|
||
this.loginResult(xhr);
|
||
});
|
||
|
||
authRequest.send();
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.logout = function ()
|
||
{
|
||
this.refresh();
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.loginResult = function (xhr)
|
||
{
|
||
console.log(xhr);
|
||
location.reload();
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.handshake = function ()
|
||
{
|
||
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.setAuthKey = function ()
|
||
{
|
||
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Auth.prototype.getAuthKey = function ()
|
||
{
|
||
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.Uri = function ()
|
||
{
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Uri.parseUrl = function(str, component) {
|
||
var query, key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port',
|
||
'relative', 'path', 'directory', 'file', 'query', 'fragment'
|
||
],
|
||
ini = (this.phpJs && this.phpJs.ini) || {},
|
||
mode = (ini['phpjs.parseUrl.mode'] &&
|
||
ini['phpjs.parseUrl.mode'].local_value) || 'php',
|
||
parser = {
|
||
php: /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
|
||
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
|
||
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // Added one optional slash to post-scheme to catch file:/// (should restrict this)
|
||
};
|
||
|
||
var m = parser[mode].exec(str),
|
||
uri = {},
|
||
i = 14;
|
||
|
||
while (i--) {
|
||
if (m[i]) {
|
||
uri[key[i]] = m[i];
|
||
}
|
||
}
|
||
|
||
if (component) {
|
||
return uri[component.replace('PHP_URL_', '')
|
||
.toLowerCase()];
|
||
}
|
||
|
||
if (mode !== 'php') {
|
||
var name = (ini['phpjs.parseUrl.queryKey'] &&
|
||
ini['phpjs.parseUrl.queryKey'].local_value) || 'queryKey';
|
||
parser = /(?:^|&)([^&=]*)=?([^&]*)/g;
|
||
uri[name] = {};
|
||
query = uri[key[12]] || '';
|
||
query.replace(parser, function($0, $1, $2) {
|
||
if ($1) {
|
||
uri[name][$1] = $2;
|
||
}
|
||
});
|
||
}
|
||
|
||
delete uri.source;
|
||
|
||
return uri;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Uri.getUriQueryParameter = function(query, name) {
|
||
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||
var regex = new RegExp("[\\?&]*" + name + "=([^&#]*)"),
|
||
results = regex.exec(query);
|
||
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (uriFactory, undefined) {
|
||
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.FormView = function (node) {
|
||
if (node) {
|
||
this.setNode(node);
|
||
}
|
||
};
|
||
|
||
jsOMS.FormView.prototype.setNode = function () {
|
||
};
|
||
|
||
jsOMS.FormView.prototype.submit = function () {
|
||
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.TableView = function () {
|
||
this.table = null;
|
||
};
|
||
|
||
/**
|
||
* None, Pagination, Infinite
|
||
*/
|
||
jsOMS.TableView.prototype.setExtensible = function () {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.add = function (element) {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.addCollection = function (collection) {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.remove = function (id) {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.get = function (id) {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.filter = function (id) {
|
||
|
||
};
|
||
|
||
jsOMS.TableView.prototype.request = function (filter) {
|
||
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.ViewAbstract = function ()
|
||
{
|
||
this.element = null;
|
||
this.data = [];
|
||
};
|
||
|
||
jsOMS.ViewAbstract.prototype.bind = function (node)
|
||
{
|
||
this.element = node;
|
||
};
|
||
|
||
jsOMS.ViewAbstract.prototype.addData = function(id, data, overwrite)
|
||
{
|
||
overwrite = typeof overwrite !== 'undefined' ? overwrite : false;
|
||
|
||
if(typeof this.data[id] === 'undefined' || overwrite) {
|
||
this.data[id] = data;
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
jsOMS.ViewAbstract.prototype.getData = function(id)
|
||
{
|
||
return typeof this.data[id] !== 'undefined' ? this.data[id] : undefined;
|
||
}
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.Account = function () {
|
||
this.login = '';
|
||
this.password = '';
|
||
this.id = 0;
|
||
this.auth = null;
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.CacheManager = function ()
|
||
{
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.CookieJar = function () {
|
||
};
|
||
|
||
/**
|
||
* Saving data to cookie
|
||
*
|
||
* @param {string} cName Cookie name
|
||
* @param {string} value Value to save
|
||
* @param {number} exdays Lifetime for the cookie
|
||
* @param {string} domain Domain for the cookie
|
||
* @param {string} path Path for the cookie
|
||
*
|
||
* @return array
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.CookieJar.prototype.setCookie = function (cName, value, exdays, domain, path) {
|
||
var exdate = new Date();
|
||
exdate.setDate(exdate.getDate() + exdays);
|
||
var cValue = encodeURI(value) + ((exdays === null) ? "" : "; expires=" + exdate.toUTCString()) + ";domain=" + domain + ";path=" + path;
|
||
document.cookie = cName + "=" + cValue;
|
||
};
|
||
|
||
/**
|
||
* Loading cookie data
|
||
*
|
||
* @param {string} cName Cookie name
|
||
*
|
||
* @return {string}
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
jsOMS.CookieJar.prototype.getCookie = function (cName) {
|
||
var cValue = document.cookie;
|
||
var cStart = cValue.indexOf(" " + cName + "=");
|
||
|
||
if (cStart === -1) {
|
||
cStart = cValue.indexOf(cName + "=");
|
||
}
|
||
|
||
if (cStart === -1) {
|
||
cValue = null;
|
||
} else {
|
||
cStart = cValue.indexOf("=", cStart) + 1;
|
||
var cEnd = cValue.indexOf(";", cStart);
|
||
|
||
if (cEnd === -1) {
|
||
cEnd = cValue.length;
|
||
}
|
||
|
||
cValue = decodeURI(cValue.substring(cStart, cEnd));
|
||
}
|
||
return cValue;
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.LocalStorage = function () {
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.LocalStorage.prototype.available = function () {
|
||
try {
|
||
return 'localStorage' in window && window.localStorage !== null;
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.StorageManager = function ()
|
||
{
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.ModuleFactory = function() {};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ModuleFactory.getInstance = function (module, app)
|
||
{
|
||
return new window['jsOMS']['Modules'][module](app)
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.Modules = {};
|
||
jsOMS.Modules.Models = {};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ModuleManager = function (app)
|
||
{
|
||
this.modules = {};
|
||
this.app = app;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ModuleManager.prototype.initModule = function (module)
|
||
{
|
||
this.modules[module] = jsOMS.ModuleFactory.getInstance(module, this.app);
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ModuleManager.prototype.get = function (module)
|
||
{
|
||
return this.modules[module];
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
//+ Jonas Raoni Soares Silva
|
||
//@ http://jsfromhell.com/classes/math-processor [rev. #1]
|
||
|
||
var MathProcessor = function () {
|
||
var o = this;
|
||
o.o = {
|
||
"+": function (a, b) {
|
||
return +a + b;
|
||
},
|
||
"-": function (a, b) {
|
||
return a - b;
|
||
},
|
||
"%": function (a, b) {
|
||
return a % b;
|
||
},
|
||
"/": function (a, b) {
|
||
return a / b;
|
||
},
|
||
"*": function (a, b) {
|
||
return a * b;
|
||
},
|
||
"^": function (a, b) {
|
||
return Math.pow(a, b);
|
||
},
|
||
"~": function (a, b) {
|
||
return Math.sqrt(a, b);
|
||
}
|
||
};
|
||
o.s = {"^": 3, "~": 3, "*": 2, "/": 2, "%": 1, "+": 0, "-": 0};
|
||
o.u = {"+": 1, "-": -1}, o.p = {"(": 1, ")": -1};
|
||
};
|
||
with ({p: MathProcessor.prototype}) {
|
||
p.methods = {
|
||
div: function (a, b) {
|
||
return parseInt(a / b);
|
||
},
|
||
fra: function (a) {
|
||
return a - parseInt(a);
|
||
},
|
||
sum: function (n1, n2, n3, n) {
|
||
for (var r = 0, a, l = (a = arguments).length; l; r += a[--l]) {
|
||
;
|
||
}
|
||
return r;
|
||
},
|
||
medium: function (n1, n2, n3, n) {
|
||
for (var r = 0, a, l = (a = arguments).length; l; r += a[--l]) {
|
||
;
|
||
}
|
||
return r / a.length;
|
||
}
|
||
};
|
||
p.parse = function (e) {
|
||
for (var n, x, _ = this, o = [], s = [x = _.RPN(e.replace(/ /g, "").split(""))]; s.length;) {
|
||
for ((n = s[s.length - 1], --s.length); n[2]; o[o.length] = n, s[s.length] = n[3], n = n[2]) {
|
||
;
|
||
}
|
||
}
|
||
for (; (n = o.pop()) != undefined; n[0] = _.o[n[0]](isNaN(n[2][0]) ? _.f(n[2][0]) : n[2][0], isNaN(n[3][0]) ? _.f(n[3][0]) : n[3][0])) {
|
||
;
|
||
}
|
||
return +x[0];
|
||
};
|
||
p.RPN = function (e) {
|
||
var x, r, _ = this, c = r = [, , , 0];
|
||
if (e[0] in _.u || !e.unshift("+")) {
|
||
for (; e[1] in _.u; e[0] = _.u[e.shift()] * _.u[e[0]] + 1 ? "+" : "-") {
|
||
;
|
||
}
|
||
}
|
||
(c[3] = [_.u[e.shift()], c, , 0])[1][0] = "*", (r = [, , c, 0])[2][1] = r;
|
||
(c[2] = _.v(e))[1] = c;
|
||
(!e.length && (r = c)) || (e[0] in _.s && ((c = r)[0] = e.shift(), !e.length && _.error()));
|
||
while (e.length) {
|
||
if (e[0] in _.u) {
|
||
for (; e[1] in _.u; e[0] = _.u[e.shift()] * _.u[e[0]] + 1 ? "+" : "-") {
|
||
;
|
||
}
|
||
(c = c[3] = ["*", c, , 0])[2] = [-1, c, , 0];
|
||
}
|
||
(c[3] = _.v(e))[1] = c;
|
||
e[0] in _.s && (c = _.s[e[0]] > _.s[c[0]] ?
|
||
((c[3] = (x = c[3], c[2]))[1][2] = [e.shift(), c, x, 0])[2][1] = c[2]
|
||
: r == c ? (r = [e.shift(), , c, 0])[2][1] = r
|
||
: ((r[2] = (x = r[2], [e.shift(), r, , 0]))[2] = x)[1] = r[2]);
|
||
}
|
||
return r;
|
||
};
|
||
p.v = function (e) {
|
||
var i, j, l, _ = this;
|
||
if ("0123456789.".indexOf(e[0]) + 1) {
|
||
for (i = -1, l = e.length; ++i < l && "0123456789.".indexOf(e[i]) + 1;) {
|
||
;
|
||
}
|
||
return [+e.splice(0, i).join(""), , , 0];
|
||
}
|
||
else if (e[0] == "(") {
|
||
for (i = 0, l = e.length, j = 1; ++i < l && (e[i] in _.p && (j += _.p[e[i]]), j);) {
|
||
;
|
||
}
|
||
return _.RPN(l = e.splice(0, i), l.shift(), !j && e.shift());
|
||
}
|
||
else {
|
||
if (((j = e[0].toLowerCase()) >= "a" && j <= "z") || j == "_") {
|
||
for (i = 0; ((j = e[++i].toLowerCase()) >= "a" && j <= "z") || j == "_" || (j >= 0 && j <= 9);) {
|
||
;
|
||
}
|
||
if (j == "(") {
|
||
for (var l = e.length, j = 1; ++i < l && (e[i] in _.p && (j += _.p[e[i]]), j);) {
|
||
;
|
||
}
|
||
return [e.splice(0, i + 1).join(""), , , 0];
|
||
}
|
||
}
|
||
}
|
||
_.error();
|
||
};
|
||
p.f = function (e) {
|
||
var n, i = 0, _ = this;
|
||
if (((e = e.split(""))[i] >= "a" && e[i] <= "z") || e[i] == "_") {
|
||
while ((e[++i] >= "a" && e[i] <= "z") || e[i] == "_" || (e[i] >= 0 && e[i] <= 9)) {
|
||
;
|
||
}
|
||
if (e[i] == "(") {
|
||
!_.methods[n = e.splice(0, i).join("")] && _.error("Function \"" + n + "\" not found"), e.shift();
|
||
for (var a = [], i = -1, j = 1; e[++i] && (e[i] in _.p && (j += _.p[e[i]]), j);) {
|
||
j == 1 && e[i] == "," && (a.push(_.parse(e.splice(0, i).join(""))), e.shift(), i = -1);
|
||
}
|
||
a.push(_.parse(e.splice(0, i).join(""))), !j && e.shift();
|
||
}
|
||
return _.methods[n].apply(_, a);
|
||
}
|
||
};
|
||
p.error = function (s) {
|
||
return;
|
||
//throw new Error("MathProcessor: " + (s || "Wrong expression"));
|
||
};
|
||
}
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.Route = function ()
|
||
{
|
||
this.routes = null;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Route.prototype.add = function (path, callback, exact)
|
||
{
|
||
exact = typeof exact !== 'undefined' ? exact : true;
|
||
|
||
// todo: create array key path like i did for php
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.Dispatcher = function ()
|
||
{
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.Request = function ()
|
||
{
|
||
this.uri = null;
|
||
this.method = null;
|
||
this.requestHeader = [];
|
||
this.success = null;
|
||
this.type = 'GET';
|
||
this.data = {};
|
||
|
||
this.xhr = new XMLHttpRequest();
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setMethod = function (method)
|
||
{
|
||
this.method = method;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getMethod = function ()
|
||
{
|
||
return this.method;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setResponseType = function (type)
|
||
{
|
||
this.xhr.responseType = type;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getResponseType = function ()
|
||
{
|
||
return this.responseType;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setRequestHeader = function (type, header)
|
||
{
|
||
this.requestHeader[type] = header;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getRequestHeader = function ()
|
||
{
|
||
return this.requestHeader;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setUri = function (uri)
|
||
{
|
||
this.uri = uri;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getUri = function ()
|
||
{
|
||
return this.uri;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setSuccess = function (callback)
|
||
{
|
||
this.success = callback;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setData = function (data)
|
||
{
|
||
this.data = data;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getData = function ()
|
||
{
|
||
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.setType = function (type)
|
||
{
|
||
this.type = type;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.getType = function ()
|
||
{
|
||
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.serializeData = function ()
|
||
{
|
||
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.queryfy = function (obj)
|
||
{
|
||
var str = [];
|
||
for (var p in obj) {
|
||
if (obj.hasOwnProperty(p)) {
|
||
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
|
||
}
|
||
}
|
||
return str.join("&");
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.Request.prototype.send = function ()
|
||
{
|
||
var self = this;
|
||
|
||
if(self.xhr.readyState !== 1) {
|
||
self.xhr.open(this.method, this.uri);
|
||
|
||
for (var p in this.requestHeader) {
|
||
if(this.requestHeader.hasOwnProperty(p)) {
|
||
self.xhr.setRequestHeader(p, this.requestHeader[p]);
|
||
}
|
||
}
|
||
}
|
||
|
||
self.xhr.onreadystatechange = function () {
|
||
if (self.xhr.readyState === 4 && self.xhr.status === 200) {
|
||
self.success(self.xhr);
|
||
}
|
||
};
|
||
|
||
if(this.type === 'json') {
|
||
if (typeof this.requestHeader !== 'undefined' && this.requestHeader['Content-Type'] === 'application/json') {
|
||
console.log(JSON.stringify(this.data));
|
||
self.xhr.send(JSON.stringify(this.data));
|
||
} else {
|
||
self.xhr.send(this.queryfy(this.data));
|
||
}
|
||
} else if(this.type === 'raw') {
|
||
self.xhr.send(this.data);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* AJAX
|
||
*
|
||
* @param obj AJAX variables
|
||
*
|
||
* The following obj variables are expected:
|
||
* responseType - Type of the response
|
||
* requestHeader - Header description for the request
|
||
* success - Success callback function
|
||
* error - Error callback function
|
||
* type - GET, PUT, DELETE, POST type
|
||
* url - Request url
|
||
* data - Data to send
|
||
*
|
||
* @since 1.0.0
|
||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||
*/
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EnumLinkRequestData = Object.freeze({
|
||
NORMAL: 'normal',
|
||
OBJECT: 'object'
|
||
});
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.RequestManager = function ()
|
||
{
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EnumRequestMethod = Object.freeze({
|
||
POST: 'POST',
|
||
GET: 'GET',
|
||
PUT: 'PUT',
|
||
DELETE: 'DELETE',
|
||
HEAD: 'HEAD'
|
||
});
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.ResponseManager = function ()
|
||
{
|
||
this.messages = {};
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ResponseManager.prototype.add = function (key, message, request)
|
||
{
|
||
request = typeof request !== 'undefined' ? request : 'any';
|
||
if (typeof this.messages[key] === 'undefined') {
|
||
this.messages[key] = [];
|
||
}
|
||
|
||
this.messages[key][request] = message;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.ResponseManager.prototype.execute = function (key, data, request)
|
||
{
|
||
console.log(data);
|
||
if (typeof request !== 'undefined' && typeof this.messages[key][request] !== 'undefined') {
|
||
this.messages[key][request](data);
|
||
} else if(typeof this.messages[key] !== 'undefined') {
|
||
this.messages[key].any(data);
|
||
} else {
|
||
console.log('does not exist');
|
||
}
|
||
}
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EnumResponseResultType = Object.freeze({
|
||
MULTI: 0,
|
||
MESSAGE: 1,
|
||
INFO: 2,
|
||
DATA: 3,
|
||
LIST: 4
|
||
});
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EnumRequestType = Object.freeze({
|
||
TEXT: 'text',
|
||
JSON: 'json',
|
||
DOCUMENT: 'document',
|
||
BLOB: 'blob',
|
||
ARRAYBUFFER: 'arraybuffer',
|
||
DEFAULT: ''
|
||
});
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EventManager = function () {
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
SHA1 = function (l) {
|
||
function p(b, a) {
|
||
return b << a | b >>> 32 - a
|
||
}
|
||
|
||
l += "";
|
||
for (var n = Math, c = [1518500249, 1859775393, 2400959708, 3395469782, 1732584193, 4023233417, 2562383102, 271733878, 3285377520, 4294967295], s = n.ceil(l.length / 4) + 2, q = n.ceil(s / 16), g = [], a = 0, h = [], j, d, e, f, m, i, b, k; a < q; a++) {
|
||
g[a] = [];
|
||
for (k = 0; k < 16; k++) {
|
||
function o(b, c) {
|
||
return l.charCodeAt(a * 64 + k * 4 + b) << c
|
||
}
|
||
|
||
g[a][k] = o(0, 24) | o(1, 16) | o(2, 8) | o(3, 0)
|
||
}
|
||
}
|
||
i = l.length * 8 - 8;
|
||
a = q - 1;
|
||
g[a][14] = i / (c[9] + 1);
|
||
g[a][14] = n.floor(g[a][14]);
|
||
g[a][15] = i & c[9];
|
||
for (a = 0; a < q; a++) {
|
||
for (b = 0; b < 16; b++) {
|
||
h[b] = g[a][b];
|
||
}
|
||
for (b = 16; b < 80; b++) {
|
||
h[b] = p(h[b - 3] ^ h[b - 8] ^ h[b - 14] ^ h[b - 16], 1);
|
||
}
|
||
j = c[4];
|
||
d = c[5];
|
||
e = c[6];
|
||
f = c[7];
|
||
m = c[8];
|
||
for (b = 0; b < 80; b++) {
|
||
var r = n.floor(b / 20), t = p(j, 5) + (r < 1 ? d & e ^ ~d & f : r == 2 ? d & e ^ d & f ^ e & f : d ^ e ^ f) + m + c[r] + h[b] & c[9];
|
||
m = f;
|
||
f = e;
|
||
e = p(d, 30);
|
||
d = j;
|
||
j = t
|
||
}
|
||
c[4] += j;
|
||
c[5] += d;
|
||
c[6] += e;
|
||
c[7] += f;
|
||
c[8] += m
|
||
}
|
||
i = "";
|
||
for (z = 4; z < 9; z++) {
|
||
for (a = 7; a >= 0; a--) {
|
||
i += ((c[z] & c[9]) >>> a * 4 & 15).toString(16);
|
||
}
|
||
}
|
||
return i;
|
||
};
|
||
function SHA1(s) {
|
||
function U(a, b, c) {
|
||
while (0 < c--) {
|
||
a.push(b)
|
||
}
|
||
}
|
||
|
||
function L(a, b) {
|
||
return (a << b) | (a >>> (32 - b))
|
||
}
|
||
|
||
function P(a, b, c) {
|
||
return a ^ b ^ c
|
||
}
|
||
|
||
function A(a, b) {
|
||
var c = (b & 0xFFFF) + (a & 0xFFFF), d = (b >>> 16) + (a >>> 16) + (c >>> 16);
|
||
return ((d & 0xFFFF) << 16) | (c & 0xFFFF)
|
||
}
|
||
|
||
var B = "0123456789abcdef";
|
||
return (function (a) {
|
||
var c = [], d = a.length * 4, e;
|
||
for (var i = 0; i < d; i++) {
|
||
e = a[i >> 2] >> ((3 - (i % 4)) * 8);
|
||
c.push(B.charAt((e >> 4) & 0xF) + B.charAt(e & 0xF))
|
||
}
|
||
return c.join('')
|
||
}((function (a, b) {
|
||
var c, d, e, f, g, h = a.length, v = 0x67452301, w = 0xefcdab89, x = 0x98badcfe, y = 0x10325476, z = 0xc3d2e1f0, M = [];
|
||
U(M, 0x5a827999, 20);
|
||
U(M, 0x6ed9eba1, 20);
|
||
U(M, 0x8f1bbcdc, 20);
|
||
U(M, 0xca62c1d6, 20);
|
||
a[b >> 5] |= 0x80 << (24 - (b % 32));
|
||
a[(((b + 65) >> 9) << 4) + 15] = b;
|
||
for (var i = 0; i < h; i += 16) {
|
||
c = v;
|
||
d = w;
|
||
e = x;
|
||
f = y;
|
||
g = z;
|
||
for (var j = 0, O = []; j < 80; j++) {
|
||
O[j] = j < 16 ? a[j + i] : L(O[j - 3] ^ O[j - 8] ^ O[j - 14] ^ O[j - 16], 1);
|
||
var k = (function (a, b, c, d, e) {
|
||
var f = (e & 0xFFFF) + (a & 0xFFFF) + (b & 0xFFFF) + (c & 0xFFFF) + (d & 0xFFFF), g = (e >>> 16) + (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (f >>> 16);
|
||
return ((g & 0xFFFF) << 16) | (f & 0xFFFF)
|
||
})(j < 20 ? (function (t, a, b) {
|
||
return (t & a) ^ (~t & b)
|
||
}(d, e, f)) : j < 40 ? P(d, e, f) : j < 60 ? (function (t, a, b) {
|
||
return (t & a) ^ (t & b) ^ (a & b)
|
||
}(d, e, f)) : P(d, e, f), g, M[j], O[j], L(c, 5));
|
||
g = f;
|
||
f = e;
|
||
e = L(d, 30);
|
||
d = c;
|
||
c = k
|
||
}
|
||
v = A(v, c);
|
||
w = A(w, d);
|
||
x = A(x, e);
|
||
y = A(y, f);
|
||
z = A(z, g)
|
||
}
|
||
return [v, w, x, y, z]
|
||
}((function (t) {
|
||
var a = [], b = 255, c = t.length * 8;
|
||
for (var i = 0; i < c; i += 8) {
|
||
a[i >> 5] |= (t.charCodeAt(i / 8) & b) << (24 - (i % 32))
|
||
}
|
||
return a
|
||
}(s)).slice(), s.length * 8))))
|
||
}
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.AssetManager = function ()
|
||
{
|
||
this.assets = {};
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AssetManager.prototype.load = function (path, filename, filetype, callback)
|
||
{
|
||
var hash;
|
||
|
||
if (!this.assets[(hash = jsOMS.hash(path + '/' + filename))]) {
|
||
var fileref = null;
|
||
|
||
if (filetype === 'js') {
|
||
fileref = document.createElement('script');
|
||
fileref.setAttribute('type', 'text/javascript');
|
||
fileref.setAttribute('src', path + '/' + filename);
|
||
|
||
if (typeof fileref !== 'undefined') {
|
||
document.getElementsByTagName('head')[0].appendChild(fileref);
|
||
}
|
||
|
||
this.assets[hash] = path + '/' + filename;
|
||
} else if (filetype === 'css') {
|
||
fileref = document.createElement('link');
|
||
fileref.setAttribute('rel', 'stylesheet');
|
||
fileref.setAttribute('type', 'text/css');
|
||
fileref.setAttribute('href', path + '/' + filename);
|
||
|
||
if (typeof fileref !== 'undefined') {
|
||
document.getElementsByTagName('head')[0].appendChild(fileref);
|
||
}
|
||
|
||
this.assets[hash] = path + '/' + filename;
|
||
} else if (filetype === 'img') {
|
||
this.assets[hash] = new Image();
|
||
this.assets[hash].src = path + '/' + filename;
|
||
} else if (filetype === 'audio') {
|
||
// TODO: implement audio asset
|
||
} else if (filetype === 'video') {
|
||
// TODO: implement video asset
|
||
}
|
||
|
||
if (callback) {
|
||
fileref.onreadystatechange = function () {
|
||
if (this.readyState == 'complete') {
|
||
callback();
|
||
}
|
||
};
|
||
|
||
fileref.onload = callback();
|
||
}
|
||
|
||
return hash;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AssetManager.prototype.get = function (id)
|
||
{
|
||
if (this.assets[id]) {
|
||
return this.assets[id];
|
||
}
|
||
|
||
return undefined;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.AssetManager.prototype.unload = function (key)
|
||
{
|
||
if (typeof this.assets[key] !== 'undefined') {
|
||
delete this.assets[key];
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.FormManager = function (responseManager)
|
||
{
|
||
this.responseManager = responseManager;
|
||
this.ignore = [];
|
||
this.success = [];
|
||
this.injectSelector = [];
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.ignore = function (id)
|
||
{
|
||
this.ignore.push(id);
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.injectSubmit = function (selector, callback)
|
||
{
|
||
if (!(selector in this.injectSelector)) {
|
||
this.injectSelector[selector] = callback;
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.setSuccess = function (id, callback)
|
||
{
|
||
this.success[id] = callback;
|
||
};
|
||
|
||
jsOMS.FormManager.prototype.bind = function (id)
|
||
{
|
||
if (typeof id !== 'undefined' && this.ignore.indexOf(id) === -1) {
|
||
this.bindElement(document.getElementById(id));
|
||
} else {
|
||
var forms = document.getElementsByTagName('form');
|
||
|
||
for (var i = 0; i < forms.length; i++) {
|
||
if (this.ignore.indexOf(forms[i].id) === -1) {
|
||
this.bindElement(forms[i]);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.validateFormElement = function (e)
|
||
{
|
||
/** Validate on change */
|
||
if (typeof e.dataset.validate !== 'undefined') {
|
||
if (!(new RegExp(e.dataset.validate)).test(e.value)) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.submit = function (e, data)
|
||
{
|
||
var request = new jsOMS.Request(),
|
||
self = this;
|
||
|
||
request.setData(data);
|
||
request.setType('json');
|
||
request.setUri(e.action);
|
||
request.setMethod(e.method);
|
||
request.setRequestHeader('Content-Type', 'application/json');
|
||
request.setSuccess(function (xhr) {
|
||
console.log(xhr); // TODO: remove this is for error checking
|
||
try {
|
||
var o = JSON.parse(xhr.response),
|
||
response = Object.keys(o).map(function (k) {
|
||
return o[k]
|
||
});
|
||
|
||
for (var k = 0; k < response.length; k++) {
|
||
if (response[k] !== null) {
|
||
console.log(response[k]);
|
||
|
||
/* Handle success */
|
||
if (!self.success[e.id]) {
|
||
self.responseManager.execute(response[k].type, response[k]);
|
||
} else {
|
||
self.success[e.id](response[k].type, response[k]);
|
||
}
|
||
}
|
||
}
|
||
} catch (exception) {
|
||
console.log('No valid json');
|
||
return false;
|
||
}
|
||
});
|
||
|
||
request.send();
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.getData = function (e)
|
||
{
|
||
var input = e.getElementsByTagName('input'),
|
||
select = e.getElementsByTagName('select'),
|
||
textarea = e.getElementsByTagName('textarea'),
|
||
datalist = e.getElementsByTagName('datalist'),
|
||
formelements = Array.prototype.slice.call(input).concat(Array.prototype.slice.call(select), Array.prototype.slice.call(textarea), Array.prototype.slice.call(datalist)),
|
||
self = this;
|
||
|
||
var validForm = true,
|
||
submitdata = {};
|
||
|
||
for (var k = 0; k < formelements.length; k++) {
|
||
if (!self.validateFormElement(e)) {
|
||
validForm = false;
|
||
// TODO: maybe jump out here since invalid and the elements get checked on changed by default
|
||
// will this change in the future? if yes then I need to check all and also add markup/styles here
|
||
}
|
||
|
||
submitdata[formelements[k].getAttribute('name')] = formelements[k].value;
|
||
}
|
||
|
||
if(!validForm) {
|
||
console.log('Form contains invalid data');
|
||
}
|
||
|
||
if(typeof e.dataset.formfields !== 'undefined') {
|
||
try {
|
||
var formdata = JSON.parse(e.dataset.formfields);
|
||
|
||
Object.keys(formdata).forEach(function(key) {
|
||
if(formdata[key].startsWith('.') || formdata[key].startsWith('#')) {
|
||
var formElement = document.querySelector(formdata[key]);
|
||
|
||
if(formElement.type === 'checkbox') {
|
||
submitdata[key] = formElement.checked;
|
||
} else {
|
||
submitdata[key] = formElement.value;
|
||
}
|
||
}
|
||
});
|
||
} catch(exception) {
|
||
}
|
||
}
|
||
|
||
return submitdata;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.FormManager.prototype.bindElement = function (e)
|
||
{
|
||
var input = e.getElementsByTagName('input'),
|
||
select = e.getElementsByTagName('select'),
|
||
textarea = e.getElementsByTagName('textarea'),
|
||
datalist = e.getElementsByTagName('datalist'),
|
||
buttons = (Array.prototype.slice.call(e.getElementsByTagName('button'))).concat(Array.prototype.slice.call(e.querySelectorAll('input[type=button]'))),
|
||
submits = e.querySelectorAll('input[type=submit]'),
|
||
self = this,
|
||
submitdata = {};
|
||
|
||
/** Handle submits */
|
||
for (var j = 0; j < submits.length; j++) {
|
||
submits[j].addEventListener('click', function (event) {
|
||
submitdata = self.getData(e);
|
||
|
||
/* Handle injection */
|
||
var injected = false;
|
||
|
||
for (var key in self.injectSelector) {
|
||
if (e.id === key) {
|
||
self.injectSelector[key](e);
|
||
|
||
injected = true;
|
||
}
|
||
}
|
||
|
||
if(!injected) {
|
||
self.submit(e, submitdata);
|
||
}
|
||
|
||
jsOMS.preventAll(event);
|
||
});
|
||
};
|
||
|
||
/** Handle input */
|
||
for (var i = 0; i < input.length; i++) {
|
||
/** Validate on change */
|
||
if (typeof input[i].dataset.validate !== 'undefined') {
|
||
var validator = new RegExp(input[i].dataset.validate);
|
||
|
||
input[i].onkeyup = function (e) {
|
||
var selfL = this;
|
||
jsOMS.watcher(function (e) {
|
||
if (!validator.test(selfL.value)) {
|
||
jsOMS.addClass(selfL, 'invalid');
|
||
console.log('wrong input:' + i);
|
||
}
|
||
}, 500);
|
||
};
|
||
}
|
||
|
||
/** Request on change */
|
||
if (typeof input[i].dataset.request !== 'undefined') {
|
||
// handle request during typing
|
||
}
|
||
}
|
||
|
||
/** Handle select */
|
||
for (var i = 0; i < select.length; i++) {
|
||
/** Redirect on change */
|
||
if (typeof select[i].dataset.redirect !== 'undefined') {
|
||
select[i].onchange = function () {
|
||
// TODO: use URI factory (which i still have to create :))
|
||
window.document.href = e.action.replace('{' + select[i].dataset.redirect + '}', select[i].value);
|
||
};
|
||
}
|
||
}
|
||
|
||
/** Handle button */
|
||
for (var i = 0; i < buttons.length; i++) {
|
||
/** Redirect in new window on click */
|
||
if (typeof buttons[i].dataset.ropen !== 'undefined' || typeof buttons[i].dataset.redirect !== 'undefined') {
|
||
buttons[i].addEventListener('click', function (event) {
|
||
var ropen = typeof this.dataset.ropen !== 'undefined' ? this.dataset.ropen : this.dataset.redirect,
|
||
matches = ropen.match(new RegExp("\{[#\?\.a-zA-Z0-9]*\}", "gi")),
|
||
current = jsOMS.Uri.parse_url(window.location.href),
|
||
value = null;
|
||
|
||
// TODO: find a way to use existing query parameters as well and just overwrite them if defined differently here
|
||
// eg. use &? in dummy urls to indicate that the url should use existing query parameters as well if not overwritten
|
||
for (var c = 0; c < matches.length; c++) {
|
||
var match = matches[c].substring(1, matches[c].length - 1);
|
||
if (match.indexOf('#') === 0) {
|
||
value = document.getElementById(match.substring(1, match.length)).value;
|
||
} else if (match.indexOf('.') === 0) {
|
||
|
||
} else if (match.indexOf('?') === 0) {
|
||
value = jsOMS.Uri.getUriQueryParameter(current.query, match.substring(1, match.length));
|
||
}
|
||
|
||
ropen = ropen.replace(matches[c], value);
|
||
}
|
||
|
||
if (typeof this.dataset.ropen !== 'undefined') {
|
||
var win = window.open(ropen, '_blank');
|
||
win.focus();
|
||
} else {
|
||
window.document.href = ropen;
|
||
}
|
||
});
|
||
} else if (jsOMS.hasClass(buttons[i], 'form-list') && buttons[i].dataset.name !== 'undefined') {
|
||
// TODO: maybe use id here instead? then this needs to get changed in the form builder
|
||
var inputButton = document.querySelector('input[name=' + buttons[i].dataset.name + ']'),
|
||
list = document.querySelector('ul[data-name=l-' + buttons[i].dataset.name + ']'),
|
||
hidden = document.querySelector('input[type=hidden][name=h-' + buttons[i].dataset.name + ']');
|
||
|
||
buttons[i].addEventListener('click', function (event) {
|
||
// TODO: maybe validate input value??? if not done during typing
|
||
|
||
if (hidden.bind === undefined) {
|
||
hidden.bind = [];
|
||
}
|
||
|
||
hidden.bind.push(inputButton.bind ? inputButton.bind : inputButton.value);
|
||
hidden.value = JSON.stringify(hidden.bind);
|
||
|
||
var element = document.createElement('li');
|
||
element.appendChild(document.createTextNode(inputButton.value));
|
||
list.appendChild(element);
|
||
});
|
||
} else if (jsOMS.hasClass(buttons[i], 'form-table') && buttons[i].dataset.name !== 'undefined') {
|
||
// TODO: maybe use id here instead? then this needs to get changed in the form builder
|
||
var inputButton = document.querySelector('input[name=' + buttons[i].dataset.name + ']'),
|
||
table = document.querySelector('table[data-name=l-' + buttons[i].dataset.name + ']'),
|
||
hidden = document.querySelector('input[type=hidden][name=h-' + buttons[i].dataset.name + ']');
|
||
|
||
buttons[i].addEventListener('click', function (event) {
|
||
// TODO: maybe validate input value??? if not done during typing
|
||
|
||
if (hidden.bind === undefined) {
|
||
hidden.bind = [];
|
||
}
|
||
|
||
hidden.bind.push(inputButton.bind ? inputButton.bind : inputButton.value);
|
||
hidden.value = JSON.stringify(hidden.bind);
|
||
|
||
// TODO: handle table add
|
||
});
|
||
}
|
||
}
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.InputManager = function ()
|
||
{
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.KeyboardManager = function ()
|
||
{
|
||
};
|
||
|
||
jsOMS.KeyboardManager.prototype.attach = function (element, keys, callback) {
|
||
};
|
||
|
||
jsOMS.KeyboardManager.prototype.detach = function (eventId) {
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
var MathEvaluator = function () {
|
||
|
||
};
|
||
|
||
MathEvaluator.prototype.attach = function () {
|
||
|
||
};
|
||
|
||
MathEvaluator.prototype.detach = function () {
|
||
|
||
};
|
||
|
||
MathEvaluator.prototype.trigger = function (node) {
|
||
var value = node.value;
|
||
|
||
if (!value.slice(0, 1) == '=') {
|
||
return;
|
||
}
|
||
|
||
var processor = new MathProcessor();
|
||
return processor.parse(value);
|
||
};
|
||
var MouseClickType = Object.freeze({
|
||
LEFT: 1,
|
||
MIDDLE: 2,
|
||
RIGHT: 3
|
||
});
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.MouseManager = function ()
|
||
{
|
||
};
|
||
|
||
jsOMS.MouseManager.prototype.attach = function (clickType, element, callback) {
|
||
};
|
||
|
||
jsOMS.MouseManager.prototype.detach = function (eventId) {
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
/* responsible for loading external ui elements (css,html,js) */(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.TabManager = function (responseManager) {
|
||
this.responseManager = responseManager;
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.TabManager.prototype.bind = function (id) {
|
||
if (typeof id !== 'undefined') {
|
||
this.bindElement(document.getElementById(id));
|
||
} else {
|
||
var tabs = document.querySelectorAll('.tabview');
|
||
|
||
for (var i = 0; i < tabs.length; i++) {
|
||
this.bindElement(tabs[i]);
|
||
}
|
||
}
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.TabManager.prototype.bindElement = function (e) {
|
||
var nodes = e.querySelectorAll('.tab-links a');
|
||
|
||
nodes.addEventListener('click', function (evt) {
|
||
/* Change Tab */
|
||
var attr = this.getAttribute('href').substring(1),
|
||
cont = this.parentNode.parentNode.parentNode.children[1];
|
||
|
||
jsOMS.removeClass(jsOMS.getByClass(this.parentNode.parentNode, 'active'), 'active');
|
||
jsOMS.addClass(this.parentNode, 'active');
|
||
jsOMS.removeClass(jsOMS.getByClass(cont, 'active'), 'active');
|
||
jsOMS.addClass(jsOMS.getByClass(cont, attr), 'active');
|
||
|
||
/* Modify url */
|
||
|
||
jsOMS.preventAll(evt);
|
||
});
|
||
};
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
(function (jsOMS, undefined) {
|
||
// TODO: create comments
|
||
jsOMS.UIManager = function (app)
|
||
{
|
||
this.app = app;
|
||
this.formManager = new jsOMS.FormManager(this.app.responseManager);
|
||
this.tabManager = new jsOMS.TabManager(this.app.responseManager);
|
||
};
|
||
|
||
// TODO: create comments
|
||
jsOMS.UIManager.prototype.bind = function()
|
||
{
|
||
this.formManager.bind();
|
||
this.tabManager.bind();
|
||
}
|
||
|
||
// TODO: create comments
|
||
jsOMS.UIManager.prototype.getFormManager = function()
|
||
{
|
||
return this.formManager;
|
||
}
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
/* Handle minimize and maximize logic for boxes */
|
||
var nodes = document.querySelectorAll('.b > h1 .max, .b > h2 .max');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var box = jsOMS.getByClass(e.parentNode.parentNode, 'bc-1');
|
||
jsOMS.removeClass(box, 'vh');
|
||
});
|
||
});
|
||
|
||
nodes = document.querySelectorAll('.b > h1 .min, .b > h2 .min');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var box = jsOMS.getByClass(e.parentNode.parentNode, 'bc-1');
|
||
jsOMS.addClass(box, 'vh');
|
||
});
|
||
});
|
||
/*
|
||
* Handle global min/max logic.
|
||
* This switches min/max visibility on click.
|
||
*/
|
||
var nodes = document.getElementsByClassName('min');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e, 'vh');
|
||
jsOMS.removeClass(jsOMS.getByClass(e.parentNode, 'max'), 'vh');
|
||
});
|
||
});
|
||
|
||
nodes = document.getElementsByClassName('max');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e, 'vh');
|
||
jsOMS.removeClass(jsOMS.getByClass(e.parentNode, 'min'), 'vh');
|
||
});
|
||
});
|
||
|
||
/*
|
||
* Handle global dim
|
||
* This allows to activate and deactivate the background dim on certain elements/classes
|
||
*/
|
||
/* Deactivate dim if click on class .close or .save */
|
||
var dim = document.getElementById('dim');
|
||
nodes = document.querySelectorAll('.close, .save');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e.parentNode.parentNode.parentNode, 'vh');
|
||
|
||
jsOMS.addClass(dim, 'vh')
|
||
});
|
||
});
|
||
|
||
/* Activate dim if click on element with class dim */
|
||
nodes = document.getElementsByClassName('dim');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.removeClass(dim, 'vh')
|
||
});
|
||
});
|
||
/*
|
||
* Handle special case link and button clicks.
|
||
* This is usefull in order to support ajax calls and dynamic page changes without reloads
|
||
*/
|
||
var nodes = document.querySelectorAll('a, button, input[type=submit]');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
if (!e.hasAttribute('data-request') || !e.hasAttribute('data-http')) {
|
||
return true;
|
||
}
|
||
|
||
// TODO: create request object
|
||
|
||
var requestType = e.getAttribute('data-request'),
|
||
httpType = e.getAttribute('data-http'),
|
||
requestUri = '',
|
||
requestData = e.getAttribute('data-json');
|
||
|
||
if (requestType === 'URL') {
|
||
requestUri = e.getAttribute('href');
|
||
} else {
|
||
requestUri = e.getAttribute('data-uri');
|
||
}
|
||
|
||
jsOMS.ajax({
|
||
type: httpType,
|
||
url: URL + requestUri,
|
||
data: requestData,
|
||
requestHeader: "application/json; charset=utf-8",
|
||
responseType: "text",
|
||
success: function (ret) {
|
||
console.log(ret);
|
||
},
|
||
error: function (ret) {
|
||
console.log('error');
|
||
}
|
||
});
|
||
|
||
evt.preventDefault();
|
||
return false;
|
||
});
|
||
});
|
||
/* Handling minimizing */
|
||
var nodes = document.querySelectorAll('thead .min');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var body = jsOMS.getByTag(e.parentNode.parentNode.parentNode.parentNode, 'tbody');
|
||
jsOMS.addClass(body[0], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling maximizing */
|
||
nodes = document.querySelectorAll('thead .max');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var body = jsOMS.getByTag(e.parentNode.parentNode.parentNode.parentNode, 'tbody');
|
||
jsOMS.removeClass(body[0], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling header element click */
|
||
nodes = document.querySelectorAll('thead span');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var filter = e.parentNode.childNodes[4];
|
||
|
||
if (jsOMS.hasClass(filter, 'vh')) {
|
||
jsOMS.removeClass(filter, 'vh');
|
||
jsOMS.removeClass(e.parentNode.childNodes[1], 'vh');
|
||
}
|
||
});
|
||
});
|
||
|
||
/* Handling sort click */
|
||
nodes = document.querySelectorAll('thead td :nth-child(2)');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e, 'vh');
|
||
jsOMS.removeClass(e.parentNode.childNodes[2], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling sort click */
|
||
nodes = document.querySelectorAll('thead td :nth-child(3)');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e, 'vh');
|
||
jsOMS.removeClass(e.parentNode.childNodes[3], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling sort click */
|
||
nodes = document.querySelectorAll('thead td :nth-child(4)');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
jsOMS.addClass(e, 'vh');
|
||
jsOMS.removeClass(e.parentNode.childNodes[1], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling sort close click */
|
||
nodes = document.querySelectorAll('thead td :nth-child(5)');
|
||
jsOMS.each(nodes, function (ele) {
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var iParent = e.parentNode;
|
||
jsOMS.addClass(iParent.childNodes[1], 'vh');
|
||
jsOMS.addClass(iParent.childNodes[2], 'vh');
|
||
jsOMS.addClass(iParent.childNodes[3], 'vh');
|
||
jsOMS.addClass(iParent.childNodes[4], 'vh');
|
||
});
|
||
});
|
||
|
||
/* Handling filter view (creating and saving data) */
|
||
var list_filter_arr = [
|
||
[]
|
||
];
|
||
|
||
nodes = document.querySelectorAll('thead .f');
|
||
jsOMS.each(nodes, function (ele) {
|
||
var c = 0;
|
||
|
||
jsOMS.listenEvent(ele, 'click', function (evt, e) {
|
||
var table = e.parentNode.parentNode.parentNode.childNodes[2],
|
||
filter = document.getElementById('t-f'),
|
||
flist = document.querySelectorAll('#tf ul');
|
||
|
||
jsOMS.empty(flist);
|
||
|
||
var titles = jsOMS.getByTag(table, 'td');
|
||
|
||
jsOMS.each(titles, function (t) {
|
||
c++;
|
||
|
||
var val = '',
|
||
tid = e.parentNode.parentNode.parentNode.parentNode.getAttribute('id');
|
||
|
||
if ((tid in list_filter_arr) && ('i-' + c in list_filter_arr[tid])) {
|
||
val = list_filter_arr[tid]['i-' + c];
|
||
}
|
||
|
||
/* Still not working */
|
||
flist.innerHTML += '<li><label for="i-' + c + '">' + '</label>' + '<li><input name="i-' + c + '" id="i-' + c + '" type="text" value="' + val + '"><select><option>=<option>!=<option>><option><<option><></select>';
|
||
});
|
||
|
||
jsOMS.removeClass(filter, 'vh');
|
||
});
|
||
});
|
||
var formValidationMessage = function (data) {
|
||
var form = document.getElementById(data.form),
|
||
eEles = document.getElementsByClassName('i-' + data.form);
|
||
|
||
while (eEles.length > 0) {
|
||
eEles[0].parentNode.removeChild(eEles[0]);
|
||
}
|
||
|
||
data.errors.forEach(function (error) {
|
||
var eEle = document.getElementById(error.id),
|
||
msgEle = document.createElement('i'),
|
||
msg = document.createTextNode(error.msg);
|
||
|
||
msgEle.id = 'i-' + error.id;
|
||
msgEle.class = 'i-' + data.form;
|
||
msgEle.appendChild(msg);
|
||
eEle.parentNode.insertBefore(msgEle, eEle.nextSibling);
|
||
});
|
||
};
|
||
var notifyMessage = function (data) {
|
||
setTimeout(function () {
|
||
var notify = document.createElement('div'),
|
||
h = document.createElement('h1'),
|
||
inner = document.createElement('div'),
|
||
title = document.createTextNode(data.title),
|
||
content = document.createTextNode(data.content);
|
||
|
||
notify.id = 'notify';
|
||
notify.class = data.level;
|
||
h.appendChild(title);
|
||
inner.appendChild(content);
|
||
notify.appendChild(h);
|
||
notify.appendChild(inner);
|
||
|
||
if (data.stay > 0) {
|
||
setTimeout(function () {
|
||
notify.parentElement.removeChild(notify);
|
||
}, data.stay);
|
||
}
|
||
}, parseInt(data.delay));
|
||
};
|
||
(function (jsOMS, undefined) {
|
||
jsOMS.EnumNotifyType = Object.freeze({
|
||
BINARY: 0,
|
||
INFO: 1,
|
||
WARNING: 2,
|
||
ERROR: 3,
|
||
FATAL: 4
|
||
});
|
||
}(window.jsOMS = window.jsOMS || {}));
|
||
var redirectMessage = function (data) {
|
||
setTimeout(function () {
|
||
document.location.href = data.url;
|
||
}, parseInt(data.delay));
|
||
};
|
||
var reloadMessage = function (data) {
|
||
setTimeout(function () {
|
||
document.location.reload(true);
|
||
}, parseInt(data.delay));
|
||
};
|