Revision: 9909
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 28, 2008 20:47 by miohtama
Initial Code
/** * @projectDescription Poly9's polyvalent URLParser class * * Modified to URL reconstruction by Mikko Ohtamaa. * * @authorDenis Laprise <[email protected]>, Mikko Ohtamaa <[email protected]> * * @version 0.2 * @namespace Poly9 * * How to query URL: * * <pre> * var p = new Poly9.URLParser('http://user:[email protected]/pathname?arguments=1#fragment'); * p.getHost() == 'poly9.com'; * p.getProtocol() == 'http'; * p.getPathname() == '/pathname'; * p.getQuerystring() == 'arguments=1'; * p.getFragment() == 'fragment'; * p.getUsername() == 'user'; * p.getPassword() == 'password'; * </pre> * * How to manipulate URL: * * <pre> * var p = new Poly9.URLParser("http://localhost:8080/path); * * p.setQuerystring("foo=bar"); * p.setFragment("anchor"); * p.setPort(7070); * * var url = p.getURL() // http://localhost:7070/path?foo=bar#anchor * </pre> * * See the unit test file for more examples. * URLParser is freely distributable under the terms of an MIT-style license. * * The orignal code: https://code.poly9.com/trac/browser/urlparser/urlparser.js * * http://poly9.com * * http://www.twinapex.com */ if (typeof Poly9 == 'undefined') var Poly9 = {}; /** * Creates an URLParser instance * * @classDescription Creates an URLParser instance * @return {Object} return an URLParser object * @param {String} url The url to parse * @constructor * @exception {String} Throws an exception if the specified url is invalid */ Poly9.URLParser = function(url) { this._fields = {'Username' : 4, 'Password' : 5, 'Port' : 7, 'Protocol' : 2, 'Host' : 6, 'Pathname' : 8, 'URL' : 0, 'Querystring' : 9, 'Fragment' : 10}; this._values = {}; this._regex = null; this.version = 0.2; // MO: Fixed fragments are allowed to contain dash this._regex = /^((\w+):\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?([^#]*)/; for (var f in this._fields) { this['get' + f] = this._makeGetter(f); this['set' + f] = this._makeSetter(f); } // Patch in getURL, since otherwise field generators override this this.getURL = this._getURL; if (typeof url != 'undefined') this._parse(url); } /** * @method * @param {String} url The url to parse * @exception {String} Throws an exception if the specified url is invalid */ Poly9.URLParser.prototype.setURL = function(url) { this._parse(url); } /** * Rebuild the URL to string form * * @method * @return {String} Reconstructed full URL */ Poly9.URLParser.prototype._getURL = function() { var s; s = this.getProtocol(); s += "://" if(this.getUsername() != '') { s += this.getUsername(); } if(this.getPassword() != '') { s += ":"; s += this.getPassword(); } if(this.getUsername() != '') { s += "@"; } s += this.getHost(); if(this.getPort() != '') { s += ":" + this.getPort(); } s += this.getPathname(); if(this.getQuerystring() != '') { s += "?" + this.getQuerystring(); } if(this.getFragment() != '') { s += "#" + this.getFragment(); } return s; } Poly9.URLParser.prototype._initValues = function() { for(var f in this._fields) this._values[f] = ''; } Poly9.URLParser.prototype._parse = function(url) { this._initValues(); var r = this._regex.exec(url); if (!r) throw "DPURLParser::_parse -> Invalid URL" for(var f in this._fields) if (typeof r[this._fields[f]] != 'undefined') this._values[f] = r[this._fields[f]]; } Poly9.URLParser.prototype._makeGetter = function(field) { return function() { return this._values[field]; } } Poly9.URLParser.prototype._makeSetter = function(field) { return function(value) { this._values[field] = value; } }
Initial URL
http://blog.redinnovation.com/2008/11/29/python-like-urlparser-module-for-javascript/
Initial Description
Split and manipulate URLs easily with this module. It has similar interface to Python's urlparse library. This is patched and modified version from Denis's orignal implementation.
Initial Title
urlparse - Python-like URL parser and manipulator
Initial Tags
url, query
Initial Language
JavaScript