PageSourceSearch

http://05m-kp.com/res/js/Jquery.Query.js

js 05m-kp.com collected 2026-10-09 04:32:34 UTC 9,347 bytes, 225 lines download raw bytes

vendor: 9,347 bytes, lines 1-225
1/**
2* jQuery.query - Query String Modification and Creation for jQuery
3* Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
4* Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
5* Date: 2009/8/13
6*
7* @author Blair Mitchelmore
8* @version 2.1.7
9*
10**/
11new function(settings) {
12    // Various Settings
13    var $separator = settings.separator || '&';
14    var $spaces = settings.spaces === false ? false : true;
15    var $suffix = settings.suffix === false ? '' : '[]';
16    var $prefix = settings.prefix === false ? false : true;
17    var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
18    var $numbers = settings.numbers === false ? false : true;
19
20    jQuery.query = new function() {
21        var is = function(o, t) {
22            return o != undefined && o !== null && (!!t ? o.constructor == t : true);
23        };
24        var parse = function(path) {
25            var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
26            while (m = rx.exec(match[2])) tokens.push(m[1]);
27            return [base, tokens];
28        };
29        var set = function(target, tokens, value) {
30            var o, token = tokens.shift();
31            if (typeof target != 'object') target = null;
32            if (token === "") {
33                if (!target) target = [];
34                if (is(target, Array)) {
35                    target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
36                } else if (is(target, Object)) {
37                    var i = 0;
38                    while (target[i++] != null);
39                    target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
40                } else {
41                    target = [];
42                    target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
43                }
44            } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
45                var index = parseInt(token, 10);
46                if (!target) target = [];
47                target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
48            } else if (token) {
49                var index = token.replace(/^\s*|\s*$/g, "");
50                if (!target) target = {};
51                if (is(target, Array)) {
52                    var temp = {};
53                    for (var i = 0; i < target.length; ++i) {
54                        temp[i] = target[i];
55                    }
56                    target = temp;
57                }
58                target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
59            } else {
60                return value;
61            }
62            return target;
63        };
64
65        var queryObject = function(a) {
66            var self = this;
67            self.keys = {};
68
69            if (a.queryObject) {
70                jQuery.each(a.get(), function(key, val) {
71                    self.SET(key, val);
72                });
73            } else {
74                jQuery.each(arguments, function() {
75                    var q = "" + this;
76                    q = q.replace(/^[?#]/, ''); // remove any leading ? || #
77                    q = q.replace(/[;&]$/, ''); // remove any trailing & || ;
78                    if ($spaces) q = q.replace(/[+]/g, ' '); // replace +'s with spaces
79
80                    jQuery.each(q.split(/[&;]/), function() {
81                        var key = decodeURIComponent(this.split('=')[0] || "");
82                        var val = decodeURIComponent(this.split('=')[1] || "");
83
84                        if (!key) return;
85
86                        if ($numbers) {
87                            if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
88                                val = parseFloat(val);
89                            else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
90                                val = parseInt(val, 10);
91                        }
92
93                        val = (!val && val !== 0) ? true : val;
94
95                        if (val !== false && val !== true && typeof val != 'number')
96                            val = val;
97
98                        self.SET(key, val);
99                    });
100                });
101            }
102            return self;
103        };
104
105        queryObject.prototype = {
106            queryObject: true,
107            has: function(key, type) {
108                var value = this.get(key);
109                return is(value, type);
110            },
111            GET: function(key) {
112                if (!is(key)) return this.keys;
113                var parsed = parse(key), base = parsed[0], tokens = parsed[1];
114                var target = this.keys[base];
115                while (target != null && tokens.length != 0) {
116                    target = target[tokens.shift()];
117                }
118                return typeof target == 'number' ? target : target || "";
119            },
120            get: function(key) {
121                var target = this.GET(key);
122                if (is(target, Object))
123                    return jQuery.extend(true, {}, target);
124                else if (is(target, Array))
125                    return target.slice(0);
126                return target;
127            },
128            SET: function(key, val) {
129                var value = !is(val) ? null : val;
130                var parsed = parse(key), base = parsed[0], tokens = parsed[1];
131                var target = this.keys[base];
132                this.keys[base] = set(target, tokens.slice(0), value);
133                return this;
134            },
135            set: function(key, val) {
136                return this.copy().SET(key, val);
137            },
138            REMOVE: function(key) {
139                return this.SET(key, null).COMPACT();
140            },
141            remove: function(key) {
142                return this.copy().REMOVE(key);
143            },
144            EMPTY: function() {
145                var self = this;
146                jQuery.each(self.keys, function(key, value) {
147                    delete self.keys[key];
148                });
149                return self;
150            },
151            load: function(url) {
152                var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");
153                var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
154                return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash);
155            },
156            empty: function() {
157                return this.copy().EMPTY();
158            },
159            copy: function() {
160                return new queryObject(this);
161            },
162            COMPACT: function() {
163                function build(orig) {
164                    var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
165                    if (typeof orig == 'object') {
166                        function add(o, key, value) {
167                            if (is(o, Array))
168                                o.push(value);
169                            else
170                                o[key] = value;
171                        }
172                        jQuery.each(orig, function(key, value) {
173                            if (!is(value)) return true;
174                            add(obj, key, build(value));
175                        });
176                    }
177                    return obj;
178                }
179                this.keys = build(this.keys);
180                return this;
181            },
182            compact: function() {
183                return this.copy().COMPACT();
184            },
185            toString: function() {
186                var i = 0, queryString = [], chunks = [], self = this;
187                var encode = function(str) {
188                    str = str + "";
189                    if ($spaces) str = str.replace(/ /g, "+");
190                    return encodeURIComponent(str);
191                };
192                var addFields = function(arr, key, value) {
193                    if (!is(value) || value === false) return;
194                    var o = [encode(key)];
195                    if (value !== true) {
196                        o.push("=");
197                        o.push(encode(value));
198                    }
199                    arr.push(o.join(""));
200                };
201                var build = function(obj, base) {
202                    var newKey = function(key) {
203                        return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
204                    };
205                    jQuery.each(obj, function(key, value) {
206                        if (typeof value == 'object')
207                            build(value, newKey(key));
208                        else
209                            addFields(chunks, newKey(key), value);
210                    });
211                };
212
213                build(this.keys);
214
215                if (chunks.length > 0) queryString.push($hash);
216                queryString.push(chunks.join($separator));
217
218                return queryString.join("");
219            }
220        };
221
222        return new queryObject(location.search, location.hash);
223    };
224} (jQuery.query || {}); // Pass in jQuery.query as settings object
225

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.