-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrouter.jquery.js
78 lines (70 loc) · 1.8 KB
/
router.jquery.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
(function($){
$.router = function(){
// Private
var request={};
var self = this;
var cur_url = '';
var handlers={};
// Public
// Парсинг url
$.router.parseRequest = function() {
var paramsStart=location.href.indexOf('#');
if (paramsStart!=-1)
var url = location.href.substring(paramsStart+2,location.href.length).split('/');
else
var url='';
request={};
for (var key in url) {
var param = url[key].split('=');
if (param[0]!='') request[param[0]]=((param.length==1)?(true):(param[1]));
}
}
// Добавить обработчик изменения параметра в url
$.router.addHandler=function(key,handler) {
handlers[key]=handler;
handlers[key](request);
};
// Добавить обработчик изменения параметра в url
$.router.removeHandler=function(key) {
delete handlers[key]
};
$.router.get=function(key) {
if (typeof(request[key])=='undefined') return false;
else return request[key];
}
// Сменяет параметры на странице
$.router.set=function(object) {
for (key in object) {
if (object[key]!=false) request[key]=object[key];
else delete request[key];
}
var link='#';
for (key in request) {
link+='/'+key;
if (typeof(request[key])!='boolean') link+='='+request[key];
}
location.href=link;
$.router.check();
}
// Проверка не изменили ли url
$.router.check = function() {
if (cur_url != location.href) {
cur_url = location.href;
$.router.parseRequest();
for (key in handlers) {
handlers[key](request);
}
//$.router.onChange(request);
}
}
// Конструктор
var construct=function() {
$.router.check();
setInterval($.router.check,200);
}();
return self;
};
})(jQuery);
$(document).ready(function() {
$.router();
});