| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- //MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.
- /*
- ---
- script: More.js
- description: MooTools More
- license: MIT-style license
- authors:
- - Guillermo Rauch
- - Thomas Aylott
- - Scott Kyle
- requires:
- - core:1.2.4/MooTools
- provides: [MooTools.More]
- ...
- */
- MooTools.More = {
- 'version': '1.2.4.4',
- 'build': '6f6057dc645fdb7547689183b2311063bd653ddf'
- };
- /*
- ---
- script: String.QueryString.js
- description: Methods for dealing with URI query strings.
- license: MIT-style license
- authors:
- - Sebastian Markbåge, Aaron Newton, Lennart Pilon, Valerio Proietti
- requires:
- - core:1.2.4/Array
- - core:1.2.4/String
- - /MooTools.More
- provides: [String.QueryString]
- ...
- */
- String.implement({
- parseQueryString: function(){
- var vars = this.split(/[&;]/), res = {};
- if (vars.length) vars.each(function(val){
- var index = val.indexOf('='),
- keys = index < 0 ? [''] : val.substr(0, index).match(/[^\]\[]+/g),
- value = decodeURIComponent(val.substr(index + 1)),
- obj = res;
- keys.each(function(key, i){
- var current = obj[key];
- if(i < keys.length - 1)
- obj = obj[key] = current || {};
- else if($type(current) == 'array')
- current.push(value);
- else
- obj[key] = $defined(current) ? [current, value] : value;
- });
- });
- return res;
- },
- cleanQueryString: function(method){
- return this.split('&').filter(function(val){
- var index = val.indexOf('='),
- key = index < 0 ? '' : val.substr(0, index),
- value = val.substr(index + 1);
- return method ? method.run([key, value]) : $chk(value);
- }).join('&');
- }
- });
- /*
- ---
- script: URI.js
- description: Provides methods useful in managing the window location and uris.
- license: MIT-style license
- authors:
- - Sebastian Markbåge
- - Aaron Newton
- requires:
- - core:1.2.4/Selectors
- - /String.QueryString
- provides: URI
- ...
- */
- var URI = new Class({
- Implements: Options,
- options: {
- /*base: false*/
- },
- regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
- parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'],
- schemes: {http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0},
- initialize: function(uri, options){
- this.setOptions(options);
- var base = this.options.base || URI.base;
- if(!uri) uri = base;
-
- if (uri && uri.parsed) this.parsed = $unlink(uri.parsed);
- else this.set('value', uri.href || uri.toString(), base ? new URI(base) : false);
- },
- parse: function(value, base){
- var bits = value.match(this.regex);
- if (!bits) return false;
- bits.shift();
- return this.merge(bits.associate(this.parts), base);
- },
- merge: function(bits, base){
- if ((!bits || !bits.scheme) && (!base || !base.scheme)) return false;
- if (base){
- this.parts.every(function(part){
- if (bits[part]) return false;
- bits[part] = base[part] || '';
- return true;
- });
- }
- bits.port = bits.port || this.schemes[bits.scheme.toLowerCase()];
- bits.directory = bits.directory ? this.parseDirectory(bits.directory, base ? base.directory : '') : '/';
- return bits;
- },
- parseDirectory: function(directory, baseDirectory) {
- directory = (directory.substr(0, 1) == '/' ? '' : (baseDirectory || '/')) + directory;
- if (!directory.test(URI.regs.directoryDot)) return directory;
- var result = [];
- directory.replace(URI.regs.endSlash, '').split('/').each(function(dir){
- if (dir == '..' && result.length > 0) result.pop();
- else if (dir != '.') result.push(dir);
- });
- return result.join('/') + '/';
- },
- combine: function(bits){
- return bits.value || bits.scheme + '://' +
- (bits.user ? bits.user + (bits.password ? ':' + bits.password : '') + '@' : '') +
- (bits.host || '') + (bits.port && bits.port != this.schemes[bits.scheme] ? ':' + bits.port : '') +
- (bits.directory || '/') + (bits.file || '') +
- (bits.query ? '?' + bits.query : '') +
- (bits.fragment ? '#' + bits.fragment : '');
- },
- set: function(part, value, base){
- if (part == 'value'){
- var scheme = value.match(URI.regs.scheme);
- if (scheme) scheme = scheme[1];
- if (scheme && !$defined(this.schemes[scheme.toLowerCase()])) this.parsed = { scheme: scheme, value: value };
- else this.parsed = this.parse(value, (base || this).parsed) || (scheme ? { scheme: scheme, value: value } : { value: value });
- } else if (part == 'data') {
- this.setData(value);
- } else {
- this.parsed[part] = value;
- }
- return this;
- },
- get: function(part, base){
- switch(part){
- case 'value': return this.combine(this.parsed, base ? base.parsed : false);
- case 'data' : return this.getData();
- }
- return this.parsed[part] || '';
- },
- go: function(){
- document.location.href = this.toString();
- },
- toURI: function(){
- return this;
- },
- getData: function(key, part){
- var qs = this.get(part || 'query');
- if (!$chk(qs)) return key ? null : {};
- var obj = qs.parseQueryString();
- return key ? obj[key] : obj;
- },
- setData: function(values, merge, part){
- if (typeof values == 'string'){
- data = this.getData();
- data[arguments[0]] = arguments[1];
- values = data;
- } else if (merge) {
- values = $merge(this.getData(), values);
- }
- return this.set(part || 'query', Hash.toQueryString(values));
- },
- clearData: function(part){
- return this.set(part || 'query', '');
- }
- });
- URI.prototype.toString = URI.prototype.valueOf = function(){
- return this.get('value');
- };
- URI.regs = {
- endSlash: /\/$/,
- scheme: /^(\w+):/,
- directoryDot: /\.\/|\.$/
- };
- URI.base = new URI(document.getElements('base[href]', true).getLast(), {base: document.location});
- String.implement({
- toURI: function(options){
- return new URI(this, options);
- }
- });
|