Skip to content

Commit

Permalink
enable to configure hash
Browse files Browse the repository at this point in the history
  • Loading branch information
sousk committed Aug 27, 2009
1 parent 2ac0dfa commit 43547c1
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 83 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "vendor/qunit-spec"]
path = vendor/qunit-spec
url = git://github.com/sousk/qunit-spec.git
157 changes: 74 additions & 83 deletions jquery.parsequery.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
/**
* edit by sousk.net
*
* http://docs.jquery.com/Plugins/Authoring
*/

/**
Expand All @@ -14,14 +12,25 @@
* @version 2.1.5
*
**/
new function(settings) {
// Various Settings
var $separator = settings.separator || '&';
var $spaces = settings.spaces === false ? false : true;
var $suffix = settings.suffix === false ? '' : '[]';
var $prefix = settings.prefix === false ? false : true;
var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
var $numbers = settings.numbers === false ? false : true;
new function(settings) {

var $separator;
var $spaces;
var $suffix;
var $prefix;
var $hash;
var $numbers;
assign_settings(settings);

function assign_settings(settings) {
$hash = (typeof settings.hash == 'undefined') ? '?' : settings.hash;
$prefix = settings.prefix || null;

$separator = settings.separator || '&';
$spaces = settings.spaces === false ? false : true;
$suffix = settings.suffix === false ? '' : '[]';
$numbers = settings.numbers === false ? false : true;
};

jQuery.parsequery = new function() {
var is = function(o, t) {
Expand Down Expand Up @@ -77,50 +86,50 @@ new function(settings) {
return target;
};

var queryObject = function(a) {
var queryObject = function(a, settings) {
if (settings) assign_settings(settings);

var self = this;
self.keys = {};

if (a.queryObject) {
jQuery.each(a.get(), function(key, val) {
self.SET(key, val);
});
} else {
jQuery.each(arguments, function(i, v) {
var q = "" + this;
q = q.replace(/^[?#]/,''); // remove any leading ? || #
q = q.replace(/[;&]$/,''); // remove any trailing & || ;
if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces

jQuery.each(q.split(/[&;]/), function(){
var key = decodeURIComponent(this.split('=')[0]);
// var val = decodeURIComponent(this.split('=')[1]);
var val = (function(keyval, key) {
if (key) {
var val = keyval.split('=')[1];
return val ? decodeURIComponent(val) : true;
}
else {
return null;
}
})(this, key);

if (!key) return;

if ($numbers) {
if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
val = parseFloat(val);
else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
val = parseInt(val, 10);
}
else {
var q = "" + a;
q = q.replace(/^[?#]/,''); // remove any leading ? || #
q = q.replace(/[;&]$/,''); // remove any trailing & || ;
if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces

jQuery.each(q.split(/[&;]/), function(){
var key = decodeURIComponent(this.split('=')[0]);
var val = (function(keyval, key) {
if (key) {
var val = keyval.split('=')[1];
return val ? decodeURIComponent(val) : true;
}

val = (!val && val !== 0) ? true : val;

if (val !== false && val !== true && typeof val != 'number')
val = val;

self.SET(key, val);
});
else {
return null;
}
})(this, key);

if (!key) return;

if ($numbers) {
if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
val = parseFloat(val);
else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
val = parseInt(val, 10);
}

val = (!val && val !== 0) ? true : val;

if (val !== false && val !== true && typeof val != 'number')
val = val;

self.SET(key, val);
});
}
return self;
Expand Down Expand Up @@ -181,9 +190,7 @@ new function(settings) {
return this.copy().EMPTY();
},
copy: function() {
var q = new queryObject(this);
q.setBase(this.getBase());
return q;
return new queryObject(this);
},
COMPACT: function() {
function build(orig) {
Expand All @@ -208,13 +215,6 @@ new function(settings) {
compact: function() {
return this.copy().COMPACT();
},
setBase: function(base_url) {
this.base_url = base_url;
return this;
},
getBase: function() {
return this.base_url;
},
toString: function() {
var i = 0, queryString = [], chunks = [], self = this;
var addFields = function(arr, key, value) {
Expand Down Expand Up @@ -242,38 +242,29 @@ new function(settings) {

if (chunks.length > 0) queryString.push($hash);
queryString.push(chunks.join($separator));

return (this.getBase() || "") + queryString.join("");
return ($prefix || '') + queryString.join("");
}
};

// return new queryObject(location.search, location.hash);
return function(url) {
function parse_url() {
var m = url.match(/^(.*?)[?](.+?)(?:#.+)?$/);
return m ? {
base: m[1],
search: m[2]
} : {
base: url,
search: ""
};
function parse_url(url) {
var m = url && url.match(/^(.*?)[?](.+?)(?:#.+)?$/);
return m ? {
base: m[1],
search: m[2]
} : {
base: url,
search: ""
};
};

return function(url, settings) {
if (!settings) settings = {};

var u = parse_url(url);
var q = new queryObject(u.search);
q.setBase(u.base);
return q;
if (u.base) settings.prefix = u.base;

assign_settings(settings);
return new queryObject(u.search);
};
// function(url) {
// // var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
// var bs = (function() {
// var p = url.split('?');
// return p.length > 1 ? {base: p.shift(), search:p.join()} : {base:null, search:p[0]};
// })();
//
// var q = new queryObject(bs.search);
// if (bs.base) q.setBase(bs.base);
// return q;
// };
};
}(jQuery.parsequery || {}); // Pass in jQuery.query as settings object
12 changes: 12 additions & 0 deletions test/parsequery/test_parsequery.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ function test_parsequery() {
});
}

//----------------------------------------------------------
module("basement");
//----------------------------------------------------------
test("init with empty param", function() {
ok(q = $.parsequery(undefined));
equals(q.set('foo', 'bar').toString(), "?foo=bar");
});
test("parameters", function() {
ok($.parsequery('', {hash: ''}));
equals(q.set('foo', 'bar').toString(), "foo=bar");
});

//----------------------------------------------------------
module("url + parameter");
//----------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions vendor/qunit-spec
Submodule qunit-spec added at a541cf

0 comments on commit 43547c1

Please sign in to comment.