{"id":1404,"date":"2018-09-26T14:26:24","date_gmt":"2018-09-26T13:26:24","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=1404"},"modified":"2022-07-25T08:35:44","modified_gmt":"2022-07-25T07:35:44","slug":"javascript-tools-div-functions","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-tools-div-functions\/","title":{"rendered":"Javascript tools (div. functions)"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const $ = require('jquery');\n\nlet service = {};\n\nfunction getRequestRandom() {\n    return Math.floor(Math.random() * (10000000000000 + 1));\n}\n\nfunction loadScripts(uris, whenDone) {\n    let wait = [];\n    if (!uris.length)\n        whenDone &amp;&amp; whenDone();\n    else {\n        for (let i = uris.length; i--;) {\n            let tag = document.createElement('script');\n            tag.type = 'text\/javascript';\n            tag.src = uris[i];\n            if (whenDone) {\n                wait.push(tag);\n                tag.onload = maybeDone;\n                tag.onreadystatechange = maybeDone; \/\/ For IE8-\n            }\n            document.head.appendChild(tag);\n        }\n    }\n\n    function maybeDone() {\n        if (this.readyState === undefined || this.readyState === 'complete') {\n            for (let i = wait.length; i--;)\n                if (wait[i] == this)\n                    wait.splice(i, 1);\n            if (!wait.length)\n                whenDone();\n        }\n    }\n}\n\nservice.require = function(uris, whenDone) {\n    \/\/ disable cache\n    let i;\n    for (i = 0; i &lt; uris.length; i += 1) {\n        uris[i] = uris[i] + '?_=' + getRequestRandom();\n    }\n\n    loadScripts(uris, whenDone);\n};\n\nservice.getPrototypeName = function(obj) {\n    let funcNameRegex = \/function (.{1,})\\(\/;\n    let results = (funcNameRegex).exec((obj).constructor.toString());\n    return (results &amp;&amp; results.length > 1) ? results[1] : '';\n};\n\nservice.isFunction = function(functionToCheck) {\n    let getType = {};\n    return functionToCheck &amp;&amp; getType.toString.call(functionToCheck) === '[object Function]';\n};\nlet isFunction = service.isFunction;\n\nservice.getWindowFromElement = function(element) {\n    let $e = $(element);\n    let e = $e[0];\n    let doc = e.ownerDocument;\n    let win = doc.defaultView || doc.parentWindow;\n    return win;\n};\n\nservice.del = function(obj, prop) {\n    if (obj &amp;&amp; obj[prop]) {\n        if (obj[prop].unload &amp;&amp; isFunction(obj[prop].unload)) {\n            obj[prop].unload();\n        }\n        delete obj[prop];\n    }\n};\n\nservice.deleteObject = function(obj) {\n    for (let member in obj)\n        delete obj[member];\n};\n\nservice.waitFor = function(condition, callback, interval) {\n    interval = interval || 100;\n    let isLoaded = condition();\n    if (isLoaded) {\n        callback();\n    } else {\n        setTimeout(function() {\n            service.waitFor(condition, callback, interval);\n        }, interval);\n    }\n};\n\nservice.supportsStorage = function() {\n    try {\n        return 'localStorage' in window &amp;&amp; window['localStorage'] !== null;\n    } catch (e) {\n        return false;\n    }\n};\n\nservice.setLocal = function(key, obj) {\n    if (service.supportsStorage()) {\n        let item = obj;\n        if (obj != null) {\n            item = JSON.stringify(obj);\n        }\n        window.localStorage.setItem(key, item);\n    }\n};\n\nservice.getLocal = function(key) {\n    if (service.supportsStorage()) {\n        let item = window.localStorage.getItem(key);\n        if (item) {\n            return JSON.parse(item);\n        }\n    }\n    return null;\n};\n\nservice.limitOpacity = function(opacity) {\n    if (opacity &lt; 0.001)\n        return 0.001;\n    if (opacity > 0.999)\n        return 1;\n    return opacity;\n};\n\nservice.isInternetExplorer = function() {\n    return window.navigator.appVersion.indexOf('MSIE') != -1;\n};\n\nservice.preventEvent = function(e) {\n    e.preventDefault();\n    return false;\n};\n\nservice.format = function(str) {\n    let i;\n    for (i = 1; i &lt; arguments.length; i++) {\n        str = str.replace('{' + (i - 1) + '}', arguments[i]);\n    }\n    return str;\n};\n\nservice.pad = function(number, length) {\n    let str = '' + number;\n    while (str.length &lt; length) {\n        str = '0' + str;\n    }\n    return str;\n};\n\nlet pad = service.pad;\n\nservice.getTimeStr = function() {\n    let time = new Date();\n    return service.format('{0}:{1}:{2}.{3}', pad(time.getHours(), 2), pad(time.getMinutes(), 2), pad(time.getSeconds(), 2), pad(time.getMilliseconds(), 3));\n};\n\nlet seen = [];\nlet jsonReplacer = function(key, val) {\n    if (val != null &amp;&amp; typeof val == 'object') {\n        if (seen.indexOf(val) >= 0) {\n            return;\n        }\n        seen.push(val);\n    }\n    return val;\n};\n\nservice.toJson = function(obj) {\n    try {\n        return JSON.stringify(obj, jsonReplacer);\n    } catch (e) {\n        service.log(obj);\n        service.log(e);\n    }\n};\n\nlet debug = false;\nif (window &amp;&amp; window.location &amp;&amp; window.location.href &amp;&amp; window.location.href.indexOf('debug=1') >= 0) {\n    debug = true;\n}\nservice.log = function() {\n    if (!debug) return;\n    let args = [].slice.call(arguments);\n    let error = null;\n    let i;\n    for (i = 0; i &lt; args.length; i += 1) {\n        if (typeof args[i] === 'object') {\n            try {\n                if (args[i] instanceof Error) {\n                    error = args[i];\n                    console.warn(error.stack);\n                } else {\n                    args[i] = JSON.stringify(args[i]);\n                }\n            } catch (e) {\n                \/\/ Could not convert to JSON\n                args[i] = args[i].toString();\n            }\n        }\n    }\n    args.unshift(service.getTimeStr());\n    console.info(args);\n};\n\n\/**\n * Overwrites obj1's values with obj2's and adds obj2's if non existent in\n * obj1\n *\n * @param obj1\n * @param obj2\n * @returns obj3 a new object based on obj1 and obj2\n *\/\nservice.mergeOptions = function(a, b) {\n    let c = {},\n        at;\n    for (at in a) {\n        c[at] = a[at];\n    }\n    for (at in b) {\n        c[at] = b[at];\n    }\n    return c;\n};\n\n\/*\n * function globalErrorHandler(message, url, lineNumber) { \/\/ save error and\n * send to server for example.\n *\n * if (!scriptDbg) { console.info('deactivate the global error handler to\n * see errors'); return true; }\n *\n * return false; }; window.addEventListener('error' \/\/window.onerror =\n * globalErrorHandler;\n *\/\n\nservice.trimr = function(str, ch) {\n    for (let i = str.length - 1; i >= 0; i--) {\n        if (ch != str.charAt(i)) {\n            str = str.substring(0, i + 1);\n            break;\n        }\n    }\n    return str;\n};\n\nservice.guid = function() {\n    let d = new Date().getTime();\n    let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\/[xy]\/g, function(c) {\n        let r = (d + Math.random() * 16) % 16 | 0;\n        d = Math.floor(d \/ 16);\n        return (c == 'x' ? r : (r &amp; 0x3 | 0x8)).toString(16);\n    });\n    return uuid;\n};\n\nmodule.exports = service;\n\nlet service = {};\nlet tools = require('.\/tools');\n\nservice.sendTo = function(contentWindow, data) {\n    setTimeout(() => {\n        contentWindow.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.sendToFrame = function(frame, data) {\n    setTimeout(() => {\n        frame.contentWindow.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.sendToParent = function(data) {\n    setTimeout(() => {\n        window.parent.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.receiveMessage = function(event, handler) {\n    \/\/ event.origin, event.data, event.source\n    let data = JSON.parse(event.data);\n    handler(data, event, handler);\n};\n\nservice.registerHandler = function(handler) {\n    window.addEventListener('message', function(event) {\n        service.receiveMessage(event, handler);\n    }, false);\n};\n\nmodule.exports = service;\n\nconst $ = require('jquery');\n\nlet service = {};\n\n\/\/ Helper functie die een nieuw html element aanmaakt en deze als jQuery\n\/\/ object terug geeft\nservice.$new = function(type, parent, attributes, classNames) {\n    let k, i;\n    let el = document.createElement(type);\n    if (attributes &amp;&amp; attributes['type']) {\n        el.type = attributes['type'];\n    }\n\n    $(parent).append(el);\n    let jqEl = $(el);\n\n    if (attributes) {\n        for (k in attributes) {\n            if (k !== 'type') {\n                jqEl.attr(k, attributes[k]);\n            }\n        }\n    }\n\n    if (classNames &amp;&amp; classNames instanceof Array) {\n        for (i = 0; i &lt; classNames.length; i += 1) {\n            jqEl.addClass(classNames[i]);\n        }\n    }\n\n    return jqEl;\n};\n\nservice.$newCss = function(file, $head) {\n    let $h = $('head');\n\n    if ($head) {\n        $h = $head;\n    }\n\n    let $e = service.$new('link', $h, {\n        'rel': 'stylesheet',\n        'type': 'text\/css',\n        'href': file\n    });\n    return $e;\n};\n\nservice.$newJs = function(file, $head) {\n    let $h = $('head');\n\n    if ($head) {\n        $h = $head;\n    }\n\n    let $e = service.$new('script', $h, {\n        'type': 'text\/javascript',\n        'src': file\n    });\n    return $e;\n};\n\nservice.$redraw = function($e) {\n    return $e.hide(0, function() {\n        $e.show(0);\n    });\n};\n\nmodule.exports = service;\n\nconst tools = require('.\/tools');\n\nlet service = {};\nlet format = tools.format;\nlet pad = tools.pad;\n\nservice.parseDate = function(dateStr) {\n\tlet dateRegex = \/([0-9]*)-([0-9]*)-([0-9]*)T(.*)\/gi;\n\tlet match = dateRegex.exec(dateStr);\n\tif (match) {\n\t\treturn new Date(parseInt(match[1]), parseInt(match[2]) -1, parseInt(match[3]));\n\t}\n\treturn null;\n};\n\nservice.getBirthdays = function(dateArr, dateProp) {\n\tlet now = new Date();\n\tlet nowYear = now.getFullYear();\n\tlet nowDate = now.getDate();\n\tlet nowMonth = now.getMonth();\n\n\tlet result = [];\n\n\tdateArr.forEach(function(item) {\n\t\tlet itemDate = item[dateProp];\n\t\tlet date = itemDate.getDate();\n\t\tlet month = itemDate.getMonth();\n\t\tlet year = itemDate.getFullYear();\n\n\t\tlet birthDay = null;\n\t\tlet birthDayYear = null;\n\n\t\tif (month &lt; nowMonth || (month == nowMonth &amp;&amp; date &lt; nowDate)) {\n\t\t\tbirthDayYear = nowYear+1;\n\t\t} else {\n\t\t\tbirthDayYear = nowYear;\n\t\t}\n\t\tbirthDay = new Date(birthDayYear, month, date);\n\n\t\tlet row = {};\n\t\trow.birthDay = birthDay;\n\t\trow.birthDayAge = birthDayYear - year;\n\t\trow.timeToBirthDay = birthDay.valueOf() - now.valueOf();\n\t\trow.data = item;\n\t\tresult.push(row);\n\t});\n\n\tresult.sort(function(a, b) {\n\t\treturn a.timeToBirthDay - b.timeToBirthDay;\n\t});\n\n\treturn result;\n};\n\nservice.formatDate = function(date, format) {\n\tlet dstr = format;\n\tdstr = dstr.replace('yyyy', date.getFullYear());\n\tdstr = dstr.replace('yy', pad(date.getYear(), 2));\n\tdstr = dstr.replace('y', date.getYear());\n\n\tdstr = dstr.replace('MM', pad(date.getMonth(), 2));\n\tdstr = dstr.replace('M', date.getMonth());\n\n\tdstr = dstr.replace('dd', pad(date.getDate(), 2));\n\tdstr.replace('d', date.getDate());\n\n\tdstr = dstr.replace('HH', pad(date.getHours(), 2));\n\tdstr = dstr.replace('H', date.getHours());\n\n\tdstr = dstr.replace('hh', pad(date.getHours() % 12, 2));\n\tdstr = dstr.replace('h', date.getHours() % 12);\n\n\tdstr = dstr.replace('mm', pad(date.getMinutes(), 2));\n\tdstr = dstr.replace('m', date.getMinutes());\n\n\tdstr = dstr.replace('ss', pad(date.getSeconds(), 2));\n\tdstr = dstr.replace('s', date.getSeconds());\n\n\tdstr = dstr.replace('fff', pad(date.getMilliseconds(), 3));\n\treturn dstr;\n};\n\nservice.datesEqual = function(a, b) {\n\treturn a.getDate() === b.getDate() &amp;&amp; a.getMonth() === b.getMonth() &amp;&amp; a.getFullYear() === b.getFullYear();\n};\n\nservice.isToday = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn service.datesEqual(new Date(), date);\n\t}\n\treturn false;\n};\n\nservice.minToHour = function(min) {\n\treturn min * (100 \/ 60) \/ 100;\n};\n\nservice.hourToMin = function(hour) {\n\treturn (hour \/ (100 \/ 60)) * 100;\n};\n\nlet to_min = (100 \/ 60) \/ 100;\nlet to_sec = (100 \/ 60) \/ 10000;\nservice.getTimeNumber = function(date) {\n\tif (date &amp;&amp; date.getHours) {\n\t\treturn date.getHours() + (date.getMinutes() * to_min) + (date.getSeconds() * to_sec);\n\t}\n\treturn 0;\n};\n\nservice.dateToStr = function(time) {\n\treturn format('{0}-{1}-{2} {3}:{4}', pad(time.getFullYear(), 4), pad(time.getMonth(), 2), pad(time.getDate(), 2), time.getHours(), pad(time\n\t\t\t.getMinutes(), 2));\n};\n\nservice.getWeek = function(date) {\n\tlet onejan = new Date(date.getFullYear(), 0, 1);\n\treturn Math.ceil((((date - onejan) \/ 86400000) + onejan.getDay() + 1) \/ 7);\n};\n\nservice.dayNames = [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ];\nservice.monthNamesFull = [ 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december' ];\nservice.monthNames = [ 'jan', 'feb', 'mrt', 'april', 'mei', 'juni', 'juli', 'aug', 'sept', 'okt', 'nov', 'dec' ];\nlet monthNames = service.monthNames;\n\nservice.shortDateStr = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn format('{1}  {0}', monthNames[date.getMonth()], pad(date.getDate(), 2));\n\t}\n};\n\nservice.dateToString = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn format('{0}-{1}-{2}  {3}:{4}:{5}', pad(date.getFullYear(), 4), pad(date.getMonth() + 1, 2), pad(date.getDate(), 2), pad(date.getHours(), 2),\n\t\t\t\tpad(date.getMinutes(), 2), pad(date.getSeconds(), 2));\n\t}\n\treturn '';\n};\n\nservice.addDays = function(date, days) {\n\tlet result = new Date(date);\n\tresult.setDate(date.getDate() + days);\n\treturn result;\n};\nlet addDays = service.addDays;\n\nservice.isWorkingDay = function(date) {\n\tlet weekDay = date.getDay();\n\treturn !(weekDay == 0 || weekDay == 6);\n};\nlet isWorkingDay = service.isWorkingDay;\n\nservice.addWorkingDays = function(date, days) {\n\tlet result = new Date(date);\n\tlet step = 1;\n\tif (days &lt; 0)\n\t\tstep = -1;\n\n\tlet cnt = Math.abs(days);\n\twhile (cnt > 0) {\n\t\tresult = addDays(result, step);\n\t\tif (isWorkingDay(result)) {\n\t\t\tcnt--;\n\t\t}\n\t}\n\treturn result;\n};\n\nservice.getTimeAsSeconds = function getTimeAsSeconds(date) {\n\tif (date &amp;&amp; date.getHours) {\n\t\treturn (date.getHours() * 3600) + (date.getMinutes() * 60) + date.getSeconds();\n\t}\n\treturn null;\n};\n\nmodule.exports = service;\n\n\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted lang:js decode:true\">let service = {};\nlet tools = require('.\/tools');\n\nservice.sendTo = function(contentWindow, data) {\n    setTimeout(() =&gt; {\n        contentWindow.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.sendToFrame = function(frame, data) {\n    setTimeout(() =&gt; {\n        frame.contentWindow.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.sendToParent = function(data) {\n    setTimeout(() =&gt; {\n        window.parent.postMessage(tools.toJson(data), '*');\n    }, 0);\n};\n\nservice.receiveMessage = function(event, handler) {\n    \/\/ event.origin, event.data, event.source\n    let data = JSON.parse(event.data);\n    handler(data, event, handler);\n};\n\nservice.registerHandler = function(handler) {\n    window.addEventListener('message', function(event) {\n        service.receiveMessage(event, handler);\n    }, false);\n};\n\nmodule.exports = service;\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted lang:default decode:true\">const $ = require('jquery');\n\nlet service = {};\n\n\/\/ Helper functie die een nieuw html element aanmaakt en deze als jQuery\n\/\/ object terug geeft\nservice.$new = function(type, parent, attributes, classNames) {\n    let k, i;\n    let el = document.createElement(type);\n    if (attributes &amp;&amp; attributes['type']) {\n        el.type = attributes['type'];\n    }\n\n    $(parent).append(el);\n    let jqEl = $(el);\n\n    if (attributes) {\n        for (k in attributes) {\n            if (k !== 'type') {\n                jqEl.attr(k, attributes[k]);\n            }\n        }\n    }\n\n    if (classNames &amp;&amp; classNames instanceof Array) {\n        for (i = 0; i &lt; classNames.length; i += 1) {\n            jqEl.addClass(classNames[i]);\n        }\n    }\n\n    return jqEl;\n};\n\nservice.$newCss = function(file, $head) {\n    let $h = $('head');\n\n    if ($head) {\n        $h = $head;\n    }\n\n    let $e = service.$new('link', $h, {\n        'rel': 'stylesheet',\n        'type': 'text\/css',\n        'href': file\n    });\n    return $e;\n};\n\nservice.$newJs = function(file, $head) {\n    let $h = $('head');\n\n    if ($head) {\n        $h = $head;\n    }\n\n    let $e = service.$new('script', $h, {\n        'type': 'text\/javascript',\n        'src': file\n    });\n    return $e;\n};\n\nservice.$redraw = function($e) {\n    return $e.hide(0, function() {\n        $e.show(0);\n    });\n};\n\nmodule.exports = service;\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted lang:default decode:true\">const tools = require('.\/tools');\n\nlet service = {};\nlet format = tools.format;\nlet pad = tools.pad;\n\nservice.parseDate = function(dateStr) {\n\tlet dateRegex = \/([0-9]*)-([0-9]*)-([0-9]*)T(.*)\/gi;\n\tlet match = dateRegex.exec(dateStr);\n\tif (match) {\n\t\treturn new Date(parseInt(match[1]), parseInt(match[2]) -1, parseInt(match[3]));\n\t}\n\treturn null;\n};\n\nservice.getBirthdays = function(dateArr, dateProp) {\n\tlet now = new Date();\n\tlet nowYear = now.getFullYear();\n\tlet nowDate = now.getDate();\n\tlet nowMonth = now.getMonth();\n\n\tlet result = [];\n\n\tdateArr.forEach(function(item) {\n\t\tlet itemDate = item[dateProp];\n\t\tlet date = itemDate.getDate();\n\t\tlet month = itemDate.getMonth();\n\t\tlet year = itemDate.getFullYear();\n\n\t\tlet birthDay = null;\n\t\tlet birthDayYear = null;\n\n\t\tif (month &lt; nowMonth || (month == nowMonth &amp;&amp; date &lt; nowDate)) {\n\t\t\tbirthDayYear = nowYear+1;\n\t\t} else {\n\t\t\tbirthDayYear = nowYear;\n\t\t}\n\t\tbirthDay = new Date(birthDayYear, month, date);\n\n\t\tlet row = {};\n\t\trow.birthDay = birthDay;\n\t\trow.birthDayAge = birthDayYear - year;\n\t\trow.timeToBirthDay = birthDay.valueOf() - now.valueOf();\n\t\trow.data = item;\n\t\tresult.push(row);\n\t});\n\n\tresult.sort(function(a, b) {\n\t\treturn a.timeToBirthDay - b.timeToBirthDay;\n\t});\n\n\treturn result;\n};\n\nservice.formatDate = function(date, format) {\n\tlet dstr = format;\n\tdstr = dstr.replace('yyyy', date.getFullYear());\n\tdstr = dstr.replace('yy', pad(date.getYear(), 2));\n\tdstr = dstr.replace('y', date.getYear());\n\n\tdstr = dstr.replace('MM', pad(date.getMonth(), 2));\n\tdstr = dstr.replace('M', date.getMonth());\n\n\tdstr = dstr.replace('dd', pad(date.getDate(), 2));\n\tdstr.replace('d', date.getDate());\n\n\tdstr = dstr.replace('HH', pad(date.getHours(), 2));\n\tdstr = dstr.replace('H', date.getHours());\n\n\tdstr = dstr.replace('hh', pad(date.getHours() % 12, 2));\n\tdstr = dstr.replace('h', date.getHours() % 12);\n\n\tdstr = dstr.replace('mm', pad(date.getMinutes(), 2));\n\tdstr = dstr.replace('m', date.getMinutes());\n\n\tdstr = dstr.replace('ss', pad(date.getSeconds(), 2));\n\tdstr = dstr.replace('s', date.getSeconds());\n\n\tdstr = dstr.replace('fff', pad(date.getMilliseconds(), 3));\n\treturn dstr;\n};\n\nservice.datesEqual = function(a, b) {\n\treturn a.getDate() === b.getDate() &amp;&amp; a.getMonth() === b.getMonth() &amp;&amp; a.getFullYear() === b.getFullYear();\n};\n\nservice.isToday = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn service.datesEqual(new Date(), date);\n\t}\n\treturn false;\n};\n\nservice.minToHour = function(min) {\n\treturn min * (100 \/ 60) \/ 100;\n};\n\nservice.hourToMin = function(hour) {\n\treturn (hour \/ (100 \/ 60)) * 100;\n};\n\nlet to_min = (100 \/ 60) \/ 100;\nlet to_sec = (100 \/ 60) \/ 10000;\nservice.getTimeNumber = function(date) {\n\tif (date &amp;&amp; date.getHours) {\n\t\treturn date.getHours() + (date.getMinutes() * to_min) + (date.getSeconds() * to_sec);\n\t}\n\treturn 0;\n};\n\nservice.dateToStr = function(time) {\n\treturn format('{0}-{1}-{2} {3}:{4}', pad(time.getFullYear(), 4), pad(time.getMonth(), 2), pad(time.getDate(), 2), time.getHours(), pad(time\n\t\t\t.getMinutes(), 2));\n};\n\nservice.getWeek = function(date) {\n\tlet onejan = new Date(date.getFullYear(), 0, 1);\n\treturn Math.ceil((((date - onejan) \/ 86400000) + onejan.getDay() + 1) \/ 7);\n};\n\nservice.dayNames = [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ];\nservice.monthNamesFull = [ 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december' ];\nservice.monthNames = [ 'jan', 'feb', 'mrt', 'april', 'mei', 'juni', 'juli', 'aug', 'sept', 'okt', 'nov', 'dec' ];\nlet monthNames = service.monthNames;\n\nservice.shortDateStr = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn format('{1}  {0}', monthNames[date.getMonth()], pad(date.getDate(), 2));\n\t}\n};\n\nservice.dateToString = function(date) {\n\tif (date &amp;&amp; date.getFullYear) {\n\t\treturn format('{0}-{1}-{2}  {3}:{4}:{5}', pad(date.getFullYear(), 4), pad(date.getMonth() + 1, 2), pad(date.getDate(), 2), pad(date.getHours(), 2),\n\t\t\t\tpad(date.getMinutes(), 2), pad(date.getSeconds(), 2));\n\t}\n\treturn '';\n};\n\nservice.addDays = function(date, days) {\n\tlet result = new Date(date);\n\tresult.setDate(date.getDate() + days);\n\treturn result;\n};\nlet addDays = service.addDays;\n\nservice.isWorkingDay = function(date) {\n\tlet weekDay = date.getDay();\n\treturn !(weekDay == 0 || weekDay == 6);\n};\nlet isWorkingDay = service.isWorkingDay;\n\nservice.addWorkingDays = function(date, days) {\n\tlet result = new Date(date);\n\tlet step = 1;\n\tif (days &lt; 0)\n\t\tstep = -1;\n\n\tlet cnt = Math.abs(days);\n\twhile (cnt &gt; 0) {\n\t\tresult = addDays(result, step);\n\t\tif (isWorkingDay(result)) {\n\t\t\tcnt--;\n\t\t}\n\t}\n\treturn result;\n};\n\nservice.getTimeAsSeconds = function getTimeAsSeconds(date) {\n\tif (date &amp;&amp; date.getHours) {\n\t\treturn (date.getHours() * 3600) + (date.getMinutes() * 60) + date.getSeconds();\n\t}\n\treturn null;\n};\n\nmodule.exports = service;\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>let service = {}; let tools = require(&#8216;.\/tools&#8217;); service.sendTo = function(contentWindow, data) { setTimeout(() =&gt; { contentWindow.postMessage(tools.toJson(data), &#8216;*&#8217;); }, 0); }; service.sendToFrame = function(frame, data) { setTimeout(() =&gt; { frame.contentWindow.postMessage(tools.toJson(data), &#8216;*&#8217;); }, 0); }; service.sendToParent = function(data) { setTimeout(() =&gt; { window.parent.postMessage(tools.toJson(data), &#8216;*&#8217;); }, 0); }; service.receiveMessage = function(event, handler) { \/\/ event.origin, event.data, event.source [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4],"tags":[],"class_list":["post-1404","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=1404"}],"version-history":[{"count":6,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1404\/revisions"}],"predecessor-version":[{"id":5369,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1404\/revisions\/5369"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=1404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=1404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=1404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}