mdimapgeocoder
Advanced tools
Comparing version 0.1.3 to 0.1.4
@@ -1,2 +0,2 @@ | ||
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.MDiMapGeocoder=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.MDiMapGeocoder=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||
module.exports = _dereq_('./lib/MDiMapGeocoder'); | ||
@@ -7,6 +7,6 @@ },{"./lib/MDiMapGeocoder":2}],2:[function(_dereq_,module,exports){ | ||
function MDiMapGeocoder(options) { | ||
function MDiMapGeocoder() { | ||
this.address_fields = ['Street', 'City', 'State', 'ZIP'] | ||
this.options = { | ||
this.defaults = { | ||
browser: false, | ||
@@ -16,22 +16,32 @@ wkid: 4326, | ||
protocol: 'http:', | ||
host: 'mdimap.us', | ||
pathname: 'ArcGIS/rest/services/GeocodeServices/MD.State.MDCascadingLocatorWithZIPCodes/GeocodeServer/findAddressCandidates' | ||
host: 'geodata.md.gov', | ||
pathname: 'imap/rest/services/GeocodeServices/MD_CompositeLocatorWithZIPCodeCentroids/GeocodeServer/findAddressCandidates' | ||
} | ||
} | ||
if(options) { | ||
for(var option in options){ | ||
this.options[option] = options[option] | ||
} | ||
} | ||
this.options = JSON.parse(JSON.stringify(this.defaults)) | ||
if (process.title === 'node') { | ||
this.options.browser = false | ||
this.browser = false | ||
http = _dereq_('http') | ||
} else { | ||
this.options.browser = true | ||
this.browser = true | ||
} | ||
} | ||
MDiMapGeocoder.prototype.search = function(term, next) { | ||
MDiMapGeocoder.prototype.search = function(term, options, next) { | ||
if (arguments.length === 2) { | ||
if (typeof options === 'function') { | ||
next = options | ||
} | ||
this.options = JSON.parse(JSON.stringify(this.defaults)) | ||
} else if (arguments.length === 3) { | ||
if(options) { | ||
for(var option in options){ | ||
this.options[option] = options[option] | ||
} | ||
} | ||
} | ||
var query = { | ||
@@ -56,10 +66,10 @@ outSR: this.options.wkid, | ||
if(this.options.browser){ | ||
this.browserGet(get_url, next) | ||
if(this.browser){ | ||
browserGet(get_url, next) | ||
} else { | ||
this.nodeGet(get_url, next) | ||
nodeGet(get_url, next) | ||
} | ||
} | ||
MDiMapGeocoder.prototype.browserGet = function(get_url, next) { | ||
function browserGet(get_url, next) { | ||
get_url.query.callback = '_MDiMapGeocoder_cb' | ||
@@ -79,3 +89,3 @@ window._MDiMapGeocoder_cb = function(data){ | ||
MDiMapGeocoder.prototype.nodeGet = function(get_url, next) { | ||
function nodeGet(get_url, next) { | ||
get_url = url.format(get_url) | ||
@@ -100,5 +110,5 @@ http.get(get_url, function(res){ | ||
module.exports = MDiMapGeocoder | ||
}).call(this,_dereq_("/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) | ||
},{"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":3,"http":"7pDG/4","url":8}],3:[function(_dereq_,module,exports){ | ||
module.exports = new MDiMapGeocoder() | ||
}).call(this,_dereq_("lppjwH")) | ||
},{"http":"7pDG/4","lppjwH":3,"url":8}],3:[function(_dereq_,module,exports){ | ||
// shim for using process in browser | ||
@@ -148,2 +158,12 @@ | ||
function noop() {} | ||
process.on = noop; | ||
process.addListener = noop; | ||
process.once = noop; | ||
process.off = noop; | ||
process.removeListener = noop; | ||
process.removeAllListeners = noop; | ||
process.emit = noop; | ||
process.binding = function (name) { | ||
@@ -807,3 +827,3 @@ throw new Error('process.binding is not supported'); | ||
if (isArray(obj[k])) { | ||
return obj[k].map(function(v) { | ||
return map(obj[k], function(v) { | ||
return ks + encodeURIComponent(stringifyPrimitive(v)); | ||
@@ -851,6 +871,2 @@ }).join(sep); | ||
},{"./decode":5,"./encode":6}],8:[function(_dereq_,module,exports){ | ||
/*jshint strict:true node:true es5:true onevar:true laxcomma:true laxbreak:true eqeqeq:true immed:true latedef:true*/ | ||
(function () { | ||
"use strict"; | ||
// Copyright Joyent, Inc. and other Node contributors. | ||
@@ -884,2 +900,19 @@ // | ||
exports.Url = Url; | ||
function Url() { | ||
this.protocol = null; | ||
this.slashes = null; | ||
this.auth = null; | ||
this.host = null; | ||
this.port = null; | ||
this.hostname = null; | ||
this.hash = null; | ||
this.search = null; | ||
this.query = null; | ||
this.pathname = null; | ||
this.path = null; | ||
this.href = null; | ||
} | ||
// Reference: RFC 3986, RFC 1808, RFC 2396 | ||
@@ -897,6 +930,6 @@ | ||
// RFC 2396: characters not allowed for various reasons. | ||
unwise = ['{', '}', '|', '\\', '^', '~', '`'].concat(delims), | ||
unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), | ||
// Allowed by RFCs, but cause of XSS attacks. Always escape these. | ||
autoEscape = ['\''].concat(delims), | ||
autoEscape = ['\''].concat(unwise), | ||
// Characters that are never ever allowed in a hostname. | ||
@@ -906,8 +939,7 @@ // Note that any invalid chars are also handled, but these | ||
// them. | ||
nonHostChars = ['%', '/', '?', ';', '#'] | ||
.concat(unwise).concat(autoEscape), | ||
nonAuthChars = ['/', '@', '?', '#'].concat(delims), | ||
nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), | ||
hostEndingChars = ['/', '?', '#'], | ||
hostnameMaxLen = 255, | ||
hostnamePartPattern = /^[a-zA-Z0-9][a-z0-9A-Z_-]{0,62}$/, | ||
hostnamePartStart = /^([a-zA-Z0-9][a-z0-9A-Z_-]{0,62})(.*)$/, | ||
hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, | ||
hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, | ||
// protocols that can allow "unsafe" and "unwise" chars. | ||
@@ -923,14 +955,2 @@ unsafeProtocol = { | ||
}, | ||
// protocols that always have a path component. | ||
pathedProtocol = { | ||
'http': true, | ||
'https': true, | ||
'ftp': true, | ||
'gopher': true, | ||
'file': true, | ||
'http:': true, | ||
'ftp:': true, | ||
'gopher:': true, | ||
'file:': true | ||
}, | ||
// protocols that always contain a // bit. | ||
@@ -952,10 +972,15 @@ slashedProtocol = { | ||
function urlParse(url, parseQueryString, slashesDenoteHost) { | ||
if (url && typeof(url) === 'object' && url.href) return url; | ||
if (url && isObject(url) && url instanceof Url) return url; | ||
if (typeof url !== 'string') { | ||
var u = new Url; | ||
u.parse(url, parseQueryString, slashesDenoteHost); | ||
return u; | ||
} | ||
Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { | ||
if (!isString(url)) { | ||
throw new TypeError("Parameter 'url' must be a string, not " + typeof url); | ||
} | ||
var out = {}, | ||
rest = url; | ||
var rest = url; | ||
@@ -970,3 +995,3 @@ // trim before proceeding. | ||
var lowerProto = proto.toLowerCase(); | ||
out.protocol = lowerProto; | ||
this.protocol = lowerProto; | ||
rest = rest.substr(proto.length); | ||
@@ -983,3 +1008,3 @@ } | ||
rest = rest.substr(2); | ||
out.slashes = true; | ||
this.slashes = true; | ||
} | ||
@@ -990,68 +1015,75 @@ } | ||
(slashes || (proto && !slashedProtocol[proto]))) { | ||
// there's a hostname. | ||
// the first instance of /, ?, ;, or # ends the host. | ||
// don't enforce full RFC correctness, just be unstupid about it. | ||
// | ||
// If there is an @ in the hostname, then non-host chars *are* allowed | ||
// to the left of the first @ sign, unless some non-auth character | ||
// to the left of the last @ sign, unless some host-ending character | ||
// comes *before* the @-sign. | ||
// URLs are obnoxious. | ||
var atSign = rest.indexOf('@'); | ||
if (atSign !== -1) { | ||
var auth = rest.slice(0, atSign); | ||
// | ||
// ex: | ||
// http://a@b@c/ => user:a@b host:c | ||
// http://a@b?@c => user:a host:c path:/?@c | ||
// there *may be* an auth | ||
var hasAuth = true; | ||
for (var i = 0, l = nonAuthChars.length; i < l; i++) { | ||
if (auth.indexOf(nonAuthChars[i]) !== -1) { | ||
// not a valid auth. Something like http://foo.com/bar@baz/ | ||
hasAuth = false; | ||
break; | ||
} | ||
} | ||
// v0.12 TODO(isaacs): This is not quite how Chrome does things. | ||
// Review our test case against browsers more comprehensively. | ||
if (hasAuth) { | ||
// pluck off the auth portion. | ||
out.auth = decodeURIComponent(auth); | ||
rest = rest.substr(atSign + 1); | ||
} | ||
// find the first instance of any hostEndingChars | ||
var hostEnd = -1; | ||
for (var i = 0; i < hostEndingChars.length; i++) { | ||
var hec = rest.indexOf(hostEndingChars[i]); | ||
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) | ||
hostEnd = hec; | ||
} | ||
var firstNonHost = -1; | ||
for (var i = 0, l = nonHostChars.length; i < l; i++) { | ||
var index = rest.indexOf(nonHostChars[i]); | ||
if (index !== -1 && | ||
(firstNonHost < 0 || index < firstNonHost)) firstNonHost = index; | ||
// at this point, either we have an explicit point where the | ||
// auth portion cannot go past, or the last @ char is the decider. | ||
var auth, atSign; | ||
if (hostEnd === -1) { | ||
// atSign can be anywhere. | ||
atSign = rest.lastIndexOf('@'); | ||
} else { | ||
// atSign must be in auth portion. | ||
// http://a@b/c@d => host:b auth:a path:/c@d | ||
atSign = rest.lastIndexOf('@', hostEnd); | ||
} | ||
if (firstNonHost !== -1) { | ||
out.host = rest.substr(0, firstNonHost); | ||
rest = rest.substr(firstNonHost); | ||
} else { | ||
out.host = rest; | ||
rest = ''; | ||
// Now we have a portion which is definitely the auth. | ||
// Pull that off. | ||
if (atSign !== -1) { | ||
auth = rest.slice(0, atSign); | ||
rest = rest.slice(atSign + 1); | ||
this.auth = decodeURIComponent(auth); | ||
} | ||
// pull out port. | ||
var p = parseHost(out.host); | ||
var keys = Object.keys(p); | ||
for (var i = 0, l = keys.length; i < l; i++) { | ||
var key = keys[i]; | ||
out[key] = p[key]; | ||
// the host is the remaining to the left of the first non-host char | ||
hostEnd = -1; | ||
for (var i = 0; i < nonHostChars.length; i++) { | ||
var hec = rest.indexOf(nonHostChars[i]); | ||
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) | ||
hostEnd = hec; | ||
} | ||
// if we still have not hit it, then the entire thing is a host. | ||
if (hostEnd === -1) | ||
hostEnd = rest.length; | ||
this.host = rest.slice(0, hostEnd); | ||
rest = rest.slice(hostEnd); | ||
// pull out port. | ||
this.parseHost(); | ||
// we've indicated that there is a hostname, | ||
// so even if it's empty, it has to be present. | ||
out.hostname = out.hostname || ''; | ||
this.hostname = this.hostname || ''; | ||
// if hostname begins with [ and ends with ] | ||
// assume that it's an IPv6 address. | ||
var ipv6Hostname = out.hostname[0] === '[' && | ||
out.hostname[out.hostname.length - 1] === ']'; | ||
var ipv6Hostname = this.hostname[0] === '[' && | ||
this.hostname[this.hostname.length - 1] === ']'; | ||
// validate a little. | ||
if (out.hostname.length > hostnameMaxLen) { | ||
out.hostname = ''; | ||
} else if (!ipv6Hostname) { | ||
var hostparts = out.hostname.split(/\./); | ||
if (!ipv6Hostname) { | ||
var hostparts = this.hostname.split(/\./); | ||
for (var i = 0, l = hostparts.length; i < l; i++) { | ||
@@ -1084,3 +1116,3 @@ var part = hostparts[i]; | ||
} | ||
out.hostname = validParts.join('.'); | ||
this.hostname = validParts.join('.'); | ||
break; | ||
@@ -1092,4 +1124,8 @@ } | ||
// hostnames are always lower case. | ||
out.hostname = out.hostname.toLowerCase(); | ||
if (this.hostname.length > hostnameMaxLen) { | ||
this.hostname = ''; | ||
} else { | ||
// hostnames are always lower case. | ||
this.hostname = this.hostname.toLowerCase(); | ||
} | ||
@@ -1101,3 +1137,3 @@ if (!ipv6Hostname) { | ||
// you call it with a domain that already is in ASCII. | ||
var domainArray = out.hostname.split('.'); | ||
var domainArray = this.hostname.split('.'); | ||
var newOut = []; | ||
@@ -1109,12 +1145,14 @@ for (var i = 0; i < domainArray.length; ++i) { | ||
} | ||
out.hostname = newOut.join('.'); | ||
this.hostname = newOut.join('.'); | ||
} | ||
out.host = (out.hostname || '') + | ||
((out.port) ? ':' + out.port : ''); | ||
out.href += out.host; | ||
var p = this.port ? ':' + this.port : ''; | ||
var h = this.hostname || ''; | ||
this.host = h + p; | ||
this.href += this.host; | ||
// strip [ and ] from the hostname | ||
// the host field still retains them, though | ||
if (ipv6Hostname) { | ||
out.hostname = out.hostname.substr(1, out.hostname.length - 2); | ||
this.hostname = this.hostname.substr(1, this.hostname.length - 2); | ||
if (rest[0] !== '/') { | ||
@@ -1148,3 +1186,3 @@ rest = '/' + rest; | ||
// got a fragment string. | ||
out.hash = rest.substr(hash); | ||
this.hash = rest.substr(hash); | ||
rest = rest.slice(0, hash); | ||
@@ -1154,6 +1192,6 @@ } | ||
if (qm !== -1) { | ||
out.search = rest.substr(qm); | ||
out.query = rest.substr(qm + 1); | ||
this.search = rest.substr(qm); | ||
this.query = rest.substr(qm + 1); | ||
if (parseQueryString) { | ||
out.query = querystring.parse(out.query); | ||
this.query = querystring.parse(this.query); | ||
} | ||
@@ -1163,21 +1201,22 @@ rest = rest.slice(0, qm); | ||
// no query string, but parseQueryString still requested | ||
out.search = ''; | ||
out.query = {}; | ||
this.search = ''; | ||
this.query = {}; | ||
} | ||
if (rest) out.pathname = rest; | ||
if (slashedProtocol[proto] && | ||
out.hostname && !out.pathname) { | ||
out.pathname = '/'; | ||
if (rest) this.pathname = rest; | ||
if (slashedProtocol[lowerProto] && | ||
this.hostname && !this.pathname) { | ||
this.pathname = '/'; | ||
} | ||
//to support http.request | ||
if (out.pathname || out.search) { | ||
out.path = (out.pathname ? out.pathname : '') + | ||
(out.search ? out.search : ''); | ||
if (this.pathname || this.search) { | ||
var p = this.pathname || ''; | ||
var s = this.search || ''; | ||
this.path = p + s; | ||
} | ||
// finally, reconstruct the href based on what has been validated. | ||
out.href = urlFormat(out); | ||
return out; | ||
} | ||
this.href = this.format(); | ||
return this; | ||
}; | ||
@@ -1190,5 +1229,9 @@ // format a parsed object into a url string | ||
// to clean up potentially wonky urls. | ||
if (typeof(obj) === 'string') obj = urlParse(obj); | ||
if (isString(obj)) obj = urlParse(obj); | ||
if (!(obj instanceof Url)) return Url.prototype.format.call(obj); | ||
return obj.format(); | ||
} | ||
var auth = obj.auth || ''; | ||
Url.prototype.format = function() { | ||
var auth = this.auth || ''; | ||
if (auth) { | ||
@@ -1200,25 +1243,26 @@ auth = encodeURIComponent(auth); | ||
var protocol = obj.protocol || '', | ||
pathname = obj.pathname || '', | ||
hash = obj.hash || '', | ||
var protocol = this.protocol || '', | ||
pathname = this.pathname || '', | ||
hash = this.hash || '', | ||
host = false, | ||
query = ''; | ||
if (obj.host !== undefined) { | ||
host = auth + obj.host; | ||
} else if (obj.hostname !== undefined) { | ||
host = auth + (obj.hostname.indexOf(':') === -1 ? | ||
obj.hostname : | ||
'[' + obj.hostname + ']'); | ||
if (obj.port) { | ||
host += ':' + obj.port; | ||
if (this.host) { | ||
host = auth + this.host; | ||
} else if (this.hostname) { | ||
host = auth + (this.hostname.indexOf(':') === -1 ? | ||
this.hostname : | ||
'[' + this.hostname + ']'); | ||
if (this.port) { | ||
host += ':' + this.port; | ||
} | ||
} | ||
if (obj.query && typeof obj.query === 'object' && | ||
Object.keys(obj.query).length) { | ||
query = querystring.stringify(obj.query); | ||
if (this.query && | ||
isObject(this.query) && | ||
Object.keys(this.query).length) { | ||
query = querystring.stringify(this.query); | ||
} | ||
var search = obj.search || (query && ('?' + query)) || ''; | ||
var search = this.search || (query && ('?' + query)) || ''; | ||
@@ -1229,3 +1273,3 @@ if (protocol && protocol.substr(-1) !== ':') protocol += ':'; | ||
// unless they had them to begin with. | ||
if (obj.slashes || | ||
if (this.slashes || | ||
(!protocol || slashedProtocol[protocol]) && host !== false) { | ||
@@ -1241,21 +1285,43 @@ host = '//' + (host || ''); | ||
pathname = pathname.replace(/[?#]/g, function(match) { | ||
return encodeURIComponent(match); | ||
}); | ||
search = search.replace('#', '%23'); | ||
return protocol + host + pathname + search + hash; | ||
} | ||
}; | ||
function urlResolve(source, relative) { | ||
return urlFormat(urlResolveObject(source, relative)); | ||
return urlParse(source, false, true).resolve(relative); | ||
} | ||
Url.prototype.resolve = function(relative) { | ||
return this.resolveObject(urlParse(relative, false, true)).format(); | ||
}; | ||
function urlResolveObject(source, relative) { | ||
if (!source) return relative; | ||
return urlParse(source, false, true).resolveObject(relative); | ||
} | ||
source = urlParse(urlFormat(source), false, true); | ||
relative = urlParse(urlFormat(relative), false, true); | ||
Url.prototype.resolveObject = function(relative) { | ||
if (isString(relative)) { | ||
var rel = new Url(); | ||
rel.parse(relative, false, true); | ||
relative = rel; | ||
} | ||
var result = new Url(); | ||
Object.keys(this).forEach(function(k) { | ||
result[k] = this[k]; | ||
}, this); | ||
// hash is always overridden, no matter what. | ||
source.hash = relative.hash; | ||
// even href="" will remove it. | ||
result.hash = relative.hash; | ||
// if the relative url is empty, then there's nothing left to do here. | ||
if (relative.href === '') { | ||
source.href = urlFormat(source); | ||
return source; | ||
result.href = result.format(); | ||
return result; | ||
} | ||
@@ -1265,13 +1331,19 @@ | ||
if (relative.slashes && !relative.protocol) { | ||
relative.protocol = source.protocol; | ||
// take everything except the protocol from relative | ||
Object.keys(relative).forEach(function(k) { | ||
if (k !== 'protocol') | ||
result[k] = relative[k]; | ||
}); | ||
//urlParse appends trailing / to urls like http://www.example.com | ||
if (slashedProtocol[relative.protocol] && | ||
relative.hostname && !relative.pathname) { | ||
relative.path = relative.pathname = '/'; | ||
if (slashedProtocol[result.protocol] && | ||
result.hostname && !result.pathname) { | ||
result.path = result.pathname = '/'; | ||
} | ||
relative.href = urlFormat(relative); | ||
return relative; | ||
result.href = result.format(); | ||
return result; | ||
} | ||
if (relative.protocol && relative.protocol !== source.protocol) { | ||
if (relative.protocol && relative.protocol !== result.protocol) { | ||
// if it's a known url protocol, then changing | ||
@@ -1286,6 +1358,10 @@ // the protocol does weird things | ||
if (!slashedProtocol[relative.protocol]) { | ||
relative.href = urlFormat(relative); | ||
return relative; | ||
Object.keys(relative).forEach(function(k) { | ||
result[k] = relative[k]; | ||
}); | ||
result.href = result.format(); | ||
return result; | ||
} | ||
source.protocol = relative.protocol; | ||
result.protocol = relative.protocol; | ||
if (!relative.host && !hostlessProtocol[relative.protocol]) { | ||
@@ -1298,33 +1374,34 @@ var relPath = (relative.pathname || '').split('/'); | ||
if (relPath.length < 2) relPath.unshift(''); | ||
relative.pathname = relPath.join('/'); | ||
result.pathname = relPath.join('/'); | ||
} else { | ||
result.pathname = relative.pathname; | ||
} | ||
source.pathname = relative.pathname; | ||
source.search = relative.search; | ||
source.query = relative.query; | ||
source.host = relative.host || ''; | ||
source.auth = relative.auth; | ||
source.hostname = relative.hostname || relative.host; | ||
source.port = relative.port; | ||
//to support http.request | ||
if (source.pathname !== undefined || source.search !== undefined) { | ||
source.path = (source.pathname ? source.pathname : '') + | ||
(source.search ? source.search : ''); | ||
result.search = relative.search; | ||
result.query = relative.query; | ||
result.host = relative.host || ''; | ||
result.auth = relative.auth; | ||
result.hostname = relative.hostname || relative.host; | ||
result.port = relative.port; | ||
// to support http.request | ||
if (result.pathname || result.search) { | ||
var p = result.pathname || ''; | ||
var s = result.search || ''; | ||
result.path = p + s; | ||
} | ||
source.slashes = source.slashes || relative.slashes; | ||
source.href = urlFormat(source); | ||
return source; | ||
result.slashes = result.slashes || relative.slashes; | ||
result.href = result.format(); | ||
return result; | ||
} | ||
var isSourceAbs = (source.pathname && source.pathname.charAt(0) === '/'), | ||
var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), | ||
isRelAbs = ( | ||
relative.host !== undefined || | ||
relative.host || | ||
relative.pathname && relative.pathname.charAt(0) === '/' | ||
), | ||
mustEndAbs = (isRelAbs || isSourceAbs || | ||
(source.host && relative.pathname)), | ||
(result.host && relative.pathname)), | ||
removeAllDots = mustEndAbs, | ||
srcPath = source.pathname && source.pathname.split('/') || [], | ||
srcPath = result.pathname && result.pathname.split('/') || [], | ||
relPath = relative.pathname && relative.pathname.split('/') || [], | ||
psychotic = source.protocol && | ||
!slashedProtocol[source.protocol]; | ||
psychotic = result.protocol && !slashedProtocol[result.protocol]; | ||
@@ -1334,16 +1411,15 @@ // if the url is a non-slashed url, then relative | ||
// to crawl up to the hostname, as well. This is strange. | ||
// source.protocol has already been set by now. | ||
// result.protocol has already been set by now. | ||
// Later on, put the first path part into the host field. | ||
if (psychotic) { | ||
delete source.hostname; | ||
delete source.port; | ||
if (source.host) { | ||
if (srcPath[0] === '') srcPath[0] = source.host; | ||
else srcPath.unshift(source.host); | ||
result.hostname = ''; | ||
result.port = null; | ||
if (result.host) { | ||
if (srcPath[0] === '') srcPath[0] = result.host; | ||
else srcPath.unshift(result.host); | ||
} | ||
delete source.host; | ||
result.host = ''; | ||
if (relative.protocol) { | ||
delete relative.hostname; | ||
delete relative.port; | ||
relative.hostname = null; | ||
relative.port = null; | ||
if (relative.host) { | ||
@@ -1353,3 +1429,3 @@ if (relPath[0] === '') relPath[0] = relative.host; | ||
} | ||
delete relative.host; | ||
relative.host = null; | ||
} | ||
@@ -1361,8 +1437,8 @@ mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); | ||
// it's absolute. | ||
source.host = (relative.host || relative.host === '') ? | ||
relative.host : source.host; | ||
source.hostname = (relative.hostname || relative.hostname === '') ? | ||
relative.hostname : source.hostname; | ||
source.search = relative.search; | ||
source.query = relative.query; | ||
result.host = (relative.host || relative.host === '') ? | ||
relative.host : result.host; | ||
result.hostname = (relative.hostname || relative.hostname === '') ? | ||
relative.hostname : result.hostname; | ||
result.search = relative.search; | ||
result.query = relative.query; | ||
srcPath = relPath; | ||
@@ -1376,5 +1452,5 @@ // fall through to the dot-handling below. | ||
srcPath = srcPath.concat(relPath); | ||
source.search = relative.search; | ||
source.query = relative.query; | ||
} else if ('search' in relative) { | ||
result.search = relative.search; | ||
result.query = relative.query; | ||
} else if (!isNullOrUndefined(relative.search)) { | ||
// just pull out the search. | ||
@@ -1384,36 +1460,38 @@ // like href='?foo'. | ||
if (psychotic) { | ||
source.hostname = source.host = srcPath.shift(); | ||
result.hostname = result.host = srcPath.shift(); | ||
//occationaly the auth can get stuck only in host | ||
//this especialy happens in cases like | ||
//url.resolveObject('mailto:local1@domain1', 'local2@domain2') | ||
var authInHost = source.host && source.host.indexOf('@') > 0 ? | ||
source.host.split('@') : false; | ||
var authInHost = result.host && result.host.indexOf('@') > 0 ? | ||
result.host.split('@') : false; | ||
if (authInHost) { | ||
source.auth = authInHost.shift(); | ||
source.host = source.hostname = authInHost.shift(); | ||
result.auth = authInHost.shift(); | ||
result.host = result.hostname = authInHost.shift(); | ||
} | ||
} | ||
source.search = relative.search; | ||
source.query = relative.query; | ||
result.search = relative.search; | ||
result.query = relative.query; | ||
//to support http.request | ||
if (source.pathname !== undefined || source.search !== undefined) { | ||
source.path = (source.pathname ? source.pathname : '') + | ||
(source.search ? source.search : ''); | ||
if (!isNull(result.pathname) || !isNull(result.search)) { | ||
result.path = (result.pathname ? result.pathname : '') + | ||
(result.search ? result.search : ''); | ||
} | ||
source.href = urlFormat(source); | ||
return source; | ||
result.href = result.format(); | ||
return result; | ||
} | ||
if (!srcPath.length) { | ||
// no path at all. easy. | ||
// we've already handled the other stuff above. | ||
delete source.pathname; | ||
result.pathname = null; | ||
//to support http.request | ||
if (!source.search) { | ||
source.path = '/' + source.search; | ||
if (result.search) { | ||
result.path = '/' + result.search; | ||
} else { | ||
delete source.path; | ||
result.path = null; | ||
} | ||
source.href = urlFormat(source); | ||
return source; | ||
result.href = result.format(); | ||
return result; | ||
} | ||
// if a url ENDs in . or .., then it must get a trailing slash. | ||
@@ -1424,3 +1502,3 @@ // however, if it ends in anything else non-slashy, | ||
var hasTrailingSlash = ( | ||
(source.host || relative.host) && (last === '.' || last === '..') || | ||
(result.host || relative.host) && (last === '.' || last === '..') || | ||
last === ''); | ||
@@ -1465,3 +1543,3 @@ | ||
if (psychotic) { | ||
source.hostname = source.host = isAbsolute ? '' : | ||
result.hostname = result.host = isAbsolute ? '' : | ||
srcPath.length ? srcPath.shift() : ''; | ||
@@ -1471,11 +1549,11 @@ //occationaly the auth can get stuck only in host | ||
//url.resolveObject('mailto:local1@domain1', 'local2@domain2') | ||
var authInHost = source.host && source.host.indexOf('@') > 0 ? | ||
source.host.split('@') : false; | ||
var authInHost = result.host && result.host.indexOf('@') > 0 ? | ||
result.host.split('@') : false; | ||
if (authInHost) { | ||
source.auth = authInHost.shift(); | ||
source.host = source.hostname = authInHost.shift(); | ||
result.auth = authInHost.shift(); | ||
result.host = result.hostname = authInHost.shift(); | ||
} | ||
} | ||
mustEndAbs = mustEndAbs || (source.host && srcPath.length); | ||
mustEndAbs = mustEndAbs || (result.host && srcPath.length); | ||
@@ -1486,16 +1564,22 @@ if (mustEndAbs && !isAbsolute) { | ||
source.pathname = srcPath.join('/'); | ||
if (!srcPath.length) { | ||
result.pathname = null; | ||
result.path = null; | ||
} else { | ||
result.pathname = srcPath.join('/'); | ||
} | ||
//to support request.http | ||
if (source.pathname !== undefined || source.search !== undefined) { | ||
source.path = (source.pathname ? source.pathname : '') + | ||
(source.search ? source.search : ''); | ||
if (!isNull(result.pathname) || !isNull(result.search)) { | ||
result.path = (result.pathname ? result.pathname : '') + | ||
(result.search ? result.search : ''); | ||
} | ||
source.auth = relative.auth || source.auth; | ||
source.slashes = source.slashes || relative.slashes; | ||
source.href = urlFormat(source); | ||
return source; | ||
} | ||
result.auth = relative.auth || result.auth; | ||
result.slashes = result.slashes || relative.slashes; | ||
result.href = result.format(); | ||
return result; | ||
}; | ||
function parseHost(host) { | ||
var out = {}; | ||
Url.prototype.parseHost = function() { | ||
var host = this.host; | ||
var port = portPattern.exec(host); | ||
@@ -1505,14 +1589,26 @@ if (port) { | ||
if (port !== ':') { | ||
out.port = port.substr(1); | ||
this.port = port.substr(1); | ||
} | ||
host = host.substr(0, host.length - port.length); | ||
} | ||
if (host) out.hostname = host; | ||
return out; | ||
if (host) this.hostname = host; | ||
}; | ||
function isString(arg) { | ||
return typeof arg === "string"; | ||
} | ||
}()); | ||
function isObject(arg) { | ||
return typeof arg === 'object' && arg !== null; | ||
} | ||
function isNull(arg) { | ||
return arg === null; | ||
} | ||
function isNullOrUndefined(arg) { | ||
return arg == null; | ||
} | ||
},{"punycode":4,"querystring":7}]},{},[1]) | ||
(1) | ||
}); |
@@ -1,1 +0,1 @@ | ||
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.MDiMapGeocoder=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){module.exports=_dereq_("./lib/MDiMapGeocoder")},{"./lib/MDiMapGeocoder":2}],2:[function(_dereq_,module,exports){!function(process){var url=_dereq_("url");function MDiMapGeocoder(options){this.address_fields=["Street","City","State","ZIP"];this.options={browser:false,wkid:4326,get_url:{protocol:"http:",host:"mdimap.us",pathname:"ArcGIS/rest/services/GeocodeServices/MD.State.MDCascadingLocatorWithZIPCodes/GeocodeServer/findAddressCandidates"}};if(options){for(var option in options){this.options[option]=options[option]}}if(process.title==="node"){this.options.browser=false;http=_dereq_("http")}else{this.options.browser=true}}MDiMapGeocoder.prototype.search=function(term,next){var query={outSR:this.options.wkid,f:"json"};if(typeof term==="string"){query.SingleLine=term}else if(typeof term==="object"){for(var i=0;i<this.address_fields.length;i++){var field=this.address_fields[i];if(term[field]){query[field]=term[field]}}}var get_url=this.options.get_url;get_url.query=query;if(this.options.browser){this.browserGet(get_url,next)}else{this.nodeGet(get_url,next)}};MDiMapGeocoder.prototype.browserGet=function(get_url,next){get_url.query.callback="_MDiMapGeocoder_cb";window._MDiMapGeocoder_cb=function(data){next(null,data)};get_url=url.format(get_url);var script=document.createElement("script");script.onload=function(){document.head.removeChild(this)};script.src=get_url;document.getElementsByTagName("head")[0].appendChild(script)};MDiMapGeocoder.prototype.nodeGet=function(get_url,next){get_url=url.format(get_url);http.get(get_url,function(res){var data="";res.on("data",function(chunk){data+=chunk});res.on("end",function(err){if(err){next(err);return}else{var obj=JSON.parse(data);next(null,obj)}})})};module.exports=MDiMapGeocoder}.call(this,_dereq_("/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))},{"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":3,http:"7pDG/4",url:8}],3:[function(_dereq_,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],4:[function(_dereq_,module,exports){!function(global){!function(root){var freeExports=typeof exports=="object"&&exports;var freeModule=typeof module=="object"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global=="object"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var punycode,maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter="-",regexPunycode=/^xn--/,regexNonASCII=/[^ -~]/,regexSeparators=/\x2E|\u3002|\uFF0E|\uFF61/g,errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,key;function error(type){throw RangeError(errors[type])}function map(array,fn){var length=array.length;while(length--){array[length]=fn(array[length])}return array}function mapDomain(string,fn){return map(string.split(regexSeparators),fn).join(".")}function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){return map(array,function(value){var output="";if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value);return output}).join("")}function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22}if(codePoint-65<26){return codePoint-65}if(codePoint-97<26){return codePoint-97}return base}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5)}function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin)}return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0}for(j=0;j<basic;++j){if(input.charCodeAt(j)>=128){error("not-basic")}output.push(input.charCodeAt(j))}for(index=basic>0?basic+1:0;index<inputLength;){for(oldi=i,w=1,k=base;;k+=base){if(index>=inputLength){error("invalid-input")}digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow")}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digit<t){break}baseMinusT=base-t;if(w>floor(maxInt/baseMinusT)){error("overflow")}w*=baseMinusT}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow")}n+=floor(i/out);i%=out;output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<128){output.push(stringFromCharCode(currentValue))}}handledCPCount=basicLength=output.length;if(basicLength){output.push(delimiter)}while(handledCPCount<inputLength){for(m=maxInt,j=0;j<inputLength;++j){currentValue=input[j];if(currentValue>=n&¤tValue<m){m=currentValue}}handledCPCountPlusOne=handledCPCount+1;if(m-n>floor((maxInt-delta)/handledCPCountPlusOne)){error("overflow")}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<n&&++delta>maxInt){error("overflow")}if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q<t){break}qMinusT=q-t;baseMinusT=base-t;output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0)));q=floor(qMinusT/baseMinusT)}output.push(stringFromCharCode(digitToBasic(q,0)));bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength);delta=0;++handledCPCount}}++delta;++n}return output.join("")}function toUnicode(domain){return mapDomain(domain,function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string})}function toASCII(domain){return mapDomain(domain,function(string){return regexNonASCII.test(string)?"xn--"+encode(string):string})}punycode={version:"1.2.4",ucs2:{decode:ucs2decode,encode:ucs2encode},decode:decode,encode:encode,toASCII:toASCII,toUnicode:toUnicode};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define("punycode",function(){return punycode})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=punycode}else{for(key in punycode){punycode.hasOwnProperty(key)&&(freeExports[key]=punycode[key])}}}else{root.punycode=punycode}}(this)}.call(this,typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],5:[function(_dereq_,module,exports){"use strict";function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=function(qs,sep,eq,options){sep=sep||"&";eq=eq||"=";var obj={};if(typeof qs!=="string"||qs.length===0){return obj}var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1e3;if(options&&typeof options.maxKeys==="number"){maxKeys=options.maxKeys}var len=qs.length;if(maxKeys>0&&len>maxKeys){len=maxKeys}for(var i=0;i<len;++i){var x=qs[i].replace(regexp,"%20"),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1)}else{kstr=x;vstr=""}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v}else if(isArray(obj[k])){obj[k].push(v)}else{obj[k]=[obj[k],v]}}return obj};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"}},{}],6:[function(_dereq_,module,exports){"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){sep=sep||"&";eq=eq||"=";if(obj===null){obj=undefined}if(typeof obj==="object"){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return obj[k].map(function(v){return ks+encodeURIComponent(stringifyPrimitive(v))}).join(sep)}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]))}}).join(sep)}if(!name)return"";return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj))};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i<xs.length;i++){res.push(f(xs[i],i))}return res}var objectKeys=Object.keys||function(obj){var res=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))res.push(key)}return res}},{}],7:[function(_dereq_,module,exports){"use strict";exports.decode=exports.parse=_dereq_("./decode");exports.encode=exports.stringify=_dereq_("./encode")},{"./decode":5,"./encode":6}],8:[function(_dereq_,module,exports){!function(){"use strict";var punycode=_dereq_("punycode");exports.parse=urlParse;exports.resolve=urlResolve;exports.resolveObject=urlResolveObject;exports.format=urlFormat;var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","~","`"].concat(delims),autoEscape=["'"].concat(delims),nonHostChars=["%","/","?",";","#"].concat(unwise).concat(autoEscape),nonAuthChars=["/","@","?","#"].concat(delims),hostnameMaxLen=255,hostnamePartPattern=/^[a-zA-Z0-9][a-z0-9A-Z_-]{0,62}$/,hostnamePartStart=/^([a-zA-Z0-9][a-z0-9A-Z_-]{0,62})(.*)$/,unsafeProtocol={javascript:true,"javascript:":true},hostlessProtocol={javascript:true,"javascript:":true},pathedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"ftp:":true,"gopher:":true,"file:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true},querystring=_dereq_("querystring");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&typeof url==="object"&&url.href)return url;if(typeof url!=="string"){throw new TypeError("Parameter 'url' must be a string, not "+typeof url)}var out={},rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();out.protocol=lowerProto;rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);out.slashes=true}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var atSign=rest.indexOf("@");if(atSign!==-1){var auth=rest.slice(0,atSign);var hasAuth=true;for(var i=0,l=nonAuthChars.length;i<l;i++){if(auth.indexOf(nonAuthChars[i])!==-1){hasAuth=false;break}}if(hasAuth){out.auth=decodeURIComponent(auth);rest=rest.substr(atSign+1)}}var firstNonHost=-1;for(var i=0,l=nonHostChars.length;i<l;i++){var index=rest.indexOf(nonHostChars[i]);if(index!==-1&&(firstNonHost<0||index<firstNonHost))firstNonHost=index}if(firstNonHost!==-1){out.host=rest.substr(0,firstNonHost);rest=rest.substr(firstNonHost)}else{out.host=rest;rest=""}var p=parseHost(out.host);var keys=Object.keys(p);for(var i=0,l=keys.length;i<l;i++){var key=keys[i];out[key]=p[key]}out.hostname=out.hostname||"";var ipv6Hostname=out.hostname[0]==="["&&out.hostname[out.hostname.length-1]==="]";if(out.hostname.length>hostnameMaxLen){out.hostname=""}else if(!ipv6Hostname){var hostparts=out.hostname.split(/\./);for(var i=0,l=hostparts.length;i<l;i++){var part=hostparts[i];if(!part)continue;if(!part.match(hostnamePartPattern)){var newpart="";for(var j=0,k=part.length;j<k;j++){if(part.charCodeAt(j)>127){newpart+="x"}else{newpart+=part[j]}}if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2])}if(notHost.length){rest="/"+notHost.join(".")+rest}out.hostname=validParts.join(".");break}}}}out.hostname=out.hostname.toLowerCase();if(!ipv6Hostname){var domainArray=out.hostname.split(".");var newOut=[];for(var i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?"xn--"+punycode.encode(s):s)}out.hostname=newOut.join(".")}out.host=(out.hostname||"")+(out.port?":"+out.port:"");out.href+=out.host;if(ipv6Hostname){out.hostname=out.hostname.substr(1,out.hostname.length-2);if(rest[0]!=="/"){rest="/"+rest}}}if(!unsafeProtocol[lowerProto]){for(var i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i];var esc=encodeURIComponent(ae);if(esc===ae){esc=escape(ae)}rest=rest.split(ae).join(esc)}}var hash=rest.indexOf("#");if(hash!==-1){out.hash=rest.substr(hash);rest=rest.slice(0,hash)}var qm=rest.indexOf("?");if(qm!==-1){out.search=rest.substr(qm);out.query=rest.substr(qm+1);if(parseQueryString){out.query=querystring.parse(out.query)}rest=rest.slice(0,qm)}else if(parseQueryString){out.search="";out.query={}}if(rest)out.pathname=rest;if(slashedProtocol[proto]&&out.hostname&&!out.pathname){out.pathname="/"}if(out.pathname||out.search){out.path=(out.pathname?out.pathname:"")+(out.search?out.search:"")}out.href=urlFormat(out);return out}function urlFormat(obj){if(typeof obj==="string")obj=urlParse(obj);var auth=obj.auth||"";if(auth){auth=encodeURIComponent(auth);auth=auth.replace(/%3A/i,":");auth+="@"}var protocol=obj.protocol||"",pathname=obj.pathname||"",hash=obj.hash||"",host=false,query="";if(obj.host!==undefined){host=auth+obj.host}else if(obj.hostname!==undefined){host=auth+(obj.hostname.indexOf(":")===-1?obj.hostname:"["+obj.hostname+"]");if(obj.port){host+=":"+obj.port}}if(obj.query&&typeof obj.query==="object"&&Object.keys(obj.query).length){query=querystring.stringify(obj.query)}var search=obj.search||query&&"?"+query||"";if(protocol&&protocol.substr(-1)!==":")protocol+=":";if(obj.slashes||(!protocol||slashedProtocol[protocol])&&host!==false){host="//"+(host||"");if(pathname&&pathname.charAt(0)!=="/")pathname="/"+pathname}else if(!host){host=""}if(hash&&hash.charAt(0)!=="#")hash="#"+hash;if(search&&search.charAt(0)!=="?")search="?"+search;return protocol+host+pathname+search+hash}function urlResolve(source,relative){return urlFormat(urlResolveObject(source,relative))}function urlResolveObject(source,relative){if(!source)return relative;source=urlParse(urlFormat(source),false,true);relative=urlParse(urlFormat(relative),false,true);source.hash=relative.hash;if(relative.href===""){source.href=urlFormat(source);return source}if(relative.slashes&&!relative.protocol){relative.protocol=source.protocol;if(slashedProtocol[relative.protocol]&&relative.hostname&&!relative.pathname){relative.path=relative.pathname="/"}relative.href=urlFormat(relative);return relative}if(relative.protocol&&relative.protocol!==source.protocol){if(!slashedProtocol[relative.protocol]){relative.href=urlFormat(relative);return relative}source.protocol=relative.protocol;if(!relative.host&&!hostlessProtocol[relative.protocol]){var relPath=(relative.pathname||"").split("/");while(relPath.length&&!(relative.host=relPath.shift()));if(!relative.host)relative.host="";if(!relative.hostname)relative.hostname="";if(relPath[0]!=="")relPath.unshift("");if(relPath.length<2)relPath.unshift("");relative.pathname=relPath.join("/")}source.pathname=relative.pathname;source.search=relative.search;source.query=relative.query;source.host=relative.host||"";source.auth=relative.auth;source.hostname=relative.hostname||relative.host;source.port=relative.port;if(source.pathname!==undefined||source.search!==undefined){source.path=(source.pathname?source.pathname:"")+(source.search?source.search:"")}source.slashes=source.slashes||relative.slashes;source.href=urlFormat(source);return source}var isSourceAbs=source.pathname&&source.pathname.charAt(0)==="/",isRelAbs=relative.host!==undefined||relative.pathname&&relative.pathname.charAt(0)==="/",mustEndAbs=isRelAbs||isSourceAbs||source.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=source.pathname&&source.pathname.split("/")||[],relPath=relative.pathname&&relative.pathname.split("/")||[],psychotic=source.protocol&&!slashedProtocol[source.protocol];if(psychotic){delete source.hostname;delete source.port;if(source.host){if(srcPath[0]==="")srcPath[0]=source.host;else srcPath.unshift(source.host)}delete source.host;if(relative.protocol){delete relative.hostname;delete relative.port;if(relative.host){if(relPath[0]==="")relPath[0]=relative.host;else relPath.unshift(relative.host)}delete relative.host}mustEndAbs=mustEndAbs&&(relPath[0]===""||srcPath[0]==="")}if(isRelAbs){source.host=relative.host||relative.host===""?relative.host:source.host;source.hostname=relative.hostname||relative.hostname===""?relative.hostname:source.hostname;source.search=relative.search;source.query=relative.query;srcPath=relPath}else if(relPath.length){if(!srcPath)srcPath=[];srcPath.pop();srcPath=srcPath.concat(relPath);source.search=relative.search;source.query=relative.query}else if("search"in relative){if(psychotic){source.hostname=source.host=srcPath.shift();var authInHost=source.host&&source.host.indexOf("@")>0?source.host.split("@"):false;if(authInHost){source.auth=authInHost.shift();source.host=source.hostname=authInHost.shift()}}source.search=relative.search;source.query=relative.query;if(source.pathname!==undefined||source.search!==undefined){source.path=(source.pathname?source.pathname:"")+(source.search?source.search:"")}source.href=urlFormat(source);return source}if(!srcPath.length){delete source.pathname;if(!source.search){source.path="/"+source.search}else{delete source.path}source.href=urlFormat(source);return source}var last=srcPath.slice(-1)[0];var hasTrailingSlash=(source.host||relative.host)&&(last==="."||last==="..")||last==="";var up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=="."){srcPath.splice(i,1)}else if(last===".."){srcPath.splice(i,1);up++}else if(up){srcPath.splice(i,1);up--}}if(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift("..")}}if(mustEndAbs&&srcPath[0]!==""&&(!srcPath[0]||srcPath[0].charAt(0)!=="/")){srcPath.unshift("")}if(hasTrailingSlash&&srcPath.join("/").substr(-1)!=="/"){srcPath.push("")}var isAbsolute=srcPath[0]===""||srcPath[0]&&srcPath[0].charAt(0)==="/";if(psychotic){source.hostname=source.host=isAbsolute?"":srcPath.length?srcPath.shift():"";var authInHost=source.host&&source.host.indexOf("@")>0?source.host.split("@"):false;if(authInHost){source.auth=authInHost.shift();source.host=source.hostname=authInHost.shift()}}mustEndAbs=mustEndAbs||source.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift("")}source.pathname=srcPath.join("/");if(source.pathname!==undefined||source.search!==undefined){source.path=(source.pathname?source.pathname:"")+(source.search?source.search:"")}source.auth=relative.auth||source.auth;source.slashes=source.slashes||relative.slashes;source.href=urlFormat(source);return source}function parseHost(host){var out={};var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){out.port=port.substr(1)}host=host.substr(0,host.length-port.length)}if(host)out.hostname=host;return out}}()},{punycode:4,querystring:7}]},{},[1])(1)}); | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.MDiMapGeocoder=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){module.exports=_dereq_("./lib/MDiMapGeocoder")},{"./lib/MDiMapGeocoder":2}],2:[function(_dereq_,module,exports){!function(process){var url=_dereq_("url");function MDiMapGeocoder(){this.address_fields=["Street","City","State","ZIP"];this.defaults={browser:false,wkid:4326,get_url:{protocol:"http:",host:"geodata.md.gov",pathname:"imap/rest/services/GeocodeServices/MD_CompositeLocatorWithZIPCodeCentroids/GeocodeServer/findAddressCandidates"}};this.options=JSON.parse(JSON.stringify(this.defaults));if(process.title==="node"){this.browser=false;http=_dereq_("http")}else{this.browser=true}}MDiMapGeocoder.prototype.search=function(term,options,next){if(arguments.length===2){if(typeof options==="function"){next=options}this.options=JSON.parse(JSON.stringify(this.defaults))}else if(arguments.length===3){if(options){for(var option in options){this.options[option]=options[option]}}}var query={outSR:this.options.wkid,f:"json"};if(typeof term==="string"){query.SingleLine=term}else if(typeof term==="object"){for(var i=0;i<this.address_fields.length;i++){var field=this.address_fields[i];if(term[field]){query[field]=term[field]}}}var get_url=this.options.get_url;get_url.query=query;if(this.browser){browserGet(get_url,next)}else{nodeGet(get_url,next)}};function browserGet(get_url,next){get_url.query.callback="_MDiMapGeocoder_cb";window._MDiMapGeocoder_cb=function(data){next(null,data)};get_url=url.format(get_url);var script=document.createElement("script");script.onload=function(){document.head.removeChild(this)};script.src=get_url;document.getElementsByTagName("head")[0].appendChild(script)}function nodeGet(get_url,next){get_url=url.format(get_url);http.get(get_url,function(res){var data="";res.on("data",function(chunk){data+=chunk});res.on("end",function(err){if(err){next(err);return}else{var obj=JSON.parse(data);next(null,obj)}})})}module.exports=new MDiMapGeocoder}.call(this,_dereq_("lppjwH"))},{http:"7pDG/4",lppjwH:3,url:8}],3:[function(_dereq_,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],4:[function(_dereq_,module,exports){!function(global){!function(root){var freeExports=typeof exports=="object"&&exports;var freeModule=typeof module=="object"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global=="object"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var punycode,maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter="-",regexPunycode=/^xn--/,regexNonASCII=/[^ -~]/,regexSeparators=/\x2E|\u3002|\uFF0E|\uFF61/g,errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,key;function error(type){throw RangeError(errors[type])}function map(array,fn){var length=array.length;while(length--){array[length]=fn(array[length])}return array}function mapDomain(string,fn){return map(string.split(regexSeparators),fn).join(".")}function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){return map(array,function(value){var output="";if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value);return output}).join("")}function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22}if(codePoint-65<26){return codePoint-65}if(codePoint-97<26){return codePoint-97}return base}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5)}function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin)}return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0}for(j=0;j<basic;++j){if(input.charCodeAt(j)>=128){error("not-basic")}output.push(input.charCodeAt(j))}for(index=basic>0?basic+1:0;index<inputLength;){for(oldi=i,w=1,k=base;;k+=base){if(index>=inputLength){error("invalid-input")}digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow")}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digit<t){break}baseMinusT=base-t;if(w>floor(maxInt/baseMinusT)){error("overflow")}w*=baseMinusT}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow")}n+=floor(i/out);i%=out;output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<128){output.push(stringFromCharCode(currentValue))}}handledCPCount=basicLength=output.length;if(basicLength){output.push(delimiter)}while(handledCPCount<inputLength){for(m=maxInt,j=0;j<inputLength;++j){currentValue=input[j];if(currentValue>=n&¤tValue<m){m=currentValue}}handledCPCountPlusOne=handledCPCount+1;if(m-n>floor((maxInt-delta)/handledCPCountPlusOne)){error("overflow")}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<n&&++delta>maxInt){error("overflow")}if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q<t){break}qMinusT=q-t;baseMinusT=base-t;output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0)));q=floor(qMinusT/baseMinusT)}output.push(stringFromCharCode(digitToBasic(q,0)));bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength);delta=0;++handledCPCount}}++delta;++n}return output.join("")}function toUnicode(domain){return mapDomain(domain,function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string})}function toASCII(domain){return mapDomain(domain,function(string){return regexNonASCII.test(string)?"xn--"+encode(string):string})}punycode={version:"1.2.4",ucs2:{decode:ucs2decode,encode:ucs2encode},decode:decode,encode:encode,toASCII:toASCII,toUnicode:toUnicode};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define("punycode",function(){return punycode})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=punycode}else{for(key in punycode){punycode.hasOwnProperty(key)&&(freeExports[key]=punycode[key])}}}else{root.punycode=punycode}}(this)}.call(this,typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],5:[function(_dereq_,module,exports){"use strict";function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=function(qs,sep,eq,options){sep=sep||"&";eq=eq||"=";var obj={};if(typeof qs!=="string"||qs.length===0){return obj}var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1e3;if(options&&typeof options.maxKeys==="number"){maxKeys=options.maxKeys}var len=qs.length;if(maxKeys>0&&len>maxKeys){len=maxKeys}for(var i=0;i<len;++i){var x=qs[i].replace(regexp,"%20"),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1)}else{kstr=x;vstr=""}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v}else if(isArray(obj[k])){obj[k].push(v)}else{obj[k]=[obj[k],v]}}return obj};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"}},{}],6:[function(_dereq_,module,exports){"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){sep=sep||"&";eq=eq||"=";if(obj===null){obj=undefined}if(typeof obj==="object"){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return map(obj[k],function(v){return ks+encodeURIComponent(stringifyPrimitive(v))}).join(sep)}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]))}}).join(sep)}if(!name)return"";return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj))};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i<xs.length;i++){res.push(f(xs[i],i))}return res}var objectKeys=Object.keys||function(obj){var res=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))res.push(key)}return res}},{}],7:[function(_dereq_,module,exports){"use strict";exports.decode=exports.parse=_dereq_("./decode");exports.encode=exports.stringify=_dereq_("./encode")},{"./decode":5,"./encode":6}],8:[function(_dereq_,module,exports){var punycode=_dereq_("punycode");exports.parse=urlParse;exports.resolve=urlResolve;exports.resolveObject=urlResolveObject;exports.format=urlFormat;exports.Url=Url;function Url(){this.protocol=null;this.slashes=null;this.auth=null;this.host=null;this.port=null;this.hostname=null;this.hash=null;this.search=null;this.query=null;this.pathname=null;this.path=null;this.href=null}var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:true,"javascript:":true},hostlessProtocol={javascript:true,"javascript:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true},querystring=_dereq_("querystring");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url;u.parse(url,parseQueryString,slashesDenoteHost);return u}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url)){throw new TypeError("Parameter 'url' must be a string, not "+typeof url)}var rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();this.protocol=lowerProto;rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var hostEnd=-1;for(var i=0;i<hostEndingChars.length;i++){var hec=rest.indexOf(hostEndingChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}var auth,atSign;if(hostEnd===-1){atSign=rest.lastIndexOf("@")}else{atSign=rest.lastIndexOf("@",hostEnd)}if(atSign!==-1){auth=rest.slice(0,atSign);rest=rest.slice(atSign+1);this.auth=decodeURIComponent(auth)}hostEnd=-1;for(var i=0;i<nonHostChars.length;i++){var hec=rest.indexOf(nonHostChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}if(hostEnd===-1)hostEnd=rest.length;this.host=rest.slice(0,hostEnd);rest=rest.slice(hostEnd);this.parseHost();this.hostname=this.hostname||"";var ipv6Hostname=this.hostname[0]==="["&&this.hostname[this.hostname.length-1]==="]";if(!ipv6Hostname){var hostparts=this.hostname.split(/\./);for(var i=0,l=hostparts.length;i<l;i++){var part=hostparts[i];if(!part)continue;if(!part.match(hostnamePartPattern)){var newpart="";for(var j=0,k=part.length;j<k;j++){if(part.charCodeAt(j)>127){newpart+="x"}else{newpart+=part[j]}}if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2])}if(notHost.length){rest="/"+notHost.join(".")+rest}this.hostname=validParts.join(".");break}}}}if(this.hostname.length>hostnameMaxLen){this.hostname=""}else{this.hostname=this.hostname.toLowerCase()}if(!ipv6Hostname){var domainArray=this.hostname.split(".");var newOut=[];for(var i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?"xn--"+punycode.encode(s):s)}this.hostname=newOut.join(".")}var p=this.port?":"+this.port:"";var h=this.hostname||"";this.host=h+p;this.href+=this.host;if(ipv6Hostname){this.hostname=this.hostname.substr(1,this.hostname.length-2);if(rest[0]!=="/"){rest="/"+rest}}}if(!unsafeProtocol[lowerProto]){for(var i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i];var esc=encodeURIComponent(ae);if(esc===ae){esc=escape(ae)}rest=rest.split(ae).join(esc)}}var hash=rest.indexOf("#");if(hash!==-1){this.hash=rest.substr(hash);rest=rest.slice(0,hash)}var qm=rest.indexOf("?");if(qm!==-1){this.search=rest.substr(qm);this.query=rest.substr(qm+1);if(parseQueryString){this.query=querystring.parse(this.query)}rest=rest.slice(0,qm)}else if(parseQueryString){this.search="";this.query={}}if(rest)this.pathname=rest;if(slashedProtocol[lowerProto]&&this.hostname&&!this.pathname){this.pathname="/"}if(this.pathname||this.search){var p=this.pathname||"";var s=this.search||"";this.path=p+s}this.href=this.format();return this};function urlFormat(obj){if(isString(obj))obj=urlParse(obj);if(!(obj instanceof Url))return Url.prototype.format.call(obj);return obj.format()}Url.prototype.format=function(){var auth=this.auth||"";if(auth){auth=encodeURIComponent(auth);auth=auth.replace(/%3A/i,":");auth+="@"}var protocol=this.protocol||"",pathname=this.pathname||"",hash=this.hash||"",host=false,query="";if(this.host){host=auth+this.host}else if(this.hostname){host=auth+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]");if(this.port){host+=":"+this.port}}if(this.query&&isObject(this.query)&&Object.keys(this.query).length){query=querystring.stringify(this.query)}var search=this.search||query&&"?"+query||"";if(protocol&&protocol.substr(-1)!==":")protocol+=":";if(this.slashes||(!protocol||slashedProtocol[protocol])&&host!==false){host="//"+(host||"");if(pathname&&pathname.charAt(0)!=="/")pathname="/"+pathname}else if(!host){host=""}if(hash&&hash.charAt(0)!=="#")hash="#"+hash;if(search&&search.charAt(0)!=="?")search="?"+search;pathname=pathname.replace(/[?#]/g,function(match){return encodeURIComponent(match)});search=search.replace("#","%23");return protocol+host+pathname+search+hash};function urlResolve(source,relative){return urlParse(source,false,true).resolve(relative)}Url.prototype.resolve=function(relative){return this.resolveObject(urlParse(relative,false,true)).format()};function urlResolveObject(source,relative){if(!source)return relative;return urlParse(source,false,true).resolveObject(relative)}Url.prototype.resolveObject=function(relative){if(isString(relative)){var rel=new Url;rel.parse(relative,false,true);relative=rel}var result=new Url;Object.keys(this).forEach(function(k){result[k]=this[k]},this);result.hash=relative.hash;if(relative.href===""){result.href=result.format();return result}if(relative.slashes&&!relative.protocol){Object.keys(relative).forEach(function(k){if(k!=="protocol")result[k]=relative[k]});if(slashedProtocol[result.protocol]&&result.hostname&&!result.pathname){result.path=result.pathname="/"}result.href=result.format();return result}if(relative.protocol&&relative.protocol!==result.protocol){if(!slashedProtocol[relative.protocol]){Object.keys(relative).forEach(function(k){result[k]=relative[k]});result.href=result.format();return result}result.protocol=relative.protocol;if(!relative.host&&!hostlessProtocol[relative.protocol]){var relPath=(relative.pathname||"").split("/");while(relPath.length&&!(relative.host=relPath.shift()));if(!relative.host)relative.host="";if(!relative.hostname)relative.hostname="";if(relPath[0]!=="")relPath.unshift("");if(relPath.length<2)relPath.unshift("");result.pathname=relPath.join("/")}else{result.pathname=relative.pathname}result.search=relative.search;result.query=relative.query;result.host=relative.host||"";result.auth=relative.auth;result.hostname=relative.hostname||relative.host;result.port=relative.port;if(result.pathname||result.search){var p=result.pathname||"";var s=result.search||"";result.path=p+s}result.slashes=result.slashes||relative.slashes;result.href=result.format();return result}var isSourceAbs=result.pathname&&result.pathname.charAt(0)==="/",isRelAbs=relative.host||relative.pathname&&relative.pathname.charAt(0)==="/",mustEndAbs=isRelAbs||isSourceAbs||result.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=result.pathname&&result.pathname.split("/")||[],relPath=relative.pathname&&relative.pathname.split("/")||[],psychotic=result.protocol&&!slashedProtocol[result.protocol];if(psychotic){result.hostname="";result.port=null;if(result.host){if(srcPath[0]==="")srcPath[0]=result.host;else srcPath.unshift(result.host)}result.host="";if(relative.protocol){relative.hostname=null;relative.port=null;if(relative.host){if(relPath[0]==="")relPath[0]=relative.host;else relPath.unshift(relative.host)}relative.host=null}mustEndAbs=mustEndAbs&&(relPath[0]===""||srcPath[0]==="")}if(isRelAbs){result.host=relative.host||relative.host===""?relative.host:result.host;result.hostname=relative.hostname||relative.hostname===""?relative.hostname:result.hostname;result.search=relative.search;result.query=relative.query;srcPath=relPath}else if(relPath.length){if(!srcPath)srcPath=[];srcPath.pop();srcPath=srcPath.concat(relPath);result.search=relative.search;result.query=relative.query}else if(!isNullOrUndefined(relative.search)){if(psychotic){result.hostname=result.host=srcPath.shift();var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}result.search=relative.search;result.query=relative.query;if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.href=result.format();return result}if(!srcPath.length){result.pathname=null;if(result.search){result.path="/"+result.search}else{result.path=null}result.href=result.format();return result}var last=srcPath.slice(-1)[0];var hasTrailingSlash=(result.host||relative.host)&&(last==="."||last==="..")||last==="";var up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=="."){srcPath.splice(i,1)}else if(last===".."){srcPath.splice(i,1);up++}else if(up){srcPath.splice(i,1);up--}}if(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift("..")}}if(mustEndAbs&&srcPath[0]!==""&&(!srcPath[0]||srcPath[0].charAt(0)!=="/")){srcPath.unshift("")}if(hasTrailingSlash&&srcPath.join("/").substr(-1)!=="/"){srcPath.push("")}var isAbsolute=srcPath[0]===""||srcPath[0]&&srcPath[0].charAt(0)==="/";if(psychotic){result.hostname=result.host=isAbsolute?"":srcPath.length?srcPath.shift():"";var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}mustEndAbs=mustEndAbs||result.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift("")}if(!srcPath.length){result.pathname=null;result.path=null}else{result.pathname=srcPath.join("/")}if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.auth=relative.auth||result.auth;result.slashes=result.slashes||relative.slashes;result.href=result.format();return result};Url.prototype.parseHost=function(){var host=this.host;var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){this.port=port.substr(1)}host=host.substr(0,host.length-port.length)}if(host)this.hostname=host};function isString(arg){return typeof arg==="string"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isNull(arg){return arg===null}function isNullOrUndefined(arg){return arg==null}},{punycode:4,querystring:7}]},{},[1])(1)}); |
@@ -1,1 +0,1 @@ | ||
module.exports = require('./lib/MDiMapGeocoder'); | ||
module.exports = require('./lib/MDiMapGeocoder') |
var url = require('url') | ||
function MDiMapGeocoder(options) { | ||
function MDiMapGeocoder() { | ||
this.address_fields = ['Street', 'City', 'State', 'ZIP'] | ||
this.options = { | ||
this.defaults = { | ||
browser: false, | ||
@@ -16,17 +16,27 @@ wkid: 4326, | ||
if(options) { | ||
for(var option in options){ | ||
this.options[option] = options[option] | ||
} | ||
} | ||
this.options = JSON.parse(JSON.stringify(this.defaults)) | ||
if (process.title === 'node') { | ||
this.options.browser = false | ||
this.browser = false | ||
http = require('http') | ||
} else { | ||
this.options.browser = true | ||
this.browser = true | ||
} | ||
} | ||
MDiMapGeocoder.prototype.search = function(term, next) { | ||
MDiMapGeocoder.prototype.search = function(term, options, next) { | ||
if (arguments.length === 2) { | ||
if (typeof options === 'function') { | ||
next = options | ||
} | ||
this.options = JSON.parse(JSON.stringify(this.defaults)) | ||
} else if (arguments.length === 3) { | ||
if(options) { | ||
for(var option in options){ | ||
this.options[option] = options[option] | ||
} | ||
} | ||
} | ||
var query = { | ||
@@ -51,10 +61,10 @@ outSR: this.options.wkid, | ||
if(this.options.browser){ | ||
this.browserGet(get_url, next) | ||
if(this.browser){ | ||
browserGet(get_url, next) | ||
} else { | ||
this.nodeGet(get_url, next) | ||
nodeGet(get_url, next) | ||
} | ||
} | ||
MDiMapGeocoder.prototype.browserGet = function(get_url, next) { | ||
function browserGet(get_url, next) { | ||
get_url.query.callback = '_MDiMapGeocoder_cb' | ||
@@ -74,5 +84,4 @@ window._MDiMapGeocoder_cb = function(data){ | ||
MDiMapGeocoder.prototype.nodeGet = function(get_url, next) { | ||
function nodeGet(get_url, next) { | ||
get_url = url.format(get_url) | ||
console.log(get_url) | ||
http.get(get_url, function(res){ | ||
@@ -96,2 +105,2 @@ var data = '' | ||
module.exports = MDiMapGeocoder | ||
module.exports = new MDiMapGeocoder() |
{ | ||
"name": "mdimapgeocoder", | ||
"version": "0.1.3", | ||
"version": "0.1.4", | ||
"description": "mdimapgeocoder ===============", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
MDiMapGeocoder | ||
=============== | ||
A library to use [Maryland's cascading geocoder](http://mdimap.us/ArcGIS/rest/services/GeocodeServices/MD.State.MDCascadingLocatorWithZIPCodes/GeocodeServer/) in Node.js and the browser | ||
A library to use [Maryland's cascading geocoder](http://geodata.md.gov/imap/rest/services/GeocodeServices/MD_CompositeLocatorWithZIPCodeCentroids/GeocodeServer) in Node.js and the browser | ||
### Use in Node.js | ||
##Installation | ||
###Node.js | ||
* Run `npm install mdimapgeocoder` | ||
```javascript | ||
npm install mdimapgeocoder | ||
var MDiMapGeocoder = require('mdimapgeocoder') | ||
``` | ||
### Use in Browser | ||
###Browser | ||
* Download build/MDiMapGeocoder.min.js | ||
@@ -21,9 +23,17 @@ | ||
##Usage | ||
```javascript | ||
MDiMapGeocoder.search(address, options?, callback) | ||
``` | ||
- **address** - string containing full address or object containing Street, City, State, ZIP | ||
- **options** - optional object containing search options (see below) | ||
- **callback** - function(error, response) {} | ||
### Example | ||
```javascript | ||
var geocoder = new MDiMapGeocoder() | ||
//Single Line | ||
geocoder.search('1101 Camden Ave, Salisbury MD 21801', function(err, res){ | ||
//Single Line | ||
MDiMapGeocoder.search('1101 Camden Ave, Salisbury MD 21801', function(err, res){ | ||
// example response | ||
@@ -43,3 +53,3 @@ res.candidates[0] = | ||
//Address Fields | ||
geocoder.search({ | ||
MDiMapGeocoder.search({ | ||
Street: '1101 Camden Ave', | ||
@@ -55,8 +65,7 @@ City: 'Salisbury', | ||
### Options | ||
* wkid - Specify WKID to return. Default 4326 | ||
- **wkid** - Specify WKID to return. Default 4326 | ||
```javascript | ||
var geocoder = new MDiMapGeocoder({ | ||
wkid: 26985 // return coordinates in MD state plane | ||
}) | ||
MDiMapGeocoder.search('1101 Camden Ave, Salisbury MD 21801', {wkid: 26985}, callback) | ||
// "location": {"x":521564.8398928333,"y":75950.13939312194} | ||
``` |
@@ -1,6 +0,4 @@ | ||
var Geocoder = require('../index.js') | ||
var MDiMapGeocoder = require('../index.js') | ||
, test = require("tap").test | ||
var geocoder = new Geocoder() | ||
function cb(err, res){ | ||
@@ -10,4 +8,5 @@ console.log(err, res.candidates[0]) | ||
geocoder.search('1101 Camden Ave, Salisbury MD 21801', cb) | ||
geocoder.search({ | ||
MDiMapGeocoder.search('1101 Camden Ave, Salisbury MD 21801', cb) | ||
MDiMapGeocoder.search('1101 Camden Ave, Salisbury MD 21801', {wkid: 26985}, cb) | ||
MDiMapGeocoder.search({ | ||
Street: '1101 Camden Ave', | ||
@@ -14,0 +13,0 @@ City: 'Salisbury', |
Sorry, the diff of this file is not supported yet
76261
1473
68