From b77afd57569b7b2299b2b29def644394333bcb05 Mon Sep 17 00:00:00 2001 From: masashiGMS Date: Wed, 22 Aug 2018 22:11:19 -0700 Subject: [PATCH] Prepare for release --- .gitignore | 1 + .../src/browser/CordovaGoogleMaps.js | 8 +- .../src/browser/fromXML.js | 237 ++++++++++++++++++ 3 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 docs/plugins/cordova-plugin-googlemaps/src/browser/fromXML.js diff --git a/.gitignore b/.gitignore index 1bb0fa7..6fd641f 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ tmp/ temp/ platforms/ plugins/ +!docs/plugins/ plugins/android.json plugins/ios.json $RECYCLE.BIN/ diff --git a/docs/plugins/cordova-plugin-googlemaps/src/browser/CordovaGoogleMaps.js b/docs/plugins/cordova-plugin-googlemaps/src/browser/CordovaGoogleMaps.js index c1358e7..80f1b39 100644 --- a/docs/plugins/cordova-plugin-googlemaps/src/browser/CordovaGoogleMaps.js +++ b/docs/plugins/cordova-plugin-googlemaps/src/browser/CordovaGoogleMaps.js @@ -37,7 +37,12 @@ document.addEventListener("load_googlemaps", function() { //----------------- // Read XML file //----------------- - var xhr = createCORSRequest('GET', './config.xml', true); + + var link = document.createElement("a"); + link.href = './config.xml'; + var url = link.protocol+"//"+link.host+link.pathname; + + var xhr = createCORSRequest('GET', url, true); if (xhr) { xhr.onreadystatechange = function() { try { @@ -66,7 +71,6 @@ document.addEventListener("load_googlemaps", function() { API_KEY_FOR_BROWSER = matches[1]; } } - API_KEY_FOR_BROWSER = null; var secureStripeScript = document.createElement('script'); if (API_KEY_FOR_BROWSER) { diff --git a/docs/plugins/cordova-plugin-googlemaps/src/browser/fromXML.js b/docs/plugins/cordova-plugin-googlemaps/src/browser/fromXML.js new file mode 100644 index 0000000..d322341 --- /dev/null +++ b/docs/plugins/cordova-plugin-googlemaps/src/browser/fromXML.js @@ -0,0 +1,237 @@ +cordova.define("cordova-plugin-googlemaps.fromXML", function(require, exports, module) { + +/** + * The fromXML() method parses an XML string, constructing the JavaScript + * value or object described by the string. + * + * @function fromXML + * @param text {String} The string to parse as XML + * @param [reviver] {Function} If a function, prescribes how the value + * originally produced by parsing is transformed, before being returned. + * @returns {Object} + */ + +var fromXML; + +var UNESCAPE = { + "&": "&", + "<": "<", + ">": ">", + "'": "'", + """: '"' +}; + +var ATTRIBUTE_KEY = "@"; +var CHILD_NODE_KEY = "#"; + + +function _fromXML(text, reviver) { + return toObject(parseXML(text), reviver); +} + +function parseXML(text) { + var list = String.prototype.split.call(text, /<([^!<>?](?:'[\S\s]*?'|"[\S\s]*?"|[^'"<>])*|!(?:--[\S\s]*?--|\[[^\[\]'"<>]+\[[\S\s]*?]]|DOCTYPE[^\[<>]*?\[[\S\s]*?]|(?:ENTITY[^"<>]*?"[\S\s]*?")?[\S\s]*?)|\?[\S\s]*?\?)>/); + var length = list.length; + + // root element + var root = {f: []}; + var elem = root; + + // dom tree stack + var stack = []; + + for (var i = 0; i < length;) { + // text node + var str = list[i++]; + if (str) appendText(str); + + // child node + var tag = list[i++]; + if (tag) parseNode(tag); + } + + return root; + + function parseNode(tag) { + var tagLength = tag.length; + var firstChar = tag[0]; + if (firstChar === "/") { + // close tag + var closed = tag.replace(/^\/|[\s\/].*$/g, "").toLowerCase(); + while (stack.length) { + var tagName = elem.n && elem.n.toLowerCase(); + elem = stack.pop(); + if (tagName === closed) break; + } + // } else if (firstChar === "?") { + // // XML declaration + // appendChild({n: "?", r: tag.substr(1, tagLength - 2)}); + } else if (firstChar === "!") { + if (tag.substr(1, 7) === "[CDATA[" && tag.substr(-2) === "]]") { + // CDATA section + appendText(tag.substr(8, tagLength - 10)); + } else { + // comment + appendChild({n: "!", r: tag.substr(1)}); + } + } else { + var child = openTag(tag); + appendChild(child); + if (tag[tagLength - 1] === "/") { + child.c = 1; // emptyTag + } else { + stack.push(elem); // openTag + elem = child; + } + } + } + + function appendChild(child) { + elem.f.push(child); + } + + function appendText(str) { + str = removeSpaces(str); + if (str) appendChild(unescapeXML(str)); + } +} + +function openTag(tag) { + var elem = {f: []}; + tag = tag.replace(/\s*\/?$/, ""); + var pos = tag.search(/[\s='"\/]/); + if (pos < 0) { + elem.n = tag; + } else { + elem.n = tag.substr(0, pos); + elem.t = tag.substr(pos); + } + return elem; +} + +function parseAttribute(elem, reviver) { + if (!elem.t) return; + var list = elem.t.split(/([^\s='"]+(?:\s*=\s*(?:'[\S\s]*?'|"[\S\s]*?"|[^\s'"]*))?)/); + var length = list.length; + var attributes, val; + + for (var i = 0; i < length; i++) { + var str = removeSpaces(list[i]); + if (!str) continue; + + if (!attributes) { + attributes = {}; + } + + var pos = str.indexOf("="); + if (pos < 0) { + // bare attribute + str = ATTRIBUTE_KEY + str; + val = null; + } else { + // attribute key/value pair + val = str.substr(pos + 1).replace(/^\s+/, ""); + str = ATTRIBUTE_KEY + str.substr(0, pos).replace(/\s+$/, ""); + + // quote: foo="FOO" bar='BAR' + var firstChar = val[0]; + var lastChar = val[val.length - 1]; + if (firstChar === lastChar && (firstChar === "'" || firstChar === '"')) { + val = val.substr(1, val.length - 2); + } + + val = unescapeXML(val); + } + if (reviver) { + val = reviver(str, val); + } + addObject(attributes, str, val); + } + + return attributes; +} + +function removeSpaces(str) { + return str && str.replace(/^\s+|\s+$/g, ""); +} + +function unescapeXML(str) { + return str.replace(/(&(?:lt|gt|amp|apos|quot|#(?:\d{1,6}|x[0-9a-fA-F]{1,5}));)/g, function(str) { + if (str[1] === "#") { + var code = (str[2] === "x") ? parseInt(str.substr(3), 16) : parseInt(str.substr(2), 10); + if (code > -1) return String.fromCharCode(code); + } + return UNESCAPE[str] || str; + }); +} + +function toObject(elem, reviver) { + if ("string" === typeof elem) return elem; + + var raw = elem.r; + if (raw) return raw; + + var attributes = parseAttribute(elem, reviver); + var object; + var childList = elem.f; + var childLength = childList.length; + + if (attributes || childLength > 1) { + // merge attributes and child nodes + object = attributes || {}; + childList.forEach(function(child) { + if ("string" === typeof child) { + addObject(object, CHILD_NODE_KEY, child); + } else { + addObject(object, child.n, toObject(child, reviver)); + } + }); + } else if (childLength) { + // the node has single child node but no attribute + var child = childList[0]; + object = toObject(child, reviver); + if (child.n) { + var wrap = {}; + wrap[child.n] = object; + object = wrap; + } + } else { + // the node has no attribute nor child node + object = elem.c ? null : ""; + } + + if (reviver) { + object = reviver(elem.n || "", object); + } + + return object; +} + +function addObject(object, key, val) { + if ("undefined" === typeof val) return; + object.attr = object.attr || []; + key = key.toLowerCase(); + if (/^\@/.test(key)) { + object.attr.push({ + 'name': key, + 'value': val + }); + return; + } + var prev = object[key]; + if (prev instanceof Array) { + prev.push(val); + } else if (key in object) { + object[key] = [{'tagName': key, 'value': prev}, {'tagName': key, 'value': val}]; + } else { + object[key] = { + 'tagName': key, + 'value': val + }; + } +} + + +module.exports = _fromXML; + +});