{"id":582,"date":"2017-01-09T16:57:15","date_gmt":"2017-01-09T15:57:15","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=582"},"modified":"2022-07-25T08:35:45","modified_gmt":"2022-07-25T07:35:45","slug":"javascript-data-source-function","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-data-source-function\/","title":{"rendered":"Javascript: Data source function"},"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=\"\">define([], function () {\n    var exports = {};\n\n    exports.jsonToJS = function (str) {\n        return JSON.parse(str);\n    };\n\n    var xmlNodeToJS = function (xml) {\n        try {\n            \/\/ Create the return object\n            var obj = {};\n            if (xml.nodeType === 1) { \/\/ element\n                \/\/ do attributes\n                if (xml.attributes.length > 0) {\n                    for (var j = 0; j &lt; xml.attributes.length; j++) {\n                        var attribute = xml.attributes.item(j);\n                        obj['@' + attribute.nodeName] = attribute.nodeValue;\n                    }\n                }\n            } else if (xml.nodeType === 3 || xml.nodeType === 4) { \/\/ text\n                obj = xml.nodeValue;\n            }\n\n            \/\/ do children\n            if (xml.hasChildNodes()) {\n                for (var i = 0; i &lt; xml.childNodes.length; i++) {\n                    var item = xml.childNodes.item(i);\n                    var nodeName = item.nodeName;\n                    if (typeof (obj[nodeName]) === 'undefined') {\n                        obj[nodeName] = xmlNodeToJS(item);\n                    } else {\n                        if (typeof (obj[nodeName].push) === 'undefined') {\n                            var old = obj[nodeName];\n                            obj[nodeName] = [];\n                            obj[nodeName].push(old);\n                        }\n                        obj[nodeName].push(xmlNodeToJS(item));\n                    }\n                }\n            }\n            return obj;\n        } catch (e) {\n            return {};\n        }\n    };\n    \n    exports.replaceTextAndCData = function(obj) {\n        if (typeof(obj) === \"object\") {                  \n          if ('#text' in obj) {\n            return obj['#text'];\n          }          \n          if ('#cdata-section' in obj) {\n            return obj['#cdata-section'];\n          }          \n                 \n          for(var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                obj[key] = exports.replaceTextAndCData(obj[key]);          \n              \n            }            \n          }                \n        }\n        return obj;\n    };\n\n    exports.xmlToJS = function (str, replaceTextAndCData) {\n        try {\n            if ('DOMParser' in window) {\n                var parser = new window.DOMParser();\n                var xmlDoc = parser.parseFromString(str.trim(), 'text\/xml');\n                var obj = xmlNodeToJS(xmlDoc);               \n                if (replaceTextAndCData) {\n                  return exports.replaceTextAndCData(obj);\n                }\n                return obj;\n            }\n        } catch (ex) {\n            return {};\n        }\n    };\n\n    exports.queryObject = function (obj, path) {\n        if (typeof path == 'undefined' || path.trim() == \"\") throw \"Het ingestelde querypad bestaat niet\";\n        var curObj = obj;\n        var result = [];\n        var parts = path.split('.');\n        parts.forEach(function (part, i) {\n            if (part in curObj) {\n                if (i === parts.length - 1) {\n                    var resultObj = curObj[part];\n                    var type = resultObj.constructor.name;\n                    if (type == 'Array') {\n                        result = [];\n                    } else if (type == \"Object\") {\n                        result = {};\n                    }\n                    var keys = Object.keys(resultObj);\n                    for (var prop in keys) {\n                        if (type == 'Array') {\n                            result[prop] = resultObj[prop];\n                        } else if (type == \"Object\") {\n                            var propName = keys[prop];\n                            result[propName] = resultObj[propName];\n                        }\n                    }\n                } else {\n                    curObj = curObj[part];\n                }\n            } else {\n                return false;\n            }\n        });\n        return result;\n    };\n\n    exports.compare = function (a, b, dir) {\n        if (!dir) dir = 1;\n        var cmp = 0;\n        if (a > b) cmp = 1;\n        else if (a &lt; b) cmp = -1;\n        return dir * cmp;\n    };\n\n    exports.compareString = function (a, b, dir) {\n        if (!dir) dir = 1;\n        return dir * ('' + a).localeCompare('' + b);\n    };\n\n    exports.format = function (str) {\n        var i;\n        for (i = 1; i &lt; arguments.length; i++) {\n            str = str.replace('{' + (i - 1) + '}', arguments[i]);\n        }\n        return str;\n    };\n\n    exports.array = function (obj) {\n        if (obj !== null &amp;&amp; obj !== undefined) {\n            if (Array.isArray(obj)) {\n                return obj;\n            } else {\n                return [obj];\n            }\n        }\n        return [];\n    };\n\n    exports.truncateSmart = function (str, limit) {\n        var bits, i;\n        bits = ('' + str).split('');\n        if (bits.length > limit) {\n            for (i = bits.length - 1; i > -1; --i) {\n                if (i > limit) {\n                    bits.length = i;\n                } else if (' ' === bits[i]) {\n                    bits.length = i;\n                    break;\n                }\n            }\n            bits.push('...');\n        }\n        return bits.join('');\n    };\n\n    return exports;\n});\n\ndefine(['bluebird.min', 'jquery', 'lib\/moment-with-locales'], function () {\n    var Promise = require('bluebird.min');\n    var $ = require('jquery');\n    var moment = require('lib\/moment-with-locales');    \n\n    var compare = function(a, b) {\n        if (a &lt; b) return -1;\n        if (a > b) return 1;\n        return 0;\n    };\n    \n    var getQueryDataFromFunction = function(fnText) {\n        return new Promise(function (resolve, reject) {\n          try {\n              var fullFnText = \"return function($, Promise, moment, tools) { var window, document, alert, confirm, self, parent, global; return new Promise(function(resolve, reject) { try { \" + fnText + \" } catch(e) { reject(e); } })};\";\n              var fn = new Function(fullFnText)();\n\n              fn($, Promise, moment, dataTools)\n              .timeout(10000)\n              .then(function(data) {\n                  resolve(data);\n              })\n              .catch(function(err) {\n                  var error = err.toString();\n                  if (err.stack) {\n                      error = err.stack;\n                  }\n                  console.warn('getQueryDataFromFunction', error);\n                  reject(error);\n              });\n            } catch(err) {\n               var error = err.toString();\n                  if (err.stack) {\n                      error = err.stack;\n                  }\n                  console.warn('getQueryDataFromFunction', error);\n                  reject(error);\n            }\n        });\n    };\n    \n    return exports;\n});\n\nvar url = 'http:\/\/ac.weatheronyoursite.com\/narrowcast_travelweather_daypart.xml';\n$.ajax({\n        url: url,\n        cache: false\n    })\n    .done(function(resultData, result, xhr) {\n        try {\n            var data = tools.xmlToJS(xhr.responseText, true);\n            var landen = tools.queryObject(data, 'WEERONLINE.continent.land');\n            moment.locale('nl') \n            \/\/ land filteren\n            var land = landen.filter(land => land.landnaam === 'Nederland')[0];\n            var plaats = land.plaats.filter(plaats => plaats.plaatsnaam === 'Rotterdam')[0];\n            var weerinfo = plaats.weerinfo[0];\n            var details = {\n                naam: plaats.plaatsnaam,\n                dag : moment(weerinfo.datum).format('dddd')\n            };\n\n            details.ochtend = weerinfo.weerdata.filter(weerdata => weerdata.dagdeel === 'ochtend')[0];\n            details.middag = weerinfo.weerdata.filter(weerdata => weerdata.dagdeel === 'middag')[0];\n            details.avond = weerinfo.weerdata.filter(weerdata => weerdata.dagdeel === 'avond')[0];\n        \n            resolve(details);\n        } catch (err) {\n            reject(err);\n        }\n    })\n    .fail(reject);\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","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-582","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/582","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=582"}],"version-history":[{"count":5,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/582\/revisions"}],"predecessor-version":[{"id":3930,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/582\/revisions\/3930"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}