Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f316dde8b7 | ||
|
|
13b18c3a62 | ||
|
|
18bf829c6b | ||
|
|
723b6345bb | ||
|
|
e235721c8b |
@@ -1,4 +1,5 @@
|
|||||||
/* general edit javascript */
|
/* general edit javascript */
|
||||||
|
/* jquery version */
|
||||||
|
|
||||||
/* jshint esversion: 6 */
|
/* jshint esversion: 6 */
|
||||||
|
|
||||||
@@ -11,19 +12,21 @@ if (!DEBUG) {
|
|||||||
});
|
});
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: pop
|
/**
|
||||||
// PARAMS: url, window name, features
|
* opens a popup window with winName and given features (string)
|
||||||
// RETURN: none
|
* @param {String} theURL the url
|
||||||
// DESC : opens a popup window with winNAme and given features (string)
|
* @param {String} winName window name
|
||||||
|
* @param {Object} features popup features
|
||||||
|
*/
|
||||||
function pop(theURL, winName, features) {
|
function pop(theURL, winName, features) {
|
||||||
winName = window.open(theURL, winName, features);
|
winName = window.open(theURL, winName, features);
|
||||||
winName.focus();
|
winName.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: expandTA
|
/**
|
||||||
// PARAMS: id
|
* automatically resize a text area based on the amount of lines in it
|
||||||
// RETURN: none
|
* @param {[string} ta_id element id
|
||||||
// DESC : automatically resize a text area based on the amount of lines in it
|
*/
|
||||||
function expandTA(ta_id) {
|
function expandTA(ta_id) {
|
||||||
var ta;
|
var ta;
|
||||||
// if a string comes, its a get by id, else use it as an element pass on
|
// if a string comes, its a get by id, else use it as an element pass on
|
||||||
@@ -44,10 +47,10 @@ function expandTA(ta_id) {
|
|||||||
ta.rows = numNewRows + theRows.length;
|
ta.rows = numNewRows + theRows.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getWindowSize
|
/**
|
||||||
// PARAMS: none
|
* wrapper to get the real window size for the current browser window
|
||||||
// RETURN: array with width/height
|
* @return {Object} object with width/height
|
||||||
// DESC : wrapper to get the real window size for the current browser window
|
*/
|
||||||
function getWindowSize()
|
function getWindowSize()
|
||||||
{
|
{
|
||||||
var width, height;
|
var width, height;
|
||||||
@@ -59,10 +62,10 @@ function getWindowSize()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getScrollOffset
|
/**
|
||||||
// PARAMS: none
|
* wrapper to get the correct scroll offset
|
||||||
// RETURN: array with x/y px
|
* @return {Object} object with x/y px
|
||||||
// DESC : wrapper to get the correct scroll offset
|
*/
|
||||||
function getScrollOffset()
|
function getScrollOffset()
|
||||||
{
|
{
|
||||||
var left, top;
|
var left, top;
|
||||||
@@ -74,10 +77,12 @@ function getScrollOffset()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: setCenter
|
/**
|
||||||
// PARAMS: id to set center
|
* centers div to current window size middle
|
||||||
// RETURN: none
|
* @param {String} id element to center
|
||||||
// DESC : centers div to current window size middle
|
* @param {Boolean} left if true centers to the middle from the left
|
||||||
|
* @param {Boolean} top if true centers to the middle from the top
|
||||||
|
*/
|
||||||
function setCenter(id, left, top)
|
function setCenter(id, left, top)
|
||||||
{
|
{
|
||||||
// get size of id
|
// get size of id
|
||||||
@@ -107,10 +112,11 @@ function setCenter(id, left, top)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: goToPos()
|
/**
|
||||||
// PARAMS: element, offset (default 0)
|
* goes to an element id position
|
||||||
// RETURN: none
|
* @param {String} element element id to move to
|
||||||
// DESC: goes to an element id position
|
* @param {Number} [offset=0] offset from top, default is 0 (px)
|
||||||
|
*/
|
||||||
function goToPos(element, offset = 0)
|
function goToPos(element, offset = 0)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@@ -125,10 +131,12 @@ function goToPos(element, offset = 0)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: __
|
/**
|
||||||
// PARAMS: text
|
* uses the i18n object created in the translation template
|
||||||
// RETURN: translated text (based on PHP selected language)
|
* that is filled from gettext in PHP
|
||||||
// DESC : uses the i18n array created in the translation template, that is filled from gettext in PHP (Smarty)
|
* @param {String} string text to translate
|
||||||
|
* @return {String} translated text (based on PHP selected language)
|
||||||
|
*/
|
||||||
function __(string)
|
function __(string)
|
||||||
{
|
{
|
||||||
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
||||||
@@ -138,12 +146,13 @@ function __(string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: string.format
|
/**
|
||||||
// PARAMS: any, for string format
|
* simple sprintf formater for replace
|
||||||
// RETURN: formatted string
|
* usage: "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||||
// DESC : simple sprintf formater for replace
|
* First, checks if it isn't implemented yet.
|
||||||
// "{0} is cool, {1} is not".format("Alpha", "Beta");
|
* @param {String} !String.prototype.format string with elements to be replaced
|
||||||
// First, checks if it isn't implemented yet.
|
* @return {String} Formated string
|
||||||
|
*/
|
||||||
if (!String.prototype.format) {
|
if (!String.prototype.format) {
|
||||||
String.prototype.format = function()
|
String.prototype.format = function()
|
||||||
{
|
{
|
||||||
@@ -158,25 +167,32 @@ if (!String.prototype.format) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: numberWithCommas
|
/**
|
||||||
// PARAMS: number
|
* formats flat number 123456 to 123,456
|
||||||
// RETURN: formatted with , in thousands
|
* @param {Number} x number to be formated
|
||||||
// DESC : formats flat number 123456 to 123,456
|
* @return {String} formatted with , in thousands
|
||||||
|
*/
|
||||||
const numberWithCommas = (x) => {
|
const numberWithCommas = (x) => {
|
||||||
var parts = x.toString().split(".");
|
var parts = x.toString().split(".");
|
||||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||||
return parts.join(".");
|
return parts.join(".");
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD:
|
/**
|
||||||
// PARAMS: string
|
* converts line breaks to br
|
||||||
// RETURN: string with <br>
|
* @param {String} string any string
|
||||||
// DESC : converts line breaks to br
|
* @return {String} string with <br>
|
||||||
|
*/
|
||||||
function convertLBtoBR(string)
|
function convertLBtoBR(string)
|
||||||
{
|
{
|
||||||
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* escape HTML string
|
||||||
|
* @param {String} !String.prototype.escapeHTML HTML data string to be escaped
|
||||||
|
* @return {String} escaped string
|
||||||
|
*/
|
||||||
if (!String.prototype.escapeHTML) {
|
if (!String.prototype.escapeHTML) {
|
||||||
String.prototype.escapeHTML = function() {
|
String.prototype.escapeHTML = function() {
|
||||||
return this.replace(/[&<>"'\/]/g, function (s) {
|
return this.replace(/[&<>"'\/]/g, function (s) {
|
||||||
@@ -194,6 +210,11 @@ if (!String.prototype.escapeHTML) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* unescape a HTML encoded string
|
||||||
|
* @param {String} !String.prototype.unescapeHTML data with escaped entries
|
||||||
|
* @return {String} HTML formated string
|
||||||
|
*/
|
||||||
if (!String.prototype.unescapeHTML) {
|
if (!String.prototype.unescapeHTML) {
|
||||||
String.prototype.unescapeHTML = function() {
|
String.prototype.unescapeHTML = function() {
|
||||||
return this.replace(/&[#\w]+;/g, function (s) {
|
return this.replace(/&[#\w]+;/g, function (s) {
|
||||||
@@ -211,31 +232,33 @@ if (!String.prototype.unescapeHTML) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getTimestamp
|
/**
|
||||||
// PARAMS: none
|
* returns current timestamp (unix timestamp)
|
||||||
// RETURN: timestamp (in milliseconds)
|
* @return {Number} timestamp (in milliseconds)
|
||||||
// DESC : returns current timestamp (unix timestamp)
|
*/
|
||||||
function getTimestamp()
|
function getTimestamp()
|
||||||
{
|
{
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
return date.getTime();
|
return date.getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: dec2hex
|
/**
|
||||||
// PARAMS: decimal string
|
* dec2hex :: Integer -> String
|
||||||
// RETURN: string
|
* i.e. 0-255 -> '00'-'ff'
|
||||||
// DESC : dec2hex :: Integer -> String
|
* @param {Number} dec decimal string
|
||||||
// i.e. 0-255 -> '00'-'ff'
|
* @return {String} hex encdoded number
|
||||||
|
*/
|
||||||
function dec2hex(dec)
|
function dec2hex(dec)
|
||||||
{
|
{
|
||||||
return ('0' + dec.toString(16)).substr(-2);
|
return ('0' + dec.toString(16)).substr(-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: generateId
|
/**
|
||||||
// PARAMS: lenght in int
|
* generateId :: Integer -> String
|
||||||
// RETURN: random string
|
* only works on mondern browsers
|
||||||
// DESC : generateId :: Integer -> String
|
* @param {Number} len length of unique id string
|
||||||
// only works on mondern browsers
|
* @return {String} random string in length of len
|
||||||
|
*/
|
||||||
function generateId(len)
|
function generateId(len)
|
||||||
{
|
{
|
||||||
var arr = new Uint8Array((len || 40) / 2);
|
var arr = new Uint8Array((len || 40) / 2);
|
||||||
@@ -243,20 +266,22 @@ function generateId(len)
|
|||||||
return Array.from(arr, dec2hex).join('');
|
return Array.from(arr, dec2hex).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: randomIdF()
|
/**
|
||||||
// PARAMS: none
|
* creates a pseudo random string of 10 characters
|
||||||
// RETURN: not true random string
|
* works on all browsers
|
||||||
// DESC : creates a pseudo random string of 10 characters
|
* after many runs it will create duplicates
|
||||||
// after many runs it will create duplicates
|
* @return {String} not true random string
|
||||||
|
*/
|
||||||
function randomIdF()
|
function randomIdF()
|
||||||
{
|
{
|
||||||
return Math.random().toString(36).substring(2);
|
return Math.random().toString(36).substring(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: isObject
|
/**
|
||||||
// PARAMS: possible object
|
* checks if a variable is an object
|
||||||
// RETURN: true/false if it is an object or not
|
* @param {Mixed} val possible object
|
||||||
// DESC : checks if a variable is an object
|
* @return {Boolean} true/false if it is an object or not
|
||||||
|
*/
|
||||||
function isObject(val) {
|
function isObject(val) {
|
||||||
if (val === null) {
|
if (val === null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -264,47 +289,55 @@ function isObject(val) {
|
|||||||
return ((typeof val === 'function') || (typeof val === 'object'));
|
return ((typeof val === 'function') || (typeof val === 'object'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: keyInObject
|
/**
|
||||||
// PARAMS: key name, object
|
* checks if a key exists in a given object
|
||||||
// RETURN: true/false if key exists in object
|
* @param {String} key key name
|
||||||
// DESC : checks if a key exists in a given object
|
* @param {Object} object object to search key in
|
||||||
|
* @return {Boolean} true/false if key exists in object
|
||||||
|
*/
|
||||||
const keyInObject = (key, object) => (key in object) ? true : false;
|
const keyInObject = (key, object) => (key in object) ? true : false;
|
||||||
/*function keyInObject(key, object)
|
/*function keyInObject(key, object)
|
||||||
{
|
{
|
||||||
return (key in object) ? true : false;
|
return (key in object) ? true : false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: getKeyByValue
|
/**
|
||||||
// PARAMS: object, value
|
* returns matching key of value
|
||||||
// RETURN: key found
|
* @param {Object} obj object to search value in
|
||||||
// DESC : returns matching key of value
|
* @param {Mixed} value any value (String, Number, etc)
|
||||||
|
* @return {String} the key found for the first matching value
|
||||||
|
*/
|
||||||
const getKeyByValue = (obj, value) => Object.keys(obj).find(key => obj[key] === value);
|
const getKeyByValue = (obj, value) => Object.keys(obj).find(key => obj[key] === value);
|
||||||
// function getKeyByValue(object, value)
|
// function getKeyByValue(object, value)
|
||||||
// {
|
// {
|
||||||
// return Object.keys(object).find(key => object[key] === value);
|
// return Object.keys(object).find(key => object[key] === value);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// METHOD: valueInObject
|
/**
|
||||||
// PARAMS: obj, value
|
* returns true if value is found in object with a key
|
||||||
// RETURN: true/false
|
* @param {Object} obj object to search value in
|
||||||
// DESC : returns true if value is found in object with a key
|
* @param {Mixed} value any value (String, Number, etc)
|
||||||
|
* @return {Boolean} true on value found, false on not found
|
||||||
|
*/
|
||||||
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
||||||
|
|
||||||
// METHOD: exists
|
/**
|
||||||
// PARAMS: uid
|
* checks if a DOM element actually exists
|
||||||
// RETURN: true/false
|
* @param {String} id Element id to check for
|
||||||
// DESC : checks if a DOM element actually exists
|
* @return {Boolean} true if element exists, false on failure
|
||||||
|
*/
|
||||||
const exists = (id) => $('#' + id).length > 0 ? true : false;
|
const exists = (id) => $('#' + id).length > 0 ? true : false;
|
||||||
/*function exists(id)
|
/*function exists(id)
|
||||||
{
|
{
|
||||||
return $('#' + id).length > 0 ? true : false;
|
return $('#' + id).length > 0 ? true : false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: formatBytes
|
/**
|
||||||
// PARAMS: bytes in int
|
* converts a int number into bytes with prefix in two decimals precision
|
||||||
// RETURN: string in GB/MB/KB
|
* currently precision is fixed, if dynamic needs check for max/min precision
|
||||||
// DESC : converts a int number into bytes with prefix in two decimals precision
|
* @param {Number} bytes bytes in int
|
||||||
// currently precision is fixed, if dynamic needs check for max/min precision
|
* @return {String} string in GB/MB/KB
|
||||||
|
*/
|
||||||
function formatBytes(bytes)
|
function formatBytes(bytes)
|
||||||
{
|
{
|
||||||
var i = -1;
|
var i = -1;
|
||||||
@@ -316,10 +349,10 @@ function formatBytes(bytes)
|
|||||||
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: errorCatch
|
/**
|
||||||
// PARAMS: err (error from try/catch
|
* prints out error messages based on data available from the browser
|
||||||
// RETURN: none
|
* @param {Object} err error from try/catch block
|
||||||
// DESC : prints out error messages based on data available from the browser
|
*/
|
||||||
function errorCatch(err)
|
function errorCatch(err)
|
||||||
{
|
{
|
||||||
// for FF & Chrome
|
// for FF & Chrome
|
||||||
@@ -345,10 +378,10 @@ function errorCatch(err)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: actionIndicator
|
/**
|
||||||
// PARAMS: none
|
* show or hide the "do" overlay
|
||||||
// RETURN: none
|
* @param {String} [loc=''] location name for action indicator, default empty. for console.log
|
||||||
// DESC : show or hide the "do" overlay
|
*/
|
||||||
function actionIndicator(loc = '')
|
function actionIndicator(loc = '')
|
||||||
{
|
{
|
||||||
if ($('#overlayBox').is(':visible')) {
|
if ($('#overlayBox').is(':visible')) {
|
||||||
@@ -358,12 +391,11 @@ function actionIndicator(loc = '')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: actionIndicatorShow/actionIndicatorHide
|
/**
|
||||||
// PARAMS: loc for console log info
|
* explicit show for action Indicator
|
||||||
// RETURN: none
|
* instead of automatically show or hide, do on command show
|
||||||
// DESC : explicit show/hide for action Indicator
|
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||||
// instead of automatically show or hide, do
|
*/
|
||||||
// on command
|
|
||||||
function actionIndicatorShow(loc = '')
|
function actionIndicatorShow(loc = '')
|
||||||
{
|
{
|
||||||
console.log('Indicator: SHOW [%s]', loc);
|
console.log('Indicator: SHOW [%s]', loc);
|
||||||
@@ -372,6 +404,12 @@ function actionIndicatorShow(loc = '')
|
|||||||
$('#indicator').show();
|
$('#indicator').show();
|
||||||
overlayBoxShow();
|
overlayBoxShow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* explicit hide for action Indicator
|
||||||
|
* instead of automatically show or hide, do on command hide
|
||||||
|
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||||
|
*/
|
||||||
function actionIndicatorHide(loc = '')
|
function actionIndicatorHide(loc = '')
|
||||||
{
|
{
|
||||||
console.log('Indicator: HIDE [%s]', loc);
|
console.log('Indicator: HIDE [%s]', loc);
|
||||||
@@ -380,10 +418,9 @@ function actionIndicatorHide(loc = '')
|
|||||||
overlayBoxHide();
|
overlayBoxHide();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: overlayBoxView
|
/**
|
||||||
// PARAMS: none
|
* shows the overlay box
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : shows or hides the overlay box
|
|
||||||
function overlayBoxShow()
|
function overlayBoxShow()
|
||||||
{
|
{
|
||||||
// check if overlay box exists and if yes set the z-index to 100
|
// check if overlay box exists and if yes set the z-index to 100
|
||||||
@@ -393,6 +430,10 @@ function overlayBoxShow()
|
|||||||
$('#overlayBox').show();
|
$('#overlayBox').show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hides the overlay box
|
||||||
|
*/
|
||||||
function overlayBoxHide()
|
function overlayBoxHide()
|
||||||
{
|
{
|
||||||
// if the overlay box z-index is 100, do no hide, but set to 98
|
// if the overlay box z-index is 100, do no hide, but set to 98
|
||||||
@@ -403,10 +444,9 @@ function overlayBoxHide()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: setOverlayBox
|
/**
|
||||||
// PARAMS: none
|
* position the overlay block box and shows it
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : position the overlay block box and shows it
|
|
||||||
function setOverlayBox()
|
function setOverlayBox()
|
||||||
{
|
{
|
||||||
var viewport = document.viewport.getDimensions();
|
var viewport = document.viewport.getDimensions();
|
||||||
@@ -417,10 +457,9 @@ function setOverlayBox()
|
|||||||
$('#overlayBox').show();
|
$('#overlayBox').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: ClearCall
|
/**
|
||||||
// PARAMS: none
|
* the abort call, clears the action box and hides it and the overlay box
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : the abort call, clears the action box and hides it and the overlay box
|
|
||||||
function ClearCall()
|
function ClearCall()
|
||||||
{
|
{
|
||||||
$('#actionBox').innerHTML = '';
|
$('#actionBox').innerHTML = '';
|
||||||
@@ -429,14 +468,15 @@ function ClearCall()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// *** DOM MANAGEMENT FUNCTIONS
|
// *** DOM MANAGEMENT FUNCTIONS
|
||||||
// METHOD: cel [create element]
|
/**
|
||||||
// PARAMS: tag: must set tag (div, span, etc)
|
* reates object for DOM element creation flow
|
||||||
// id: optional set for id, if input, select will be used for name
|
* @param {String} tag must set tag (div, span, etc)
|
||||||
// content: text content inside, is skipped if sub elements exist
|
* @param {String} [id=''] optional set for id, if input, select will be used for name
|
||||||
// css: array for css tags
|
* @param {String} [content=''] text content inside, is skipped if sub elements exist
|
||||||
// options: anything else (value, placeholder, OnClick, style)
|
* @param {Array} [css=[]] array for css tags
|
||||||
// RETURN: object
|
* @param {Object} [options={}] anything else (value, placeholder, OnClick, style)
|
||||||
// DESC : creates object for DOM element creation flow
|
* @return {Object} created element as an object
|
||||||
|
*/
|
||||||
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||||
_element = {
|
_element = {
|
||||||
tag: tag,
|
tag: tag,
|
||||||
@@ -448,12 +488,13 @@ const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
|||||||
sub: []
|
sub: []
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD: ael [attach element]
|
/**
|
||||||
// PARAMS: base: object where to attach/search
|
* attach a cel created object to another to create a basic DOM tree
|
||||||
// attach: the object to be attached
|
* @param {Object} base object where to attach/search
|
||||||
// id: optional id, if given search in base for this id and attach there
|
* @param {Object} attach the object to be attached
|
||||||
// RETURN: "none", technically there is no return needed
|
* @param {String} [id=''] optional id, if given search in base for this id and attach there
|
||||||
// DESC : attach a cel created object to another to create a basic DOM tree
|
* @return {Object} "none", technically there is no return needed as it is global attach
|
||||||
|
*/
|
||||||
function ael(base, attach, id = '')
|
function ael(base, attach, id = '')
|
||||||
{
|
{
|
||||||
if (id) {
|
if (id) {
|
||||||
@@ -475,12 +516,13 @@ function ael(base, attach, id = '')
|
|||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: aelx [attach n elements]
|
/**
|
||||||
// PARAMS: base: object to where we attach the elements
|
* directly attach n elements to one master base element
|
||||||
// attach 1..n: attach directly to the base element those attachments
|
* this type does not support attach with optional id
|
||||||
// RETURN: "none", technically there is no return needed
|
* @param {Object} base object to where we attach the elements
|
||||||
// DESC : directly attach n elements to one master base element
|
* @param {...Object} attach attach 1..n: attach directly to the base element those attachments
|
||||||
// this type does not support attach with optional id
|
* @return {Object} "none", technically there is no return needed, global attach
|
||||||
|
*/
|
||||||
function aelx(base, ...attach)
|
function aelx(base, ...attach)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < attach.length; i ++) {
|
for (var i = 0; i < attach.length; i ++) {
|
||||||
@@ -489,19 +531,22 @@ function aelx(base, ...attach)
|
|||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: rel [reset element]
|
/**
|
||||||
// PARAMS: cel created element
|
* resets the sub elements of the base element given
|
||||||
// RETURN: returns sub reset base element
|
* @param {Object} base cel created element
|
||||||
// DESC : resets the sub elements of the base element given
|
* @return {Object} returns reset base element
|
||||||
|
*/
|
||||||
const rel = (base) => {
|
const rel = (base) => {
|
||||||
base.sub = [];
|
base.sub = [];
|
||||||
return base;
|
return base;
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD: rcssel [remove a css from the element]
|
/**
|
||||||
// PARAMS: element, style sheet to remove
|
* searches and removes style from css array
|
||||||
// RETURN: "none", in place because of reference
|
* @param {Object} _element element to work one
|
||||||
// DESC : searches and removes style from css array
|
* @param {String css style sheet to remove (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function rcssel(_element, css)
|
function rcssel(_element, css)
|
||||||
{
|
{
|
||||||
var css_index = _element.css.indexOf(css);
|
var css_index = _element.css.indexOf(css);
|
||||||
@@ -511,10 +556,12 @@ function rcssel(_element, css)
|
|||||||
return _element;
|
return _element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: acssel [add css element]
|
/**
|
||||||
// PARAMS: element, style sheet to add
|
* adds a new style sheet to the element given
|
||||||
// RETURN: "none", in place add because of reference
|
* @param {Object} _element element to work on
|
||||||
// DESC : adds a new style sheet to the element given
|
* @param {String} css style sheet to add (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function acssel(_element, css)
|
function acssel(_element, css)
|
||||||
{
|
{
|
||||||
var css_index = _element.css.indexOf(css);
|
var css_index = _element.css.indexOf(css);
|
||||||
@@ -524,23 +571,26 @@ function acssel(_element, css)
|
|||||||
return _element;
|
return _element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: scssel
|
/**
|
||||||
// PARAMS: element, style to remove, style to add
|
* removes one css and adds another
|
||||||
// RETURN: "none", in place add because of reference
|
* is a wrapper around rcssel/acssel
|
||||||
// DESC : removes one css and adds another
|
* @param {Object} _element element to work on
|
||||||
// is a wrapper around rcssel/acssel
|
* @param {String} rcss style to remove (name)
|
||||||
|
* @param {String} acss style to add (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function scssel(_element, rcss, acss)
|
function scssel(_element, rcss, acss)
|
||||||
{
|
{
|
||||||
rcssel(_element, rcss);
|
rcssel(_element, rcss);
|
||||||
acssel(_element, acss);
|
acssel(_element, acss);
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: phfo [produce html from object]
|
/**
|
||||||
// PARAMS: object tree with dom element declarations
|
* parses the object tree created with cel/ael and converts it into an HTML string
|
||||||
// RETURN: HTML string that can be used as innerHTML
|
* that can be inserted into the page
|
||||||
// DESC : parses the object tree created with cel/ael
|
* @param {Object} tree object tree with dom element declarations
|
||||||
// and converts it into an HTML string that can
|
* @return {String} HTML string that can be used as innerHTML
|
||||||
// be inserted into the page
|
*/
|
||||||
function phfo(tree)
|
function phfo(tree)
|
||||||
{
|
{
|
||||||
// holds the elements
|
// holds the elements
|
||||||
@@ -603,33 +653,44 @@ function phfo(tree)
|
|||||||
|
|
||||||
// BLOCK: html wrappers for quickly creating html data blocks
|
// BLOCK: html wrappers for quickly creating html data blocks
|
||||||
|
|
||||||
// NOTE : OLD FORMAT which misses multiple block set
|
/**
|
||||||
// METHOD: html_options
|
* NOTE: OLD FORMAT which misses multiple block set
|
||||||
// PARAMS: name/id, array for the options, selected item uid
|
* creates an select/options drop down block.
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
* the array needs to be key -> value format.
|
||||||
// return_string [def false]: return as string and not as element
|
* key is for the option id and value is for the data output
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {String} name name/id
|
||||||
// RETURN: html with build options block
|
* @param {Object} data array for the options
|
||||||
// DESC : creates an select/options drop down block.
|
* @param {String} [selected=''] selected item uid
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||||
|
* @param {Boolean} [return_string=false] return as string and not as element
|
||||||
|
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||||
|
* 'values' all others are ignored
|
||||||
|
* @return {String} html with build options block
|
||||||
|
*/
|
||||||
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
// wrapper to new call
|
// wrapper to new call
|
||||||
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : USE THIS CALL, the above one is deprecated
|
/**
|
||||||
// METHOD: html_options
|
* NOTE: USE THIS CALL, the above one is deprecated
|
||||||
// PARAMS: name/id, array for the options,
|
* creates an select/options drop down block.
|
||||||
// selected item uid [drop down string, multi select array]
|
* the array needs to be key -> value format.
|
||||||
// multiple [def 0] if this is 1 or larger, the drop down will be turned into multiple select
|
* key is for the option id and value is for the data output
|
||||||
// the number sets the size value unless it is 1, then it is default
|
* @param {String} name name/id
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
* @param {Object} data array for the options
|
||||||
// return_string [def false]: return as string and not as element
|
* @param {String} [selected=''] selected item uid
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {Number} [multiple=0] if this is 1 or larger, the drop down
|
||||||
// RETURN: html with build options block
|
* will be turned into multiple select
|
||||||
// DESC : creates an select/options drop down block.
|
* the number sets the size value unless it is 1,
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
* then it is default
|
||||||
|
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||||
|
* @param {Boolean} [return_string=false] return as string and not as element
|
||||||
|
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||||
|
* 'values' all others are ignored
|
||||||
|
* @return {String} html with build options block
|
||||||
|
*/
|
||||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
var content = [];
|
var content = [];
|
||||||
@@ -700,11 +761,13 @@ function html_options_block(name, data, selected = '', multiple = 0, options_onl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: html_options_refill
|
/**
|
||||||
// PARAMS: name/id, array of options, sort = ''
|
* refills a select box with options and keeps the selected
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {String} name name/id
|
||||||
// RETURN: none
|
* @param {Object} data array of options
|
||||||
// DESC : refills a select box with options and keeps the selected
|
* @param {String} [sort=''] if empty as is, else allowed 'keys', 'values'
|
||||||
|
* all others are ignored
|
||||||
|
*/
|
||||||
function html_options_refill(name, data, sort = '')
|
function html_options_refill(name, data, sort = '')
|
||||||
{
|
{
|
||||||
var element_option;
|
var element_option;
|
||||||
@@ -739,10 +802,9 @@ function html_options_refill(name, data, sort = '')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// *** MASTER logout call
|
// *** MASTER logout call
|
||||||
// METHOD: loginLogout
|
/**
|
||||||
// PARAMS: none
|
* submits basic data for form logout
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : submits basic data for form logout
|
|
||||||
function loginLogout()
|
function loginLogout()
|
||||||
{
|
{
|
||||||
const form = document.createElement('form');
|
const form = document.createElement('form');
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
/* general edit javascript */
|
/* general edit javascript */
|
||||||
|
/* prototype version */
|
||||||
|
|
||||||
/* jshint esversion: 6 */
|
/* jshint esversion: 6 */
|
||||||
|
|
||||||
@@ -11,19 +12,21 @@ if (!DEBUG) {
|
|||||||
});
|
});
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: pop
|
/**
|
||||||
// PARAMS: url, window name, features
|
* opens a popup window with winName and given features (string)
|
||||||
// RETURN: none
|
* @param {String} theURL the url
|
||||||
// DESC : opens a popup window with winName and given features (string)
|
* @param {String} winName window name
|
||||||
|
* @param {Object} features popup features
|
||||||
|
*/
|
||||||
function pop(theURL, winName, features) {
|
function pop(theURL, winName, features) {
|
||||||
winName = window.open(theURL, winName, features);
|
winName = window.open(theURL, winName, features);
|
||||||
winName.focus();
|
winName.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: expandTA
|
/**
|
||||||
// PARAMS: id
|
* automatically resize a text area based on the amount of lines in it
|
||||||
// RETURN: none
|
* @param {[string} ta_id element id
|
||||||
// DESC : automatically resize a text area based on the amount of lines in it
|
*/
|
||||||
function expandTA(ta_id) {
|
function expandTA(ta_id) {
|
||||||
var ta;
|
var ta;
|
||||||
// if a string comes, its a get by id, else use it as an element pass on
|
// if a string comes, its a get by id, else use it as an element pass on
|
||||||
@@ -44,12 +47,12 @@ function expandTA(ta_id) {
|
|||||||
ta.rows = numNewRows + theRows.length;
|
ta.rows = numNewRows + theRows.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: ShowHideMenu
|
/**
|
||||||
// PARAMS: status -> show or hide
|
* shows or hides the menu
|
||||||
// id -> id to work on
|
* this is used in some old menu templates
|
||||||
// RETURN: none
|
* @param {String} status show or hide
|
||||||
// DESC: shows or hides the menu
|
* @param {String} id element id to work on
|
||||||
// this is used in some old menu templates
|
*/
|
||||||
function ShowHideMenu(status, id)
|
function ShowHideMenu(status, id)
|
||||||
{
|
{
|
||||||
if (status == 'show') {
|
if (status == 'show') {
|
||||||
@@ -65,8 +68,12 @@ function ShowHideMenu(status, id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in old templates
|
/**
|
||||||
// move element action
|
* used in old templates
|
||||||
|
* move element action
|
||||||
|
* @param {String} id element id to move
|
||||||
|
* @param {String} direction move direction
|
||||||
|
*/
|
||||||
function mv(id, direction)
|
function mv(id, direction)
|
||||||
{
|
{
|
||||||
document.forms[form_name].action.value = 'move';
|
document.forms[form_name].action.value = 'move';
|
||||||
@@ -75,7 +82,11 @@ function mv(id, direction)
|
|||||||
document.forms[form_name].submit();
|
document.forms[form_name].submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// load element action
|
/**
|
||||||
|
* used in old templates
|
||||||
|
* load element action
|
||||||
|
* @param {String} id the element id to load
|
||||||
|
*/
|
||||||
function le(id)
|
function le(id)
|
||||||
{
|
{
|
||||||
document.forms[form_name].action.value = 'load';
|
document.forms[form_name].action.value = 'load';
|
||||||
@@ -91,13 +102,14 @@ function le(id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: sh
|
/**
|
||||||
// PARAMS: id -> element to hide
|
* hides an element, additional writes 1 (show) or 0 (hide) into <id>Flag field
|
||||||
// showText -> text for the element if shown
|
* this needs scriptacolous installed for BlindUp/BlindDown
|
||||||
// hideText -> text for the element if hidden
|
* @param {String} id element id to hide
|
||||||
// RETURN: returns true if hidden, or false if not
|
* @param {String} showText text for the element if shown
|
||||||
// DESC : hides an element, additional writes 1 (show) or 0 (hide) into <id>Flag field
|
* @param {String} hideText text for the element if hidden
|
||||||
// this needs scriptacolous installed for BlindUp/BlindDown
|
* @return {Boolean} returns true if hidden, or false if not
|
||||||
|
*/
|
||||||
function sh(id, showText, hideText)
|
function sh(id, showText, hideText)
|
||||||
{
|
{
|
||||||
flag = id + 'Flag';
|
flag = id + 'Flag';
|
||||||
@@ -120,10 +132,10 @@ function sh(id, showText, hideText)
|
|||||||
return divStatus;
|
return divStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getWindowSize
|
/**
|
||||||
// PARAMS: none
|
* wrapper to get the real window size for the current browser window
|
||||||
// RETURN: array with width/height
|
* @return {Object} object with width/height
|
||||||
// DESC : wrapper to get the real window size for the current browser window
|
*/
|
||||||
function getWindowSize()
|
function getWindowSize()
|
||||||
{
|
{
|
||||||
var width, height;
|
var width, height;
|
||||||
@@ -135,10 +147,10 @@ function getWindowSize()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getScrollOffset
|
/**
|
||||||
// PARAMS: none
|
* wrapper to get the correct scroll offset
|
||||||
// RETURN: array with x/y px
|
* @return {Object} object with x/y px
|
||||||
// DESC : wrapper to get the correct scroll offset
|
*/
|
||||||
function getScrollOffset()
|
function getScrollOffset()
|
||||||
{
|
{
|
||||||
var left, top;
|
var left, top;
|
||||||
@@ -150,10 +162,12 @@ function getScrollOffset()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: setCenter
|
/**
|
||||||
// PARAMS: id to set center
|
* centers div to current window size middle
|
||||||
// RETURN: none
|
* @param {String} id element to center
|
||||||
// DESC : centers div to current window size middle
|
* @param {Boolean} left if true centers to the middle from the left
|
||||||
|
* @param {Boolean} top if true centers to the middle from the top
|
||||||
|
*/
|
||||||
function setCenter(id, left, top)
|
function setCenter(id, left, top)
|
||||||
{
|
{
|
||||||
// get size of id
|
// get size of id
|
||||||
@@ -179,10 +193,11 @@ function setCenter(id, left, top)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: goToPos()
|
/**
|
||||||
// PARAMS: element, offset (default 0)
|
* goes to an element id position
|
||||||
// RETURN: none
|
* @param {String} element element id to move to
|
||||||
// DESC: goes to an element id position
|
* @param {Number} [offset=0] offset from top, default is 0 (px)
|
||||||
|
*/
|
||||||
function goToPos(element, offset = 0)
|
function goToPos(element, offset = 0)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@@ -203,10 +218,12 @@ function goToPos(element, offset = 0)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: __
|
/**
|
||||||
// PARAMS: text
|
* uses the i18n object created in the translation template
|
||||||
// RETURN: translated text (based on PHP selected language)
|
* that is filled from gettext in PHP
|
||||||
// DESC : uses the i18n array created in the translation template, that is filled from gettext in PHP (Smarty)
|
* @param {String} string text to translate
|
||||||
|
* @return {String} translated text (based on PHP selected language)
|
||||||
|
*/
|
||||||
function __(string)
|
function __(string)
|
||||||
{
|
{
|
||||||
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
||||||
@@ -216,12 +233,13 @@ function __(string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: string.format
|
/**
|
||||||
// PARAMS: any, for string format
|
* simple sprintf formater for replace
|
||||||
// RETURN: formatted string
|
* usage: "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||||
// DESC : simple sprintf formater for replace
|
* First, checks if it isn't implemented yet.
|
||||||
// "{0} is cool, {1} is not".format("Alpha", "Beta");
|
* @param {String} !String.prototype.format string with elements to be replaced
|
||||||
// First, checks if it isn't implemented yet.
|
* @return {String} Formated string
|
||||||
|
*/
|
||||||
if (!String.prototype.format) {
|
if (!String.prototype.format) {
|
||||||
String.prototype.format = function()
|
String.prototype.format = function()
|
||||||
{
|
{
|
||||||
@@ -236,25 +254,32 @@ if (!String.prototype.format) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: numberWithCommas
|
/**
|
||||||
// PARAMS: number
|
* formats flat number 123456 to 123,456
|
||||||
// RETURN: formatted with , in thousands
|
* @param {Number} x number to be formated
|
||||||
// DESC : formats flat number 123456 to 123,456
|
* @return {String} formatted with , in thousands
|
||||||
|
*/
|
||||||
const numberWithCommas = (x) => {
|
const numberWithCommas = (x) => {
|
||||||
var parts = x.toString().split(".");
|
var parts = x.toString().split(".");
|
||||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||||
return parts.join(".");
|
return parts.join(".");
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD:
|
/**
|
||||||
// PARAMS: string
|
* converts line breaks to br
|
||||||
// RETURN: string with <br>
|
* @param {String} string any string
|
||||||
// DESC : converts line breaks to br
|
* @return {String} string with <br>
|
||||||
|
*/
|
||||||
function convertLBtoBR(string)
|
function convertLBtoBR(string)
|
||||||
{
|
{
|
||||||
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* escape HTML string
|
||||||
|
* @param {String} !String.prototype.escapeHTML HTML data string to be escaped
|
||||||
|
* @return {String} escaped string
|
||||||
|
*/
|
||||||
if (!String.prototype.escapeHTML) {
|
if (!String.prototype.escapeHTML) {
|
||||||
String.prototype.escapeHTML = function() {
|
String.prototype.escapeHTML = function() {
|
||||||
return this.replace(/[&<>"'\/]/g, function (s) {
|
return this.replace(/[&<>"'\/]/g, function (s) {
|
||||||
@@ -272,6 +297,11 @@ if (!String.prototype.escapeHTML) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* unescape a HTML encoded string
|
||||||
|
* @param {String} !String.prototype.unescapeHTML data with escaped entries
|
||||||
|
* @return {String} HTML formated string
|
||||||
|
*/
|
||||||
if (!String.prototype.unescapeHTML) {
|
if (!String.prototype.unescapeHTML) {
|
||||||
String.prototype.unescapeHTML = function() {
|
String.prototype.unescapeHTML = function() {
|
||||||
return this.replace(/&[#\w]+;/g, function (s) {
|
return this.replace(/&[#\w]+;/g, function (s) {
|
||||||
@@ -289,31 +319,33 @@ if (!String.prototype.unescapeHTML) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: getTimestamp
|
/**
|
||||||
// PARAMS: none
|
* returns current timestamp (unix timestamp)
|
||||||
// RETURN: timestamp (in milliseconds)
|
* @return {Number} timestamp (in milliseconds)
|
||||||
// DESC : returns current timestamp (unix timestamp)
|
*/
|
||||||
function getTimestamp()
|
function getTimestamp()
|
||||||
{
|
{
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
return date.getTime();
|
return date.getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: dec2hex
|
/**
|
||||||
// PARAMS: decimal string
|
* dec2hex :: Integer -> String
|
||||||
// RETURN: string
|
* i.e. 0-255 -> '00'-'ff'
|
||||||
// DESC : dec2hex :: Integer -> String
|
* @param {Number} dec decimal string
|
||||||
// i.e. 0-255 -> '00'-'ff'
|
* @return {String} hex encdoded number
|
||||||
|
*/
|
||||||
function dec2hex(dec)
|
function dec2hex(dec)
|
||||||
{
|
{
|
||||||
return ('0' + dec.toString(16)).substr(-2);
|
return ('0' + dec.toString(16)).substr(-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: generateId
|
/**
|
||||||
// PARAMS: lenght in int
|
* generateId :: Integer -> String
|
||||||
// RETURN: random string
|
* only works on mondern browsers
|
||||||
// DESC : generateId :: Integer -> String
|
* @param {Number} len length of unique id string
|
||||||
// only works on mondern browsers
|
* @return {String} random string in length of len
|
||||||
|
*/
|
||||||
function generateId(len)
|
function generateId(len)
|
||||||
{
|
{
|
||||||
var arr = new Uint8Array((len || 40) / 2);
|
var arr = new Uint8Array((len || 40) / 2);
|
||||||
@@ -321,20 +353,22 @@ function generateId(len)
|
|||||||
return Array.from(arr, dec2hex).join('');
|
return Array.from(arr, dec2hex).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: randomIdF()
|
/**
|
||||||
// PARAMS: none
|
* creates a pseudo random string of 10 characters
|
||||||
// RETURN: not true random string
|
* works on all browsers
|
||||||
// DESC : creates a pseudo random string of 10 characters
|
* after many runs it will create duplicates
|
||||||
// after many runs it will create duplicates
|
* @return {String} not true random string
|
||||||
|
*/
|
||||||
function randomIdF()
|
function randomIdF()
|
||||||
{
|
{
|
||||||
return Math.random().toString(36).substring(2);
|
return Math.random().toString(36).substring(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: isObject
|
/**
|
||||||
// PARAMS: possible object
|
* checks if a variable is an object
|
||||||
// RETURN: true/false if it is an object or not
|
* @param {Mixed} val possible object
|
||||||
// DESC : checks if a variable is an object
|
* @return {Boolean} true/false if it is an object or not
|
||||||
|
*/
|
||||||
function isObject(val) {
|
function isObject(val) {
|
||||||
if (val === null) {
|
if (val === null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -342,47 +376,55 @@ function isObject(val) {
|
|||||||
return ((typeof val === 'function') || (typeof val === 'object'));
|
return ((typeof val === 'function') || (typeof val === 'object'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: keyInObject
|
/**
|
||||||
// PARAMS: key name, object
|
* checks if a key exists in a given object
|
||||||
// RETURN: true/false if key exists in object
|
* @param {String} key key name
|
||||||
// DESC : checks if a key exists in a given object
|
* @param {Object} object object to search key in
|
||||||
|
* @return {Boolean} true/false if key exists in object
|
||||||
|
*/
|
||||||
const keyInObject = (key, object) => (key in object) ? true : false;
|
const keyInObject = (key, object) => (key in object) ? true : false;
|
||||||
/*function keyInObject(key, object)
|
/*function keyInObject(key, object)
|
||||||
{
|
{
|
||||||
return (key in object) ? true : false;
|
return (key in object) ? true : false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: getKeyByValue
|
/**
|
||||||
// PARAMS: object, value
|
* returns matching key of value
|
||||||
// RETURN: key found
|
* @param {Object} obj object to search value in
|
||||||
// DESC : returns matching key of value
|
* @param {Mixed} value any value (String, Number, etc)
|
||||||
|
* @return {String} the key found for the first matching value
|
||||||
|
*/
|
||||||
const getKeyByValue = (obj, value) => Object.keys(obj).find(key => obj[key] === value);
|
const getKeyByValue = (obj, value) => Object.keys(obj).find(key => obj[key] === value);
|
||||||
// function getKeyByValue(object, value)
|
// function getKeyByValue(object, value)
|
||||||
// {
|
// {
|
||||||
// return Object.keys(object).find(key => object[key] === value);
|
// return Object.keys(object).find(key => object[key] === value);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// METHOD: valueInObject
|
/**
|
||||||
// PARAMS: obj, value
|
* returns true if value is found in object with a key
|
||||||
// RETURN: true/false
|
* @param {Object} obj object to search value in
|
||||||
// DESC : returns true if value is found in object with a key
|
* @param {Mixed} value any value (String, Number, etc)
|
||||||
|
* @return {Boolean} true on value found, false on not found
|
||||||
|
*/
|
||||||
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
||||||
|
|
||||||
// METHOD: exists
|
/**
|
||||||
// PARAMS: uid
|
* checks if a DOM element actually exists
|
||||||
// RETURN: true/false
|
* @param {String} id Element id to check for
|
||||||
// DESC : checks if a DOM element actually exists
|
* @return {Boolean} true if element exists, false on failure
|
||||||
const exists = (id) => $('#' + id).length > 0 ? true : false;
|
*/
|
||||||
|
const exists = (id) => $(id).length > 0 ? true : false;
|
||||||
/*function exists(id)
|
/*function exists(id)
|
||||||
{
|
{
|
||||||
return $('#' + id).length > 0 ? true : false;
|
return $(id).length > 0 ? true : false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// METHOD: formatBytes
|
/**
|
||||||
// PARAMS: bytes in int
|
* converts a int number into bytes with prefix in two decimals precision
|
||||||
// RETURN: string in GB/MB/KB
|
* currently precision is fixed, if dynamic needs check for max/min precision
|
||||||
// DESC : converts a int number into bytes with prefix in two decimals precision
|
* @param {Number} bytes bytes in int
|
||||||
// currently precision is fixed, if dynamic needs check for max/min precision
|
* @return {String} string in GB/MB/KB
|
||||||
|
*/
|
||||||
function formatBytes(bytes)
|
function formatBytes(bytes)
|
||||||
{
|
{
|
||||||
var i = -1;
|
var i = -1;
|
||||||
@@ -394,10 +436,10 @@ function formatBytes(bytes)
|
|||||||
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: errorCatch
|
/**
|
||||||
// PARAMS: err (error from try/catch
|
* prints out error messages based on data available from the browser
|
||||||
// RETURN: none
|
* @param {Object} err error from try/catch block
|
||||||
// DESC : prints out error messages based on data available from the browser
|
*/
|
||||||
function errorCatch(err)
|
function errorCatch(err)
|
||||||
{
|
{
|
||||||
// for FF & Chrome
|
// for FF & Chrome
|
||||||
@@ -423,10 +465,10 @@ function errorCatch(err)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: actionIndicator
|
/**
|
||||||
// PARAMS: none
|
* show or hide the "do" overlay
|
||||||
// RETURN: none
|
* @param {String} [loc=''] location name for action indicator, default empty. for console.log
|
||||||
// DESC : show or hide the "do" overlay
|
*/
|
||||||
function actionIndicator(loc = '')
|
function actionIndicator(loc = '')
|
||||||
{
|
{
|
||||||
if ($('overlayBox').visible()) {
|
if ($('overlayBox').visible()) {
|
||||||
@@ -436,12 +478,11 @@ function actionIndicator(loc = '')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: actionIndicatorShow/actionIndicatorHide
|
/**
|
||||||
// PARAMS: loc for console log info
|
* explicit show for action Indicator
|
||||||
// RETURN: none
|
* instead of automatically show or hide, do on command show
|
||||||
// DESC : explicit show/hide for action Indicator
|
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||||
// instead of automatically show or hide, do
|
*/
|
||||||
// on command
|
|
||||||
function actionIndicatorShow(loc = '')
|
function actionIndicatorShow(loc = '')
|
||||||
{
|
{
|
||||||
console.log('Indicator: SHOW [%s]', loc);
|
console.log('Indicator: SHOW [%s]', loc);
|
||||||
@@ -450,6 +491,12 @@ function actionIndicatorShow(loc = '')
|
|||||||
$('indicator').show();
|
$('indicator').show();
|
||||||
overlayBoxShow();
|
overlayBoxShow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* explicit hide for action Indicator
|
||||||
|
* instead of automatically show or hide, do on command hide
|
||||||
|
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||||
|
*/
|
||||||
function actionIndicatorHide(loc = '')
|
function actionIndicatorHide(loc = '')
|
||||||
{
|
{
|
||||||
console.log('Indicator: HIDE [%s]', loc);
|
console.log('Indicator: HIDE [%s]', loc);
|
||||||
@@ -458,10 +505,9 @@ function actionIndicatorHide(loc = '')
|
|||||||
overlayBoxHide();
|
overlayBoxHide();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: overlayBoxView
|
/**
|
||||||
// PARAMS: none
|
* shows the overlay box
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : shows or hides the overlay box
|
|
||||||
function overlayBoxShow()
|
function overlayBoxShow()
|
||||||
{
|
{
|
||||||
// check if overlay box exists and if yes set the z-index to 100
|
// check if overlay box exists and if yes set the z-index to 100
|
||||||
@@ -471,6 +517,10 @@ function overlayBoxShow()
|
|||||||
$('overlayBox').show();
|
$('overlayBox').show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hides the overlay box
|
||||||
|
*/
|
||||||
function overlayBoxHide()
|
function overlayBoxHide()
|
||||||
{
|
{
|
||||||
// if the overlay box z-index is 100, do no hide, but set to 98
|
// if the overlay box z-index is 100, do no hide, but set to 98
|
||||||
@@ -481,10 +531,9 @@ function overlayBoxHide()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: setOverlayBox
|
/**
|
||||||
// PARAMS: none
|
* position the overlay block box and shows it
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : position the overlay block box and shows it
|
|
||||||
function setOverlayBox()
|
function setOverlayBox()
|
||||||
{
|
{
|
||||||
var viewport = document.viewport.getDimensions();
|
var viewport = document.viewport.getDimensions();
|
||||||
@@ -495,10 +544,9 @@ function setOverlayBox()
|
|||||||
$('overlayBox').show();
|
$('overlayBox').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: ClearCall
|
/**
|
||||||
// PARAMS: none
|
* the abort call, clears the action box and hides it and the overlay box
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : the abort call, clears the action box and hides it and the overlay box
|
|
||||||
function ClearCall()
|
function ClearCall()
|
||||||
{
|
{
|
||||||
$('actionBox').innerHTML = '';
|
$('actionBox').innerHTML = '';
|
||||||
@@ -507,14 +555,15 @@ function ClearCall()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// *** DOM MANAGEMENT FUNCTIONS
|
// *** DOM MANAGEMENT FUNCTIONS
|
||||||
// METHOD: cel [create element]
|
/**
|
||||||
// PARAMS: tag: must set tag (div, span, etc)
|
* reates object for DOM element creation flow
|
||||||
// id: optional set for id, if input, select will be used for name
|
* @param {String} tag must set tag (div, span, etc)
|
||||||
// content: text content inside, is skipped if sub elements exist
|
* @param {String} [id=''] optional set for id, if input, select will be used for name
|
||||||
// css: array for css tags
|
* @param {String} [content=''] text content inside, is skipped if sub elements exist
|
||||||
// options: anything else (value, placeholder, OnClick, style)
|
* @param {Array} [css=[]] array for css tags
|
||||||
// RETURN: object
|
* @param {Object} [options={}] anything else (value, placeholder, OnClick, style)
|
||||||
// DESC : creates object for DOM element creation flow
|
* @return {Object} created element as an object
|
||||||
|
*/
|
||||||
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||||
_element = {
|
_element = {
|
||||||
tag: tag,
|
tag: tag,
|
||||||
@@ -526,12 +575,13 @@ const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
|||||||
sub: []
|
sub: []
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD: ael [attach element]
|
/**
|
||||||
// PARAMS: base: object where to attach/search
|
* attach a cel created object to another to create a basic DOM tree
|
||||||
// attach: the object to be attached
|
* @param {Object} base object where to attach/search
|
||||||
// id: optional id, if given search in base for this id and attach there
|
* @param {Object} attach the object to be attached
|
||||||
// RETURN: "none", technically there is no return needed
|
* @param {String} [id=''] optional id, if given search in base for this id and attach there
|
||||||
// DESC : attach a cel created object to another to create a basic DOM tree
|
* @return {Object} "none", technically there is no return needed as it is global attach
|
||||||
|
*/
|
||||||
function ael(base, attach, id = '')
|
function ael(base, attach, id = '')
|
||||||
{
|
{
|
||||||
if (id) {
|
if (id) {
|
||||||
@@ -553,12 +603,13 @@ function ael(base, attach, id = '')
|
|||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: aelx [attach n elements]
|
/**
|
||||||
// PARAMS: base: object to where we attach the elements
|
* directly attach n elements to one master base element
|
||||||
// attach 1..n: attach directly to the base element those attachments
|
* this type does not support attach with optional id
|
||||||
// RETURN: "none", technically there is no return needed
|
* @param {Object} base object to where we attach the elements
|
||||||
// DESC : directly attach n elements to one master base element
|
* @param {...Object} attach attach 1..n: attach directly to the base element those attachments
|
||||||
// this type does not support attach with optional id
|
* @return {Object} "none", technically there is no return needed, global attach
|
||||||
|
*/
|
||||||
function aelx(base, ...attach)
|
function aelx(base, ...attach)
|
||||||
{
|
{
|
||||||
attach.each(function(t) {
|
attach.each(function(t) {
|
||||||
@@ -567,19 +618,22 @@ function aelx(base, ...attach)
|
|||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: rel [reset element]
|
/**
|
||||||
// PARAMS: cel created element
|
* resets the sub elements of the base element given
|
||||||
// RETURN: returns reset base element
|
* @param {Object} base cel created element
|
||||||
// DESC : resets the sub elements of the base element given
|
* @return {Object} returns reset base element
|
||||||
|
*/
|
||||||
const rel = (base) => {
|
const rel = (base) => {
|
||||||
base.sub = [];
|
base.sub = [];
|
||||||
return base;
|
return base;
|
||||||
};
|
};
|
||||||
|
|
||||||
// METHOD: rcssel [remove a css from the element]
|
/**
|
||||||
// PARAMS: element, style sheet to remove
|
* searches and removes style from css array
|
||||||
// RETURN: returns full element
|
* @param {Object} _element element to work one
|
||||||
// DESC : searches and removes style from css array
|
* @param {String css style sheet to remove (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function rcssel(_element, css)
|
function rcssel(_element, css)
|
||||||
{
|
{
|
||||||
var css_index = _element.css.indexOf(css);
|
var css_index = _element.css.indexOf(css);
|
||||||
@@ -589,10 +643,12 @@ function rcssel(_element, css)
|
|||||||
return _element;
|
return _element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: acssel [add css element]
|
/**
|
||||||
// PARAMS: element, style sheet to add
|
* adds a new style sheet to the element given
|
||||||
// RETURN: returns full element
|
* @param {Object} _element element to work on
|
||||||
// DESC : adds a new style sheet to the element given
|
* @param {String} css style sheet to add (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function acssel(_element, css)
|
function acssel(_element, css)
|
||||||
{
|
{
|
||||||
var css_index = _element.css.indexOf(css);
|
var css_index = _element.css.indexOf(css);
|
||||||
@@ -602,11 +658,14 @@ function acssel(_element, css)
|
|||||||
return _element;
|
return _element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: scssel
|
/**
|
||||||
// PARAMS: element, style to remove, style to add
|
* removes one css and adds another
|
||||||
// RETURN: returns full element
|
* is a wrapper around rcssel/acssel
|
||||||
// DESC : removes one css and adds another
|
* @param {Object} _element element to work on
|
||||||
// is a wrapper around rcssel/acssel
|
* @param {String} rcss style to remove (name)
|
||||||
|
* @param {String} acss style to add (name)
|
||||||
|
* @return {Object} returns full element
|
||||||
|
*/
|
||||||
function scssel(_element, rcss, acss)
|
function scssel(_element, rcss, acss)
|
||||||
{
|
{
|
||||||
rcssel(_element, rcss);
|
rcssel(_element, rcss);
|
||||||
@@ -614,12 +673,12 @@ function scssel(_element, rcss, acss)
|
|||||||
return _element;
|
return _element;
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: phfo [produce html from object]
|
/**
|
||||||
// PARAMS: object tree with dom element declarations
|
* parses the object tree created with cel/ael and converts it into an HTML string
|
||||||
// RETURN: HTML string that can be used as innerHTML
|
* that can be inserted into the page
|
||||||
// DESC : parses the object tree created with cel/ael
|
* @param {Object} tree object tree with dom element declarations
|
||||||
// and converts it into an HTML string that can
|
* @return {String} HTML string that can be used as innerHTML
|
||||||
// be inserted into the page
|
*/
|
||||||
function phfo(tree)
|
function phfo(tree)
|
||||||
{
|
{
|
||||||
// holds the elements
|
// holds the elements
|
||||||
@@ -681,33 +740,44 @@ function phfo(tree)
|
|||||||
|
|
||||||
// BLOCK: html wrappers for quickly creating html data blocks
|
// BLOCK: html wrappers for quickly creating html data blocks
|
||||||
|
|
||||||
// NOTE : OLD FORMAT which misses multiple block set
|
/**
|
||||||
// METHOD: html_options
|
* NOTE: OLD FORMAT which misses multiple block set
|
||||||
// PARAMS: name/id, array for the options, selected item uid
|
* creates an select/options drop down block.
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
* the array needs to be key -> value format.
|
||||||
// return_string [def false]: return as string and not as element
|
* key is for the option id and value is for the data output
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {String} name name/id
|
||||||
// RETURN: html with build options block
|
* @param {Object} data array for the options
|
||||||
// DESC : creates an select/options drop down block.
|
* @param {String} [selected=''] selected item uid
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||||
|
* @param {Boolean} [return_string=false] return as string and not as element
|
||||||
|
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||||
|
* 'values' all others are ignored
|
||||||
|
* @return {String} html with build options block
|
||||||
|
*/
|
||||||
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
// wrapper to new call
|
// wrapper to new call
|
||||||
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : USE THIS CALL, the above one is deprecated
|
/**
|
||||||
// METHOD: html_options
|
* NOTE: USE THIS CALL, the above one is deprecated
|
||||||
// PARAMS: name/id, array for the options,
|
* creates an select/options drop down block.
|
||||||
// selected item uid [drop down string, multi select array]
|
* the array needs to be key -> value format.
|
||||||
// multiple [def 0] if this is 1 or larger, the drop down will be turned into multiple select
|
* key is for the option id and value is for the data output
|
||||||
// the number sets the size value unless it is 1, then it is default
|
* @param {String} name name/id
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
* @param {Object} data array for the options
|
||||||
// return_string [def false]: return as string and not as element
|
* @param {String} [selected=''] selected item uid
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {Number} [multiple=0] if this is 1 or larger, the drop down
|
||||||
// RETURN: html with build options block
|
* will be turned into multiple select
|
||||||
// DESC : creates an select/options drop down block.
|
* the number sets the size value unless it is 1,
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
* then it is default
|
||||||
|
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||||
|
* @param {Boolean} [return_string=false] return as string and not as element
|
||||||
|
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||||
|
* 'values' all others are ignored
|
||||||
|
* @return {String} html with build options block
|
||||||
|
*/
|
||||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
var content = [];
|
var content = [];
|
||||||
@@ -778,11 +848,13 @@ function html_options_block(name, data, selected = '', multiple = 0, options_onl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// METHOD: html_options_refill
|
/**
|
||||||
// PARAMS: name/id, array of options, sort = ''
|
* refills a select box with options and keeps the selected
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
* @param {String} name name/id
|
||||||
// RETURN: none
|
* @param {Object} data array of options
|
||||||
// DESC : refills a select box with options and keeps the selected
|
* @param {String} [sort=''] if empty as is, else allowed 'keys', 'values'
|
||||||
|
* all others are ignored
|
||||||
|
*/
|
||||||
function html_options_refill(name, data, sort = '')
|
function html_options_refill(name, data, sort = '')
|
||||||
{
|
{
|
||||||
var element_option;
|
var element_option;
|
||||||
@@ -817,10 +889,9 @@ function html_options_refill(name, data, sort = '')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// *** MASTER logout call
|
// *** MASTER logout call
|
||||||
// METHOD: loginLogout
|
/**
|
||||||
// PARAMS: none
|
* submits basic data for form logout
|
||||||
// RETURN: none
|
*/
|
||||||
// DESC : submits basic data for form logout
|
|
||||||
function loginLogout()
|
function loginLogout()
|
||||||
{
|
{
|
||||||
const form = document.createElement('form');
|
const form = document.createElement('form');
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ class Login extends \CoreLibs\DB\IO
|
|||||||
|
|
||||||
// set global is ajax page for if we show the data directly, or need to pass it back
|
// set global is ajax page for if we show the data directly, or need to pass it back
|
||||||
// to the continue AJAX class for output back to the user
|
// to the continue AJAX class for output back to the user
|
||||||
$this->login_is_ajax_page = isset($GLOBALS['AJAX_PAGE']) && $GLOBALS['AJAX_PAGE'] ? true : false;
|
$this->login_is_ajax_page = $this->ajax_page_flag;
|
||||||
|
|
||||||
$this->l = new \CoreLibs\Language\L10n($lang);
|
$this->l = new \CoreLibs\Language\L10n($lang);
|
||||||
|
|
||||||
|
|||||||
@@ -181,6 +181,8 @@ class Basic
|
|||||||
|
|
||||||
// form token (used for form validation)
|
// form token (used for form validation)
|
||||||
private $form_token = '';
|
private $form_token = '';
|
||||||
|
// ajax flag
|
||||||
|
protected $ajax_page_flag = false;
|
||||||
|
|
||||||
// METHOD: __construct
|
// METHOD: __construct
|
||||||
// PARAMS: set_control_flag [current sets set/get var errors]
|
// PARAMS: set_control_flag [current sets set/get var errors]
|
||||||
@@ -218,6 +220,11 @@ class Basic
|
|||||||
die('Core Constant missing. Check config file.');
|
die('Core Constant missing. Check config file.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set ajax page flag based on the AJAX_PAGE varaibles
|
||||||
|
// convert to true/false so if AJAX_PAGE is 0 or false it is
|
||||||
|
// always boolean false
|
||||||
|
$this->ajax_page_flag = isset($GLOBALS['AJAX_PAGE']) && $GLOBALS['AJAX_PAGE'] ? true : false;
|
||||||
|
|
||||||
// set the page name
|
// set the page name
|
||||||
$this->page_name = $this->getPageName();
|
$this->page_name = $this->getPageName();
|
||||||
$this->host_name = $this->getHostName();
|
$this->host_name = $this->getHostName();
|
||||||
|
|||||||
@@ -727,7 +727,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
$EDIT_FGCOLOR_T = 'edit_fgcolor';
|
$EDIT_FGCOLOR_T = 'edit_fgcolor';
|
||||||
}
|
}
|
||||||
$output_name = $this->table_array[$element_name]['output_name'];
|
$output_name = $this->table_array[$element_name]['output_name'];
|
||||||
if (isset($this->table_array[$element_name]['mandatory'])) {
|
if (isset($this->table_array[$element_name]['mandatory']) &&
|
||||||
|
$this->table_array[$element_name]['mandatory']
|
||||||
|
) {
|
||||||
$output_name .= ' *';
|
$output_name .= ' *';
|
||||||
}
|
}
|
||||||
// create right side depending on 'definiton' in table_array
|
// create right side depending on 'definiton' in table_array
|
||||||
@@ -1022,6 +1024,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
} // switch
|
} // switch
|
||||||
} // for each error to check
|
} // for each error to check
|
||||||
} elseif (isset($value['mandatory']) &&
|
} elseif (isset($value['mandatory']) &&
|
||||||
|
$value['mandatory'] &&
|
||||||
(
|
(
|
||||||
// for all 'normal' fields
|
// for all 'normal' fields
|
||||||
($this->table_array[$key]['type'] != 'password' && $this->table_array[$key]['type'] != 'drop_down_db_input' && !$this->table_array[$key]['value']) ||
|
($this->table_array[$key]['type'] != 'password' && $this->table_array[$key]['type'] != 'drop_down_db_input' && !$this->table_array[$key]['value']) ||
|
||||||
@@ -1065,7 +1068,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
if (is_array($this->reference_array)) {
|
if (is_array($this->reference_array)) {
|
||||||
reset($this->reference_array);
|
reset($this->reference_array);
|
||||||
foreach ($this->reference_array as $key => $value) {
|
foreach ($this->reference_array as $key => $value) {
|
||||||
if ($this->reference_array[$key]['mandatory'] && !$this->reference_array[$key]['selected'][0]) {
|
if (isset($this->reference_array[$key]['mandatory']) &&
|
||||||
|
$this->reference_array[$key]['mandatory'] &&
|
||||||
|
!$this->reference_array[$key]['selected'][0]) {
|
||||||
$this->msg .= sprintf($this->l->__('Please select at least one Element from field <b>%s</b>!<br>'), $this->reference_array[$key]['output_name']);
|
$this->msg .= sprintf($this->l->__('Please select at least one Element from field <b>%s</b>!<br>'), $this->reference_array[$key]['output_name']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1119,20 +1124,25 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
for ($i = 0; $i < $max; $i ++) {
|
for ($i = 0; $i < $max; $i ++) {
|
||||||
// either one of the post pks is set, or the mandatory
|
// either one of the post pks is set, or the mandatory
|
||||||
foreach ($reference_array['elements'] as $el_name => $data_array) {
|
foreach ($reference_array['elements'] as $el_name => $data_array) {
|
||||||
if (isset($data_array['mandatory'])) {
|
if (isset($data_array['mandatory']) && $data_array['mandatory']) {
|
||||||
$mand_name = $data_array['output_name'];
|
$mand_name = $data_array['output_name'];
|
||||||
}
|
}
|
||||||
// check if there is a primary ket inside, so it is okay
|
// check if there is a primary ket inside, so it is okay
|
||||||
if (isset($data_array['pk_id']) &&
|
if (isset($data_array['pk_id']) &&
|
||||||
count($_POST[$prfx.$el_name]) &&
|
count($_POST[$prfx.$el_name]) &&
|
||||||
isset($reference_array['mandatory'])
|
isset($reference_array['mandatory']) &&
|
||||||
|
$reference_array['mandatory']
|
||||||
) {
|
) {
|
||||||
$mand_okay = 1;
|
$mand_okay = 1;
|
||||||
}
|
}
|
||||||
// we found a mandatory field. check now if one is set to satisfy the main mandatory
|
// we found a mandatory field. check now if one is set to satisfy the main mandatory
|
||||||
// also check, if this field is mandatory and its not set, but any other, throw an error
|
// also check, if this field is mandatory and its not set, but any other, throw an error
|
||||||
// $this->debug('edit_error_chk', 'RG error - Data['.$prfx.$el_name.': '.$_POST[$prfx.$el_name][$i].' | '.$_POST[$prfx.$el_name].' - '.$reference_array['enable_name'].' - '.$_POST[$reference_array['enable_name']][$_POST[$prfx.$el_name][$i]]);
|
// $this->debug('edit_error_chk', 'RG error - Data['.$prfx.$el_name.': '.$_POST[$prfx.$el_name][$i].' | '.$_POST[$prfx.$el_name].' - '.$reference_array['enable_name'].' - '.$_POST[$reference_array['enable_name']][$_POST[$prfx.$el_name][$i]]);
|
||||||
if (isset($data_array['mandatory']) && $_POST[$prfx.$el_name][$i]) {
|
if (isset($data_array['mandatory']) &&
|
||||||
|
$data_array['mandatory'] &&
|
||||||
|
isset($_POST[$prfx.$el_name][$i]) &&
|
||||||
|
$_POST[$prfx.$el_name][$i]
|
||||||
|
) {
|
||||||
$mand_okay = 1;
|
$mand_okay = 1;
|
||||||
$row_okay[$i] = 1;
|
$row_okay[$i] = 1;
|
||||||
} elseif ($data_array['type'] == 'radio_group' && !isset($_POST[$prfx.$el_name])) {
|
} elseif ($data_array['type'] == 'radio_group' && !isset($_POST[$prfx.$el_name])) {
|
||||||
@@ -1145,7 +1155,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// $this->debug('edit_error_chk', '[$i]');
|
// $this->debug('edit_error_chk', '[$i]');
|
||||||
$element_set[$i] = 1;
|
$element_set[$i] = 1;
|
||||||
$row_okay[$i] = 1;
|
$row_okay[$i] = 1;
|
||||||
} elseif (isset($data_array['mandatory']) && !$_POST[$prfx.$el_name][$i]) {
|
} elseif (isset($data_array['mandatory']) &&
|
||||||
|
$data_array['mandatory'] &&
|
||||||
|
!$_POST[$prfx.$el_name][$i]
|
||||||
|
) {
|
||||||
$row_okay[$i] = 0;
|
$row_okay[$i] = 0;
|
||||||
}
|
}
|
||||||
// do optional error checks like for normal fields
|
// do optional error checks like for normal fields
|
||||||
@@ -1153,19 +1166,20 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
if (isset($data_array['error_check'])) {
|
if (isset($data_array['error_check'])) {
|
||||||
foreach (explode('|', $data_array['error_check']) as $error_check) {
|
foreach (explode('|', $data_array['error_check']) as $error_check) {
|
||||||
switch ($error_check) {
|
switch ($error_check) {
|
||||||
// check unique, check if field in table is not yet exist
|
// check unique, check if field is filled and not same in _POST set
|
||||||
case 'unique':
|
case 'unique':
|
||||||
$q = 'SELECT '.$_pk_name.' FROM '.$table_name.' WHERE '.$el_name.' = '."'".$this->dbEscapeString($_POST[$prfx.$el_name][$i])."'";
|
// must be set for double check
|
||||||
if ($this->table_array[$this->int_pk_name]['value']) {
|
if ($_POST[$prfx.$el_name][$i] &&
|
||||||
$q .= ' AND '.$this->int_pk_name.' <> '.$this->table_array[$this->int_pk_name]['value'];
|
count(array_keys($_POST[$prfx.$el_name], $_POST[$prfx.$el_name][$i])) >= 2
|
||||||
}
|
) {
|
||||||
list($key) = $this->dbReturnRow($q);
|
|
||||||
if ($key) {
|
|
||||||
$this->msg .= sprintf($this->l->__('The field <b>%s</b> in row <b>%s</b> can be used only once!<br>'), $reference_array['output_name'], $i);
|
$this->msg .= sprintf($this->l->__('The field <b>%s</b> in row <b>%s</b> can be used only once!<br>'), $reference_array['output_name'], $i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'alphanumericspace':
|
case 'alphanumericspace':
|
||||||
if (!preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i])) {
|
// only check if set
|
||||||
|
if ($_POST[$prfx.$el_name][$i] &&
|
||||||
|
!preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i])
|
||||||
|
) {
|
||||||
$this->msg .= sprintf($this->l->__('Please enter a valid alphanumeric (Numbers and Letters, spaces allowed) value for the <b>%s</b> Field and row <b>%s</b>!<br>'), $reference_array['output_name'], $i);
|
$this->msg .= sprintf($this->l->__('Please enter a valid alphanumeric (Numbers and Letters, spaces allowed) value for the <b>%s</b> Field and row <b>%s</b>!<br>'), $reference_array['output_name'], $i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1176,7 +1190,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
}
|
}
|
||||||
|
|
||||||
// main mandatory is met -> error msg
|
// main mandatory is met -> error msg
|
||||||
if (!$mand_okay && isset($reference_array['mandatory'])) {
|
if (!$mand_okay &&
|
||||||
|
isset($reference_array['mandatory']) &&
|
||||||
|
$reference_array['mandatory']) {
|
||||||
$this->msg .= sprintf($this->l->__('You need to enter at least one data set for field <b>%s</b>!<Br>'), $reference_array['output_name']);
|
$this->msg .= sprintf($this->l->__('You need to enter at least one data set for field <b>%s</b>!<Br>'), $reference_array['output_name']);
|
||||||
}
|
}
|
||||||
for ($i = 0; $i < $max; $i ++) {
|
for ($i = 0; $i < $max; $i ++) {
|
||||||
@@ -1472,6 +1488,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// if we have enable name & delete set, then only insert/update those which are flagged as active
|
// if we have enable name & delete set, then only insert/update those which are flagged as active
|
||||||
// check if mandatory field is set, if not set 'do not write flag'
|
// check if mandatory field is set, if not set 'do not write flag'
|
||||||
if (isset($data_array['mandatory']) &&
|
if (isset($data_array['mandatory']) &&
|
||||||
|
$data_array['mandatory'] &&
|
||||||
(!isset($_POST[$prfx.$el_name][$i]) || (isset($_POST[$prfx.$el_name][$i]) && empty($_POST[$prfx.$el_name][$i])))
|
(!isset($_POST[$prfx.$el_name][$i]) || (isset($_POST[$prfx.$el_name][$i]) && empty($_POST[$prfx.$el_name][$i])))
|
||||||
) {
|
) {
|
||||||
$no_write[$i] = 1;
|
$no_write[$i] = 1;
|
||||||
@@ -1678,7 +1695,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
{
|
{
|
||||||
$data = array();
|
$data = array();
|
||||||
$output_name = $this->reference_array[$table_name]['output_name'];
|
$output_name = $this->reference_array[$table_name]['output_name'];
|
||||||
if ($this->reference_array[$table_name]['mandatory']) {
|
if (isset($this->reference_array[$table_name]['mandatory']) &&
|
||||||
|
$this->reference_array[$table_name]['mandatory']
|
||||||
|
) {
|
||||||
$output_name .= ' *';
|
$output_name .= ' *';
|
||||||
}
|
}
|
||||||
$data['name'] = $this->reference_array[$table_name]['other_table_pk'];
|
$data['name'] = $this->reference_array[$table_name]['other_table_pk'];
|
||||||
@@ -1708,7 +1727,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
$data = array();
|
$data = array();
|
||||||
// output name for the viewable left table td box, prefixed with * if mandatory
|
// output name for the viewable left table td box, prefixed with * if mandatory
|
||||||
$output_name = $this->element_list[$table_name]['output_name'];
|
$output_name = $this->element_list[$table_name]['output_name'];
|
||||||
if (isset($this->element_list[$table_name]['mandatory'])) {
|
if (isset($this->element_list[$table_name]['mandatory']) &&
|
||||||
|
$this->element_list[$table_name]['mandatory']
|
||||||
|
) {
|
||||||
$output_name .= ' *';
|
$output_name .= ' *';
|
||||||
}
|
}
|
||||||
// delete button name, if there is one set
|
// delete button name, if there is one set
|
||||||
@@ -1789,7 +1810,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
if ($this->error) {
|
if ($this->error) {
|
||||||
if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) {
|
if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) {
|
||||||
// this is for the new line
|
// this is for the new line
|
||||||
$proto[$el_name] = $_POST[$el_name][(count($_POST[$el_name]) - 1)];
|
$proto[$el_name] = isset($_POST[$el_name][(count($_POST[$el_name]) - 1)]) ? $_POST[$el_name][(count($_POST[$el_name]) - 1)] : 0;
|
||||||
} else {
|
} else {
|
||||||
$proto[$el_name] = 0;
|
$proto[$el_name] = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user