blob: b93296bc2ada5c1be73aedf2f0900d10e6c10a2d (
plain)
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
|
Group = function(router, options, parent) {
options = options || {};
if (options.prefix && !/^\/.*/.test(options.prefix)) {
var message = "group's prefix must start with '/'";
throw new Error(message);
}
this._router = router;
this.prefix = options.prefix || '';
this.name = options.name;
this.options = options;
this._triggersEnter = options.triggersEnter || [];
this._triggersExit = options.triggersExit || [];
this._subscriptions = options.subscriptions || Function.prototype;
this.parent = parent;
if (this.parent) {
this.prefix = parent.prefix + this.prefix;
this._triggersEnter = parent._triggersEnter.concat(this._triggersEnter);
this._triggersExit = this._triggersExit.concat(parent._triggersExit);
}
};
Group.prototype.route = function(pathDef, options, group) {
options = options || {};
if (!/^\/.*/.test(pathDef)) {
var message = "route's path must start with '/'";
throw new Error(message);
}
group = group || this;
pathDef = this.prefix + pathDef;
var triggersEnter = options.triggersEnter || [];
options.triggersEnter = this._triggersEnter.concat(triggersEnter);
var triggersExit = options.triggersExit || [];
options.triggersExit = triggersExit.concat(this._triggersExit);
return this._router.route(pathDef, options, group);
};
Group.prototype.group = function(options) {
return new Group(this._router, options, this);
};
Group.prototype.callSubscriptions = function(current) {
if (this.parent) {
this.parent.callSubscriptions(current);
}
this._subscriptions.call(current.route, current.params, current.queryParams);
};
|