PageSourceSearch

http://www.tupiniquim.jp/js/jquery.address.js

js tupiniquim.jp collected 2026-10-08 20:29:24 UTC 25,758 bytes, 598 lines download raw bytes

1/*! jQuery Address v${version} | (c) 2009, 2013 Rostislav Hristov | jquery.org/license */
2(function ($) {
3
4    $.address = (function () {
5
6        var _trigger = function(name) {
7               var e = $.extend($.Event(name), (function() {
8                    var parameters = {},
9                        parameterNames = $.address.parameterNames();
10                    for (var i = 0, l = parameterNames.length; i < l; i++) {
11                        parameters[parameterNames[i]] = $.address.parameter(parameterNames[i]);
12                    }
13                    return {
14                        value: $.address.value(),
15                        path: $.address.path(),
16                        pathNames: $.address.pathNames(),
17                        parameterNames: parameterNames,
18                        parameters: parameters,
19                        queryString: $.address.queryString()
20                    };
21                }).call($.address));
22                $($.address).trigger(e);
23                return e;
24            },
25            _array = function(obj) {
26                return Array.prototype.slice.call(obj);
27            },
28            _bind = function(value, data, fn) {
29                $().bind.apply($($.address), Array.prototype.slice.call(arguments));
30                return $.address;
31            },
32            _unbind = function(value,  fn) {
33                $().unbind.apply($($.address), Array.prototype.slice.call(arguments));
34                return $.address;
35            },
36            _supportsState = function() {
37                return (_h.pushState && _opts.state !== UNDEFINED);
38            },
39            _hrefState = function() {
40                return ('/' + _l.pathname.replace(new RegExp(_opts.state), '') + 
41                    _l.search + (_hrefHash() ? '#' + _hrefHash() : '')).replace(_re, '/');
42            },
43            _hrefHash = function() {
44                var index = _l.href.indexOf('#');
45                return index != -1 ? _l.href.substr(index + 1) : '';
46            },
47            _href = function() {
48                return _supportsState() ? _hrefState() : _hrefHash();
49            },
50            _window = function() {
51                try {
52                    return top.document !== UNDEFINED && top.document.title !== UNDEFINED ? top : window;
53                } catch (e) { 
54                    return window;
55                }
56            },
57            _js = function() {
58                return 'javascript';
59            },
60            _strict = function(value) {
61                value = value.toString();
62                return (_opts.strict && value.substr(0, 1) != '/' ? '/' : '') + value;
63            },
64            _cssint = function(el, value) {
65                return parseInt(el.css(value), 10);
66            },
67            _listen = function() {
68                if (!_silent) {
69                    var hash = _href(),
70                        diff = decodeURI(_value) != decodeURI(hash);
71                    if (diff) {
72                        if (_msie && _version < 7) {
73                            _l.reload();
74                        } else {
75                            if (_msie && !_hashchange && _opts.history) {
76                                _st(_html, 50);
77                            }
78                            _value = hash;
79                            _update(FALSE);
80                        }
81                    }
82                }
83            },
84            _update = function(internal) {
85                _st(_track, 10);
86                return _trigger(CHANGE).isDefaultPrevented() || 
87                    _trigger(internal ? INTERNAL_CHANGE : EXTERNAL_CHANGE).isDefaultPrevented();
88            },
89            _track = function() {
90                if (_opts.tracker !== 'null' && _opts.tracker !== NULL) {
91                    var fn = $.isFunction(_opts.tracker) ? _opts.tracker : _t[_opts.tracker],
92                        value = (_l.pathname + _l.search + 
93                                ($.address && !_supportsState() ? $.address.value() : ''))
94                                .replace(/\/\//, '/').replace(/^\/$/, '');
95                    if ($.isFunction(fn)) {
96                        fn(value);
97                    } else if ($.isFunction(_t.urchinTracker)) {
98                        _t.urchinTracker(value);
99                    } else if (_t.pageTracker !== UNDEFINED && $.isFunction(_t.pageTracker._trackPageview)) {
100                        _t.pageTracker._trackPageview(value);
101                    } else if (_t._gaq !== UNDEFINED && $.isFunction(_t._gaq.push)) {
102                        _t._gaq.push(['_trackPageview', decodeURI(value)]);
103                    }
104                }
105            },
106            _html = function() {
107                var src = _js() + ':' + FALSE + ';document.open();document.writeln(\'<html><head><title>' + 
108                    _d.title.replace(/\'/g, '\\\'') + '</title><script>var ' + ID + ' = "' + encodeURIComponent(_href()).replace(/\'/g, '\\\'') + 
109                    (_d.domain != _l.hostname ? '";document.domain="' + _d.domain : '') + 
110                    '";</' + 'script></head></html>\');document.close();';
111                if (_version < 7) {
112                    _frame.src = src;
113                } else {
114                    _frame.contentWindow.location.replace(src);
115                }
116            },
117            _options = function() {
118                if (_url && _qi != -1) {
119                    var i, param, params = _url.substr(_qi + 1).split('&');
120                    for (i = 0; i < params.length; i++) {
121                        param = params[i].split('=');
122                        if (/^(autoUpdate|history|strict|wrap)$/.test(param[0])) {
123                            _opts[param[0]] = (isNaN(param[1]) ? /^(true|yes)$/i.test(param[1]) : (parseInt(param[1], 10) !== 0));
124                        }
125                        if (/^(state|tracker)$/.test(param[0])) {
126                            _opts[param[0]] = param[1];
127                        }
128                    }
129                    _url = NULL;
130                }
131                _value = _href();
132            },
133            _load = function() {
134                if (!_loaded) {
135                    _loaded = TRUE;
136                    _options();
137                    $('a[rel*="address:"]').address();
138                    if (_opts.wrap) {
139                        var body = $('body'),
140                            wrap = $('body > *')
141                                .wrapAll('<div style="padding:' + 
142                                    (_cssint(body, 'marginTop') + _cssint(body, 'paddingTop')) + 'px ' + 
143                                    (_cssint(body, 'marginRight') + _cssint(body, 'paddingRight')) + 'px ' + 
144                                    (_cssint(body, 'marginBottom') + _cssint(body, 'paddingBottom')) + 'px ' + 
145                                    (_cssint(body, 'marginLeft') + _cssint(body, 'paddingLeft')) + 'px;" />')
146                                .parent()
147                                .wrap('<div id="' + ID + '" style="height:100%;overflow:auto;position:relative;' + 
148                                    (_webkit && !window.statusbar.visible ? 'resize:both;' : '') + '" />');
149                        $('html, body')
150                            .css({
151                                height: '100%',
152                                margin: 0,
153                                padding: 0,
154                                overflow: 'hidden'
155                            });
156                        if (_webkit) {
157                            $('<style type="text/css" />')
158                                .appendTo('head')
159                                .text('#' + ID + '::-webkit-resizer { background-color: #fff; }');
160                        }
161                    }
162                    if (_msie && !_hashchange) {
163                        var frameset = _d.getElementsByTagName('frameset')[0];
164                        _frame = _d.createElement((frameset ? '' : 'i') + 'frame');
165                        _frame.src = _js() + ':' + FALSE;
166                        if (frameset) {
167                            frameset.insertAdjacentElement('beforeEnd', _frame);
168                            frameset[frameset.cols ? 'cols' : 'rows'] += ',0';
169                            _frame.noResize = TRUE;
170                            _frame.frameBorder = _frame.frameSpacing = 0;
171                        } else {
172                            _frame.style.display = 'none';
173                            _frame.style.width = _frame.style.height = 0;
174                            _frame.tabIndex = -1;
175                            _d.body.insertAdjacentElement('afterBegin', _frame);
176                        }
177                        _st(function() {
178                            $(_frame).bind('load', function() {
179                                var win = _frame.contentWindow;
180                                _value = win[ID] !== UNDEFINED ? win[ID] : '';
181                                if (_value != _href()) {
182                                    _update(FALSE);
183                                    _l.hash = _value;
184                                }
185                            });
186                            if (_frame.contentWindow[ID] === UNDEFINED) {
187                                _html();
188                            }
189                        }, 50);
190                    }
191                    _st(function() {
192                        _trigger('init');
193                        _update(FALSE);
194                    }, 1);
195                    if (!_supportsState()) {
196                        if ((_msie && _version > 7) || (!_msie && _hashchange)) {
197                            if (_t.addEventListener) {
198                                _t.addEventListener(HASH_CHANGE, _listen, FALSE);
199                            } else if (_t.attachEvent) {
200                                _t.attachEvent('on' + HASH_CHANGE, _listen);
201                            }
202                        } else {
203                            _si(_listen, 50);
204                        }
205                    }
206                    if ('state' in window.history) {
207                        $(window).trigger('popstate');
208                    }
209                }
210            },
211            _popstate = function() {
212                if (decodeURI(_value) != decodeURI(_href())) {
213                    _value = _href();
214                    _update(FALSE);
215                }
216            },
217            _unload = function() {
218                if (_t.removeEventListener) {
219                    _t.removeEventListener(HASH_CHANGE, _listen, FALSE);
220                } else if (_t.detachEvent) {
221                    _t.detachEvent('on' + HASH_CHANGE, _listen);
222                }
223            },
224            _uaMatch = function(ua) {
225                ua = ua.toLowerCase();
226                var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
227                    /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
228                    /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
229                    /(msie) ([\w.]+)/.exec( ua ) ||
230                    ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
231                    [];
232                return {
233                    browser: match[ 1 ] || '',
234                    version: match[ 2 ] || '0'
235                };
236            },
237            _detectBrowser = function() {
238                var browser = {},
239                    matched = _uaMatch(navigator.userAgent);
240                if (matched.browser) {
241                    browser[matched.browser] = true;
242                    browser.version = matched.version;
243                }
244                if (browser.chrome) {
245                    browser.webkit = true;
246                } else if (browser.webkit) {
247                    browser.safari = true;
248                }
249                return browser;
250            },
251            UNDEFINED,
252            NULL = null,
253            ID = 'jQueryAddress',
254            STRING = 'string',
255            HASH_CHANGE = 'hashchange',
256            INIT = 'init',
257            CHANGE = 'change',
258            INTERNAL_CHANGE = 'internalChange',
259            EXTERNAL_CHANGE = 'externalChange',
260            TRUE = true,
261            FALSE = false,
262            _opts = {
263                autoUpdate: TRUE, 
264                history: TRUE, 
265                strict: TRUE,
266                wrap: FALSE
267            },
268            _browser = _detectBrowser(),
269            _version = parseFloat(_browser.version),
270            _webkit = _browser.webkit || _browser.safari,
271            _msie = !$.support.opacity,
272            _t = _window(),
273            _d = _t.document,
274            _h = _t.history, 
275            _l = _t.location,
276            _si = setInterval,
277            _st = setTimeout,
278            _re = /\/{2,9}/g,
279            _agent = navigator.userAgent,
280            _hashchange = 'on' + HASH_CHANGE in _t,
281            _frame,
282            _form,
283            _url = $('script:last').attr('src'),
284            _qi = _url ? _url.indexOf('?') : -1,
285            _title = _d.title, 
286            _silent = FALSE,
287            _loaded = FALSE,
288            _juststart = TRUE,
289            _updating = FALSE,
290            _listeners = {}, 
291            _value = _href();
292            
293        if (_msie) {
294            _version = parseFloat(_agent.substr(_agent.indexOf('MSIE') + 4));
295            if (_d.documentMode && _d.documentMode != _version) {
296                _version = _d.documentMode != 8 ? 7 : 8;
297            }
298            var pc = _d.onpropertychange;
299            _d.onpropertychange = function() {
300                if (pc) {
301                    pc.call(_d);
302                }
303                if (_d.title != _title && _d.title.indexOf('#' + _href()) != -1) {
304                    _d.title = _title;
305                }
306            };
307        }
308        
309        if (_h.navigationMode) {
310            _h.navigationMode = 'compatible';
311        }
312        if (document.readyState == 'complete') {
313            var interval = setInterval(function() {
314                if ($.address) {
315                    _load();
316                    clearInterval(interval);
317                }
318            }, 50);
319        } else {
320            _options();
321            $(_load);
322        }
323        $(window).bind('popstate', _popstate).bind('unload', _unload);
324
325        return {
326            bind: function(type, data, fn) {
327                return _bind.apply(this, _array(arguments));
328            },
329            unbind: function(type, fn) {
330                return _unbind.apply(this, _array(arguments));
331            },
332            init: function(data, fn) {
333                return _bind.apply(this, [INIT].concat(_array(arguments)));
334            },
335            change: function(data, fn) {
336                return _bind.apply(this, [CHANGE].concat(_array(arguments)));
337            },
338            internalChange: function(data, fn) {
339                return _bind.apply(this, [INTERNAL_CHANGE].concat(_array(arguments)));
340            },
341            externalChange: function(data, fn) {
342                return _bind.apply(this, [EXTERNAL_CHANGE].concat(_array(arguments)));
343            },
344            baseURL: function() {
345                var url = _l.href;
346                if (url.indexOf('#') != -1) {
347                    url = url.substr(0, url.indexOf('#'));
348                }
349                if (/\/$/.test(url)) {
350                    url = url.substr(0, url.length - 1);
351                }
352                return url;
353            },
354            autoUpdate: function(value) {
355                if (value !== UNDEFINED) {
356                    _opts.autoUpdate = value;
357                    return this;
358                }
359                return _opts.autoUpdate;
360            },
361            history: function(value) {
362                if (value !== UNDEFINED) {
363                    _opts.history = value;
364                    return this;
365                }
366                return _opts.history;
367            },
368            state: function(value) {
369                if (value !== UNDEFINED) {
370                    _opts.state = value;
371                    var hrefState = _hrefState();
372                    if (_opts.state !== UNDEFINED) {
373                        if (_h.pushState) {
374                            if (hrefState.substr(0, 3) == '/#/') {
375                                _l.replace(_opts.state.replace(/^\/$/, '') + hrefState.substr(2));
376                            }
377                        } else if (hrefState != '/' && hrefState.replace(/^\/#/, '') != _hrefHash()) {
378                            _st(function() {
379                                _l.replace(_opts.state.replace(/^\/$/, '') + '/#' + hrefState);
380                            }, 1);
381                        }
382                    }
383                    return this;
384                }
385                return _opts.state;
386            },
387            strict: function(value) {
388                if (value !== UNDEFINED) {
389                    _opts.strict = value;
390                    return this;
391                }
392                return _opts.strict;
393            },
394            tracker: function(value) {
395                if (value !== UNDEFINED) {
396                    _opts.tracker = value;
397                    return this;
398                }
399                return _opts.tracker;
400            },
401            wrap: function(value) {
402                if (value !== UNDEFINED) {
403                    _opts.wrap = value;
404                    return this;
405                }
406                return _opts.wrap;
407            },
408            update: function() {
409                _updating = TRUE;
410                this.value(_value);
411                _updating = FALSE;
412                return this;
413            },
414            title: function(value) {
415                if (value !== UNDEFINED) {
416                    _st(function() {
417                        _title = _d.title = value;
418                        if (_juststart && _frame && _frame.contentWindow && _frame.contentWindow.document) {
419                            _frame.contentWindow.document.title = value;
420                            _juststart = FALSE;
421                        }
422                    }, 50);
423                    return this;
424                }
425                return _d.title;
426            },
427            value: function(value) {
428                if (value !== UNDEFINED) {
429                    value = _strict(value);
430                    if (value == '/') {
431                        value = '';
432                    }
433                    if (_value == value && !_updating) {
434                        return;
435                    }
436                    _value = value;
437                    if (_opts.autoUpdate || _updating) {
438                        if (_update(TRUE)) {
439                            return this;
440                        }
441                        if (_supportsState()) {
442                            _h[_opts.history ? 'pushState' : 'replaceState']({}, '', 
443                                    _opts.state.replace(/\/$/, '') + (_value === '' ? '/' : _value));
444                        } else {
445                            _silent = TRUE;
446                            if (_webkit) {
447                                if (_opts.history) {
448                                    _l.hash = '#' + _value;
449                                } else {
450                                    _l.replace('#' + _value);
451                                }
452                            } else if (_value != _href()) {
453                                if (_opts.history) {
454                                    _l.hash = '#' + _value;
455                                } else {
456                                    _l.replace('#' + _value);
457                                }
458                            }
459                            if ((_msie && !_hashchange) && _opts.history) {
460                                _st(_html, 50);
461                            }
462                            if (_webkit) {
463                                _st(function(){ _silent = FALSE; }, 1);
464                            } else {
465                                _silent = FALSE;
466                            }
467                        }
468                    }
469                    return this;
470                }
471                return _strict(_value);
472            },
473            path: function(value) {
474                if (value !== UNDEFINED) {
475                    var qs = this.queryString(),
476                        hash = this.hash();
477                    this.value(value + (qs ? '?' + qs : '') + (hash ? '#' + hash : ''));
478                    return this;
479                }
480                return _strict(_value).split('#')[0].split('?')[0];
481            },
482            pathNames: function() {
483                var path = this.path(),
484                    names = path.replace(_re, '/').split('/');
485                if (path.substr(0, 1) == '/' || path.length === 0) {
486                    names.splice(0, 1);
487                }
488                if (path.substr(path.length - 1, 1) == '/') {
489                    names.splice(names.length - 1, 1);
490                }
491                return names;
492            },
493            queryString: function(value) {
494                if (value !== UNDEFINED) {
495                    var hash = this.hash();
496                    this.value(this.path() + (value ? '?' + value : '') + (hash ? '#' + hash : ''));
497                    return this;
498                }
499                var arr = _value.split('?');
500                return arr.slice(1, arr.length).join('?').split('#')[0];
501            },
502            parameter: function(name, value, append) {
503                var i, params;
504                if (value !== UNDEFINED) {
505                    var names = this.parameterNames();
506                    params = [];
507                    value = value === UNDEFINED || value === NULL ? '' : value.toString();
508                    for (i = 0; i < names.length; i++) {
509                        var n = names[i],
510                            v = this.parameter(n);
511                        if (typeof v == STRING) {
512                            v = [v];
513                        }
514                        if (n == name) {
515                            v = (value === NULL || value === '') ? [] : 
516                                (append ? v.concat([value]) : [value]);
517                        }
518                        for (var j = 0; j < v.length; j++) {
519                            params.push(n + '=' + v[j]);
520                        }
521                    }
522                    if ($.inArray(name, names) == -1 && value !== NULL && value !== '') {
523                        params.push(name + '=' + value);
524                    }
525                    this.queryString(params.join('&'));
526                    return this;
527                }
528                value = this.queryString();
529                if (value) {
530                    var r = [];
531                    params = value.split('&');
532                    for (i = 0; i < params.length; i++) {
533                        var p = params[i].split('=');
534                        if (p[0] == name) {
535                            r.push(p.slice(1).join('='));
536                        }
537                    }
538                    if (r.length !== 0) {
539                        return r.length != 1 ? r : r[0];
540                    }
541                }
542            },
543            parameterNames: function() {
544                var qs = this.queryString(),
545                    names = [];
546                if (qs && qs.indexOf('=') != -1) {
547                    var params = qs.split('&');
548                    for (var i = 0; i < params.length; i++) {
549                        var name = params[i].split('=')[0];
550                        if ($.inArray(name, names) == -1) {
551                            names.push(name);
552                        }
553                    }
554                }
555                return names;
556            },
557            hash: function(value) {
558                if (value !== UNDEFINED) {
559                    this.value(_value.split('#')[0] + (value ? '#' + value : ''));
560                    return this;
561                }
562                var arr = _value.split('#');
563                return arr.slice(1, arr.length).join('#');                
564            }
565        };
566    })();
567    
568    $.fn.address = function(fn) {
569        if (!this.data('address')) {
570            this.on('click', function(e) {
571                if (e.shiftKey || e.ctrlKey || e.metaKey || e.which == 2) {
572                    return true;
573                }
574                var target = e.currentTarget;
575                if ($(target).is('a')) {
576                    e.preventDefault();
577                    var value = fn ? fn.call(target) : 
578                        /address:/.test($(target).attr('rel')) ? $(target).attr('rel').split('address:')[1].split(' ')[0] : 
579                        $.address.state() !== undefined && !/^\/?$/.test($.address.state()) ? 
580                                $(target).attr('href').replace(new RegExp('^(.*' + $.address.state() + '|\\.)'), '') : 
581                                $(target).attr('href').replace(/^(#\!?|\.)/, '');
582                    $.address.value(value);
583                }
584            }).on('submit', function(e) {
585                var target = e.currentTarget;
586                if ($(target).is('form')) {
587                    e.preventDefault();
588                    var action = $(target).attr('action'),
589                        value = fn ? fn.call(target) : (action.indexOf('?') != -1 ? action.replace(/&$/, '') : action + '?') + 
590                            $(target).serialize();
591                    $.address.value(value);
592                }
593            }).data('address', true);
594        }
595        return this;
596    };
597    
598})(jQuery);

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.