-
Notifications
You must be signed in to change notification settings - Fork 4
/
ionicUIRouter.js
90 lines (69 loc) · 2.02 KB
/
ionicUIRouter.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
79
80
81
82
83
84
85
86
87
88
89
90
function checkState(check, state){
var setTo = check;
var states = state.get();
var foundAlternative = false;
var currentState = state.current;
if (!currentState.views){
return setTo;
}
var checkView = setTo+'_'+Object.keys(currentState.views)[0];
for (var i=0;i<states.length;i++){
if (states[i].name == setTo){
return setTo;
}
if (states[i].name == checkView){
foundAlternative = true;
}
}
if (foundAlternative){
return checkView;
}else{
return setTo;
}
}
angular.module('ionicUIRouter', [])
.config([
'$provide', '$stateProvider',
function($provide, $stateProvider) {
function $StateDecorator($state) {
$state.__go = $state.go;
$state.go = function(to, params, options){
to = checkState(to, $state);
return $state.__go(to, params, options);
}
return $state;
}
$provide.decorator('$state', ['$delegate', $StateDecorator]);
$stateProvider.__state = $stateProvider.state;
$stateProvider.state = function(statename, data){
if (data.views){
var numKeys = 0;
for (var key in data.views){
numKeys++;
if (numKeys > 1){
for (var key in data.views){
var copy = {};
angular.copy(data, copy);
copy.views = {};
copy.views[key] = data.views[key];
copy.url = '/'+key+data.url;
$stateProvider.__state(statename+'_'+key, copy);
}
return $stateProvider;
}
}
}
$stateProvider.__state(statename, data);
return $stateProvider;
}
}])
.directive('uiSref', function($state){
return {
restrict: 'A',
priority: -1,
link: function(scope, element, attrs){
attrs.uiSref = checkState(attrs.uiSref, $state);
}
}
})
;