PageSourceSearch

https://on.ksure.or.kr/ws5/lib/jquery/jquery.address.js

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