Skip to content

Commit

Permalink
Prepare for release
Browse files Browse the repository at this point in the history
  • Loading branch information
masashiGMS committed Aug 23, 2018
1 parent ba81718 commit b77afd5
Show file tree
Hide file tree
Showing 3 changed files with 244 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ tmp/
temp/
platforms/
plugins/
!docs/plugins/
plugins/android.json
plugins/ios.json
$RECYCLE.BIN/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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) {
Expand Down
237 changes: 237 additions & 0 deletions docs/plugins/cordova-plugin-googlemaps/src/browser/fromXML.js
Original file line number Diff line number Diff line change
@@ -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 = {
"&": "&",
"&lt;": "<",
"&gt;": ">",
"&apos;": "'",
"&quot;": '"'
};

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;

});

0 comments on commit b77afd5

Please sign in to comment.