@@ -36,13 +36,13 @@ function middlewareFactory($injector, $q) {
36
36
/**
37
37
* Initialize $middleware
38
38
*
39
- * @param {object } toRoute
40
- * @param {mixed } toParams
39
+ * @param {object } toRoute
40
+ * @param {mixed } toParams
41
41
* @returns {promise }
42
42
*/
43
43
return function initialize ( toRoute , toParams ) {
44
- // Return early if the toRoute doesn't have middleware
45
- if ( _bypassAll || ! hasMiddleware ( _globalMiddleware ) && ! hasMiddleware ( toRoute ) ) {
44
+ // Return if we should bypass
45
+ if ( shouldBypass ( toRoute ) ) {
46
46
return $q . resolve ( ) ;
47
47
}
48
48
@@ -54,9 +54,7 @@ function middlewareFactory($injector, $q) {
54
54
55
55
// Set the middleware names.
56
56
// Make sure the globals are first, then concat toRoute
57
- middleware . names =
58
- getMiddlewareNames ( _globalMiddleware )
59
- . concat ( getMiddlewareNames ( toRoute ) ) ;
57
+ middleware . names = concatMiddlwareNames ( [ _globalMiddleware , toRoute ] ) ;
60
58
61
59
// Create a deferred promise
62
60
middleware . resolution = $q . defer ( ) ;
@@ -68,30 +66,98 @@ function middlewareFactory($injector, $q) {
68
66
return middleware . resolution . promise ;
69
67
} ;
70
68
69
+ /**
70
+ * Determine if we should bypass the middleware
71
+ *
72
+ * @param {object } route
73
+ * @returns {boolean }
74
+ */
75
+ function shouldBypass ( route ) {
76
+ // If the bypassAll flag is set,
77
+ // then we should bypass all - duh
78
+ if ( _bypassAll ) {
79
+ return true ;
80
+ }
81
+
82
+ // We can only bypass at this point
83
+ // if there is no middleware to process
84
+ return ! middlewareExists ( route ) ;
85
+ }
86
+
87
+ /**
88
+ * Determine if any middleware exists
89
+ *
90
+ * @param {object } route
91
+ * @returns {boolean }
92
+ */
93
+ function middlewareExists ( route ) {
94
+ return hasMiddleware ( _globalMiddleware )
95
+ || hasMiddleware ( route ) ;
96
+ }
97
+
71
98
/**
72
99
* Determine if the given route has middleware
73
100
*
74
- * @param {object } toRoute
101
+ * @param {object } route
75
102
* @returns {boolean }
76
103
*/
77
104
function hasMiddleware ( route ) {
78
- return ! ! route . middleware && ! ! route . middleware . length ;
105
+ var middleware = getRouteMiddleware ( route ) ;
106
+ return ! ! middleware && ! ! middleware . length ;
107
+ }
108
+
109
+ /**
110
+ * Gets the route middleware property
111
+ *
112
+ * @param {object } route
113
+ * @returns {array|string }
114
+ */
115
+ function getRouteMiddleware ( route ) {
116
+ return route . middleware
117
+ || ( ( route . data || { } ) . vars || { } ) . middleware ;
118
+ }
119
+
120
+ /**
121
+ * Concat the middleware names of the given routes
122
+ *
123
+ * @param {array } routes
124
+ * @return {array }
125
+ */
126
+ function concatMiddlewareNames ( routes ) {
127
+ var output = [ ] ;
128
+
129
+ // Concat each route's middleware names
130
+ for ( var i = 0 ; i < routes . length ; i ++ ) {
131
+ output . concat (
132
+ getMiddlewareNames ( routes [ i ] )
133
+ ) ;
134
+ }
135
+
136
+ return output ;
79
137
}
80
138
81
139
/**
82
140
* Get the middleware names
83
141
* from an array or a piped string
84
142
*
85
- * @param {object } route
143
+ * @param {object } route
86
144
* @returns {array }
87
145
*/
88
146
function getMiddlewareNames ( route ) {
89
- // Return the middleware names as an array
90
- return route . middleware instanceof Array
91
- ? route . middleware
92
- : typeof route . middleware === 'undefined'
93
- ? [ ]
94
- : route . middleware . split ( '|' ) ;
147
+ var middleware = getRouteMiddleware ( route ) ;
148
+
149
+ // If the middleware is an array, just return it
150
+ if ( middleware instanceof Array ) {
151
+ return middleware ;
152
+ }
153
+
154
+ // If there is no middleware, then return an empty array
155
+ if ( typeof middleware === 'undefined' ) {
156
+ return [ ] ;
157
+ }
158
+
159
+ // Otherwise, split the pipes & return an array
160
+ return middleware . split ( '|' ) ;
95
161
}
96
162
97
163
/**
0 commit comments