Вход Регистрация
Файл: framework/thirdparty/jquery-query/jquery.query.js
Строк: 216
<?php
/**
 * jQuery.query - Query String Modification and Creation for jQuery
 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
 * Date: 2009/8/13
 *
 * @author Blair Mitchelmore
 * @version 2.1.7
 *
 **/
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;
  
  
jQuery.query = new function() {
    var 
is = function(ot) {
      return 
!= undefined && !== null && (!!o.constructor == true);
    };
    var 
parse = function(path) {
      var 
mrx = /[([^[]*)]/gmatch = /^([^[]+)([.*])?$/.exec(path), base match[1], tokens = [];
      while (
rx.exec(match[2])) tokens.push(m[1]);
      return [
basetokens];
    };
    var 
set = function(targettokensvalue) {
      var 
otoken tokens.shift();
      if (
typeof target != 'object'target null;
      if (
token === "") {
        if (!
targettarget = [];
        if (
is(target, Array)) {
          
target.push(tokens.length == value set(nulltokens.slice(0), value));
        } else if (
is(targetObject)) {
          var 
0;
          while (
target[i++] != null);
          
target[--i] = tokens.length == value set(target[i], tokens.slice(0), value);
        } else {
          
target = [];
          
target.push(tokens.length == value set(nulltokens.slice(0), value));
        }
      } else if (
token && token.match(/^s*[0-9]+s*$/)) {
        var 
index parseInt(token10);
        if (!
targettarget = [];
        
target[index] = tokens.length == value set(target[index], tokens.slice(0), value);
      } else if (
token) {
        var 
index token.replace(/^s*|s*$/g"");
        if (!
targettarget = {};
        if (
is(target, Array)) {
          var 
temp = {};
          for (var 
0target.length; ++i) {
            
temp[i] = target[i];
          }
          
target temp;
        }
        
target[index] = tokens.length == value set(target[index], tokens.slice(0), value);
      } else {
        return 
value;
      }
      return 
target;
    };
    
    var 
queryObject = function(a) {
      var 
self this;
      
self.keys = {};
      
      if (
a.queryObject) {
        
jQuery.each(a.get(), function(keyval) {
          
self.SET(keyval);
        });
      } else {
        
jQuery.each(arguments, function() {
          var 
"" this;
          
q.replace(/^[?#]/,''); // remove any leading ? || #
          
q.replace(/[;&]$/,''); // remove any trailing & || ;
          
if ($spacesq.replace(/[+]/g,' '); // replace +'s with spaces
          
          
jQuery.each(q.split(/[&;]/), function(){
            var 
key decodeURIComponent(this.split('=')[0] || "");
            var 
val decodeURIComponent(this.split('=')[1] || "");
            
            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(val10);
            }
            
            
val = (!val && val !== 0) ? true val;
            
            if (
val !== false && val !== true && typeof val != 'number')
              
val val;
            
            
self.SET(keyval);
          });
        });
      }
      return 
self;
    };
    
    
queryObject.prototype = {
      
queryObjecttrue,
      
has: function(keytype) {
        var 
value this.get(key);
        return 
is(valuetype);
      },
      
GET: function(key) {
        if (!
is(key)) return this.keys;
        var 
parsed parse(key), base parsed[0], tokens parsed[1];
        var 
target this.keys[base];
        while (
target != null && tokens.length != 0) {
          
target target[tokens.shift()];
        }
        return 
typeof target == 'number' target target || "";
      },
      
get: function(key) {
        var 
target this.GET(key);
        if (
is(targetObject))
          return 
jQuery.extend(true, {}, target);
        else if (
is(target, Array))
          return 
target.slice(0);
        return 
target;
      },
      
SET: function(keyval) {
        var 
value = !is(val) ? null val;
        var 
parsed parse(key), base parsed[0], tokens parsed[1];
        var 
target this.keys[base];
        
this.keys[base] = set(targettokens.slice(0), value);
        return 
this;
      },
      
set: function(keyval) {
        return 
this.copy().SET(keyval);
      },
      
REMOVE: function(key) {
        return 
this.SET(keynull).COMPACT();
      },
      
remove: function(key) {
        return 
this.copy().REMOVE(key);
      },
      EMPTY: function() {
        var 
self this;
        
jQuery.each(self.keys, function(keyvalue) {
          
delete self.keys[key];
        });
        return 
self;
      },
      
load: function(url) {
        var 
hash url.replace(/^.*?[#](.+?)(?:?.+)?$/, "$1");
        
var search url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
        
return new queryObject(url.length == search.length '' searchurl.length == hash.length '' hash);
      },
      empty: function() {
        return 
this.copy().EMPTY();
      },
      
copy: function() {
        return new 
queryObject(this);
      },
      
COMPACT: function() {
        function 
build(orig) {
          var 
obj typeof orig == "object" is(orig, Array) ? [] : {} : orig;
          if (
typeof orig == 'object') {
            function 
add(okeyvalue) {
              if (
is(o, Array))
                
o.push(value);
              else
                
o[key] = value;
            }
            
jQuery.each(orig, function(keyvalue) {
              if (!
is(value)) return true;
              
add(objkeybuild(value));
            });
          }
          return 
obj;
        }
        
this.keys build(this.keys);
        return 
this;
      },
      
compact: function() {
        return 
this.copy().COMPACT();
      },
      
toString: function() {
        var 
0queryString = [], chunks = [], self this;
        var 
encode = function(str) {
          
str str "";
          if (
$spacesstr str.replace(/ /g"+");
          return 
encodeURIComponent(str);
        };
        var 
addFields = function(arrkeyvalue) {
          if (!
is(value) || value === false) return;
          var 
= [encode(key)];
          if (
value !== true) {
            
o.push("=");
            
o.push(encode(value));
          }
          
arr.push(o.join(""));
        };
        var 
build = function(objbase) {
          var 
newKey = function(key) {
            return !
base || base == "" ? [key].join("") : [base"["key"]"].join("");
          };
          
jQuery.each(obj, function(keyvalue) {
            if (
typeof value == 'object'
              
build(valuenewKey(key));
            else
              
addFields(chunksnewKey(key), value);
          });
        };
        
        
build(this.keys);
        
        if (
chunks.length 0queryString.push($hash);
        
queryString.push(chunks.join($separator));
        
        return 
queryString.join("");
      }
    };
    
    return new 
queryObject(location.searchlocation.hash);
  };
}(
jQuery.query || {}); // Pass in jQuery.query as settings object
?>
Онлайн: 0
Реклама