##// END OF EJS Templates
frontend: move link definitions to javascript layer
ergo -
Show More
@@ -1,92 +1,91 b''
1 1 import inspect
2 2 import logging
3 3
4 4 from pyramid.config import Configurator
5 5
6 6 log = logging.getLogger(__name__)
7 7
8 8 class InspectProxy(object):
9 9 """
10 10 Proxy to the `inspect` module that allows us to use the pyramid include
11 11 mechanism for cythonized modules without source file.
12 12 """
13 13
14 14 def _get_cyfunction_func_code(self, cyfunction):
15 15 """
16 16 Unpack the `func_code` attribute of a cython function.
17 17 """
18 18 if inspect.ismethod(cyfunction):
19 19 cyfunction = cyfunction.im_func
20 20 return getattr(cyfunction, 'func_code')
21 21
22 22 def getmodule(self, *args, **kwds):
23 23 """
24 24 Simple proxy to `inspect.getmodule`.
25 25 """
26 26 return inspect.getmodule(*args, **kwds)
27 27
28 28 def getsourcefile(self, obj):
29 29 """
30 30 Proxy to `inspect.getsourcefile` or `inspect.getfile` depending on if
31 31 it's called to look up the source file that contains the magic pyramid
32 32 `includeme` callable.
33 33
34 34 For cythonized modules the source file may be deleted. Therefore we
35 35 return the result of `inspect.getfile` instead. In the case of the
36 36 `configurator.include` method this is OK, because the result is passed
37 37 to `os.path.dirname` which strips the file name. So it doesn't matter
38 38 if we return the path to the source file or another file in the same
39 39 directory.
40 40 """
41 41 # Check if it's called to look up the source file that contains the
42 42 # magic pyramid `includeme` callable.
43 43 if getattr(obj, '__name__') == 'includeme':
44 44 try:
45 45 return inspect.getfile(obj)
46 46 except TypeError as e:
47 47 # Cython functions are not recognized as functions by the
48 48 # inspect module. We have to unpack the func_code attribute
49 49 # ourself.
50 50 if 'cyfunction' in e.message:
51 51 obj = self._get_cyfunction_func_code(obj)
52 52 return inspect.getfile(obj)
53 53 raise
54 54 else:
55 55 return inspect.getsourcefile(obj)
56 56
57 57
58 58 class CythonCompatConfigurator(Configurator):
59 59 """
60 60 Customized configurator to replace the inspect class attribute with
61 61 a custom one that is cython compatible.
62 62 """
63 63 inspect = InspectProxy()
64 64
65 65
66 66 def register_appenlight_plugin(config, plugin_name, plugin_config):
67 67 def register():
68 68 log.warning('Registering plugin: {}'.format(plugin_name))
69 69 if plugin_name not in config.registry.appenlight_plugins:
70 70 config.registry.appenlight_plugins[plugin_name] = {
71 71 'javascript': None,
72 72 'static': None,
73 73 'css': None,
74 'top_nav': None,
75 74 'celery_tasks': None,
76 75 'celery_beats': None,
77 76 'fulltext_indexer': None,
78 77 'sqlalchemy_migrations': None,
79 78 'default_values_setter': None,
80 79 'resource_types': [],
81 80 'url_gen': None
82 81 }
83 82 config.registry.appenlight_plugins[plugin_name].update(
84 83 plugin_config)
85 84 # inform AE what kind of resource types we have available
86 85 # so we can avoid failing when a plugin is removed but data
87 86 # is still present in the db
88 87 if plugin_config.get('resource_types'):
89 88 config.registry.resource_types.extend(
90 89 plugin_config['resource_types'])
91 90
92 91 config.action('appenlight_plugin={}'.format(plugin_name), register)
@@ -1,13226 +1,13277 b''
1 1 // Underscore.js 1.6.0
2 2 // http://underscorejs.org
3 3 // (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
4 4 // Underscore may be freely distributed under the MIT license.
5 5
6 6 (function() {
7 7
8 8 // Baseline setup
9 9 // --------------
10 10
11 11 // Establish the root object, `window` in the browser, or `exports` on the server.
12 12 var root = this;
13 13
14 14 // Save the previous value of the `_` variable.
15 15 var previousUnderscore = root._;
16 16
17 17 // Establish the object that gets returned to break out of a loop iteration.
18 18 var breaker = {};
19 19
20 20 // Save bytes in the minified (but not gzipped) version:
21 21 var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
22 22
23 23 // Create quick reference variables for speed access to core prototypes.
24 24 var
25 25 push = ArrayProto.push,
26 26 slice = ArrayProto.slice,
27 27 concat = ArrayProto.concat,
28 28 toString = ObjProto.toString,
29 29 hasOwnProperty = ObjProto.hasOwnProperty;
30 30
31 31 // All **ECMAScript 5** native function implementations that we hope to use
32 32 // are declared here.
33 33 var
34 34 nativeForEach = ArrayProto.forEach,
35 35 nativeMap = ArrayProto.map,
36 36 nativeReduce = ArrayProto.reduce,
37 37 nativeReduceRight = ArrayProto.reduceRight,
38 38 nativeFilter = ArrayProto.filter,
39 39 nativeEvery = ArrayProto.every,
40 40 nativeSome = ArrayProto.some,
41 41 nativeIndexOf = ArrayProto.indexOf,
42 42 nativeLastIndexOf = ArrayProto.lastIndexOf,
43 43 nativeIsArray = Array.isArray,
44 44 nativeKeys = Object.keys,
45 45 nativeBind = FuncProto.bind;
46 46
47 47 // Create a safe reference to the Underscore object for use below.
48 48 var _ = function(obj) {
49 49 if (obj instanceof _) return obj;
50 50 if (!(this instanceof _)) return new _(obj);
51 51 this._wrapped = obj;
52 52 };
53 53
54 54 // Export the Underscore object for **Node.js**, with
55 55 // backwards-compatibility for the old `require()` API. If we're in
56 56 // the browser, add `_` as a global object via a string identifier,
57 57 // for Closure Compiler "advanced" mode.
58 58 if (typeof exports !== 'undefined') {
59 59 if (typeof module !== 'undefined' && module.exports) {
60 60 exports = module.exports = _;
61 61 }
62 62 exports._ = _;
63 63 } else {
64 64 root._ = _;
65 65 }
66 66
67 67 // Current version.
68 68 _.VERSION = '1.6.0';
69 69
70 70 // Collection Functions
71 71 // --------------------
72 72
73 73 // The cornerstone, an `each` implementation, aka `forEach`.
74 74 // Handles objects with the built-in `forEach`, arrays, and raw objects.
75 75 // Delegates to **ECMAScript 5**'s native `forEach` if available.
76 76 var each = _.each = _.forEach = function(obj, iterator, context) {
77 77 if (obj == null) return obj;
78 78 if (nativeForEach && obj.forEach === nativeForEach) {
79 79 obj.forEach(iterator, context);
80 80 } else if (obj.length === +obj.length) {
81 81 for (var i = 0, length = obj.length; i < length; i++) {
82 82 if (iterator.call(context, obj[i], i, obj) === breaker) return;
83 83 }
84 84 } else {
85 85 var keys = _.keys(obj);
86 86 for (var i = 0, length = keys.length; i < length; i++) {
87 87 if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
88 88 }
89 89 }
90 90 return obj;
91 91 };
92 92
93 93 // Return the results of applying the iterator to each element.
94 94 // Delegates to **ECMAScript 5**'s native `map` if available.
95 95 _.map = _.collect = function(obj, iterator, context) {
96 96 var results = [];
97 97 if (obj == null) return results;
98 98 if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
99 99 each(obj, function(value, index, list) {
100 100 results.push(iterator.call(context, value, index, list));
101 101 });
102 102 return results;
103 103 };
104 104
105 105 var reduceError = 'Reduce of empty array with no initial value';
106 106
107 107 // **Reduce** builds up a single result from a list of values, aka `inject`,
108 108 // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
109 109 _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
110 110 var initial = arguments.length > 2;
111 111 if (obj == null) obj = [];
112 112 if (nativeReduce && obj.reduce === nativeReduce) {
113 113 if (context) iterator = _.bind(iterator, context);
114 114 return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
115 115 }
116 116 each(obj, function(value, index, list) {
117 117 if (!initial) {
118 118 memo = value;
119 119 initial = true;
120 120 } else {
121 121 memo = iterator.call(context, memo, value, index, list);
122 122 }
123 123 });
124 124 if (!initial) throw new TypeError(reduceError);
125 125 return memo;
126 126 };
127 127
128 128 // The right-associative version of reduce, also known as `foldr`.
129 129 // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
130 130 _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
131 131 var initial = arguments.length > 2;
132 132 if (obj == null) obj = [];
133 133 if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
134 134 if (context) iterator = _.bind(iterator, context);
135 135 return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
136 136 }
137 137 var length = obj.length;
138 138 if (length !== +length) {
139 139 var keys = _.keys(obj);
140 140 length = keys.length;
141 141 }
142 142 each(obj, function(value, index, list) {
143 143 index = keys ? keys[--length] : --length;
144 144 if (!initial) {
145 145 memo = obj[index];
146 146 initial = true;
147 147 } else {
148 148 memo = iterator.call(context, memo, obj[index], index, list);
149 149 }
150 150 });
151 151 if (!initial) throw new TypeError(reduceError);
152 152 return memo;
153 153 };
154 154
155 155 // Return the first value which passes a truth test. Aliased as `detect`.
156 156 _.find = _.detect = function(obj, predicate, context) {
157 157 var result;
158 158 any(obj, function(value, index, list) {
159 159 if (predicate.call(context, value, index, list)) {
160 160 result = value;
161 161 return true;
162 162 }
163 163 });
164 164 return result;
165 165 };
166 166
167 167 // Return all the elements that pass a truth test.
168 168 // Delegates to **ECMAScript 5**'s native `filter` if available.
169 169 // Aliased as `select`.
170 170 _.filter = _.select = function(obj, predicate, context) {
171 171 var results = [];
172 172 if (obj == null) return results;
173 173 if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context);
174 174 each(obj, function(value, index, list) {
175 175 if (predicate.call(context, value, index, list)) results.push(value);
176 176 });
177 177 return results;
178 178 };
179 179
180 180 // Return all the elements for which a truth test fails.
181 181 _.reject = function(obj, predicate, context) {
182 182 return _.filter(obj, function(value, index, list) {
183 183 return !predicate.call(context, value, index, list);
184 184 }, context);
185 185 };
186 186
187 187 // Determine whether all of the elements match a truth test.
188 188 // Delegates to **ECMAScript 5**'s native `every` if available.
189 189 // Aliased as `all`.
190 190 _.every = _.all = function(obj, predicate, context) {
191 191 predicate || (predicate = _.identity);
192 192 var result = true;
193 193 if (obj == null) return result;
194 194 if (nativeEvery && obj.every === nativeEvery) return obj.every(predicate, context);
195 195 each(obj, function(value, index, list) {
196 196 if (!(result = result && predicate.call(context, value, index, list))) return breaker;
197 197 });
198 198 return !!result;
199 199 };
200 200
201 201 // Determine if at least one element in the object matches a truth test.
202 202 // Delegates to **ECMAScript 5**'s native `some` if available.
203 203 // Aliased as `any`.
204 204 var any = _.some = _.any = function(obj, predicate, context) {
205 205 predicate || (predicate = _.identity);
206 206 var result = false;
207 207 if (obj == null) return result;
208 208 if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);
209 209 each(obj, function(value, index, list) {
210 210 if (result || (result = predicate.call(context, value, index, list))) return breaker;
211 211 });
212 212 return !!result;
213 213 };
214 214
215 215 // Determine if the array or object contains a given value (using `===`).
216 216 // Aliased as `include`.
217 217 _.contains = _.include = function(obj, target) {
218 218 if (obj == null) return false;
219 219 if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
220 220 return any(obj, function(value) {
221 221 return value === target;
222 222 });
223 223 };
224 224
225 225 // Invoke a method (with arguments) on every item in a collection.
226 226 _.invoke = function(obj, method) {
227 227 var args = slice.call(arguments, 2);
228 228 var isFunc = _.isFunction(method);
229 229 return _.map(obj, function(value) {
230 230 return (isFunc ? method : value[method]).apply(value, args);
231 231 });
232 232 };
233 233
234 234 // Convenience version of a common use case of `map`: fetching a property.
235 235 _.pluck = function(obj, key) {
236 236 return _.map(obj, _.property(key));
237 237 };
238 238
239 239 // Convenience version of a common use case of `filter`: selecting only objects
240 240 // containing specific `key:value` pairs.
241 241 _.where = function(obj, attrs) {
242 242 return _.filter(obj, _.matches(attrs));
243 243 };
244 244
245 245 // Convenience version of a common use case of `find`: getting the first object
246 246 // containing specific `key:value` pairs.
247 247 _.findWhere = function(obj, attrs) {
248 248 return _.find(obj, _.matches(attrs));
249 249 };
250 250
251 251 // Return the maximum element or (element-based computation).
252 252 // Can't optimize arrays of integers longer than 65,535 elements.
253 253 // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)
254 254 _.max = function(obj, iterator, context) {
255 255 if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
256 256 return Math.max.apply(Math, obj);
257 257 }
258 258 var result = -Infinity, lastComputed = -Infinity;
259 259 each(obj, function(value, index, list) {
260 260 var computed = iterator ? iterator.call(context, value, index, list) : value;
261 261 if (computed > lastComputed) {
262 262 result = value;
263 263 lastComputed = computed;
264 264 }
265 265 });
266 266 return result;
267 267 };
268 268
269 269 // Return the minimum element (or element-based computation).
270 270 _.min = function(obj, iterator, context) {
271 271 if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
272 272 return Math.min.apply(Math, obj);
273 273 }
274 274 var result = Infinity, lastComputed = Infinity;
275 275 each(obj, function(value, index, list) {
276 276 var computed = iterator ? iterator.call(context, value, index, list) : value;
277 277 if (computed < lastComputed) {
278 278 result = value;
279 279 lastComputed = computed;
280 280 }
281 281 });
282 282 return result;
283 283 };
284 284
285 285 // Shuffle an array, using the modern version of the
286 286 // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
287 287 _.shuffle = function(obj) {
288 288 var rand;
289 289 var index = 0;
290 290 var shuffled = [];
291 291 each(obj, function(value) {
292 292 rand = _.random(index++);
293 293 shuffled[index - 1] = shuffled[rand];
294 294 shuffled[rand] = value;
295 295 });
296 296 return shuffled;
297 297 };
298 298
299 299 // Sample **n** random values from a collection.
300 300 // If **n** is not specified, returns a single random element.
301 301 // The internal `guard` argument allows it to work with `map`.
302 302 _.sample = function(obj, n, guard) {
303 303 if (n == null || guard) {
304 304 if (obj.length !== +obj.length) obj = _.values(obj);
305 305 return obj[_.random(obj.length - 1)];
306 306 }
307 307 return _.shuffle(obj).slice(0, Math.max(0, n));
308 308 };
309 309
310 310 // An internal function to generate lookup iterators.
311 311 var lookupIterator = function(value) {
312 312 if (value == null) return _.identity;
313 313 if (_.isFunction(value)) return value;
314 314 return _.property(value);
315 315 };
316 316
317 317 // Sort the object's values by a criterion produced by an iterator.
318 318 _.sortBy = function(obj, iterator, context) {
319 319 iterator = lookupIterator(iterator);
320 320 return _.pluck(_.map(obj, function(value, index, list) {
321 321 return {
322 322 value: value,
323 323 index: index,
324 324 criteria: iterator.call(context, value, index, list)
325 325 };
326 326 }).sort(function(left, right) {
327 327 var a = left.criteria;
328 328 var b = right.criteria;
329 329 if (a !== b) {
330 330 if (a > b || a === void 0) return 1;
331 331 if (a < b || b === void 0) return -1;
332 332 }
333 333 return left.index - right.index;
334 334 }), 'value');
335 335 };
336 336
337 337 // An internal function used for aggregate "group by" operations.
338 338 var group = function(behavior) {
339 339 return function(obj, iterator, context) {
340 340 var result = {};
341 341 iterator = lookupIterator(iterator);
342 342 each(obj, function(value, index) {
343 343 var key = iterator.call(context, value, index, obj);
344 344 behavior(result, key, value);
345 345 });
346 346 return result;
347 347 };
348 348 };
349 349
350 350 // Groups the object's values by a criterion. Pass either a string attribute
351 351 // to group by, or a function that returns the criterion.
352 352 _.groupBy = group(function(result, key, value) {
353 353 _.has(result, key) ? result[key].push(value) : result[key] = [value];
354 354 });
355 355
356 356 // Indexes the object's values by a criterion, similar to `groupBy`, but for
357 357 // when you know that your index values will be unique.
358 358 _.indexBy = group(function(result, key, value) {
359 359 result[key] = value;
360 360 });
361 361
362 362 // Counts instances of an object that group by a certain criterion. Pass
363 363 // either a string attribute to count by, or a function that returns the
364 364 // criterion.
365 365 _.countBy = group(function(result, key) {
366 366 _.has(result, key) ? result[key]++ : result[key] = 1;
367 367 });
368 368
369 369 // Use a comparator function to figure out the smallest index at which
370 370 // an object should be inserted so as to maintain order. Uses binary search.
371 371 _.sortedIndex = function(array, obj, iterator, context) {
372 372 iterator = lookupIterator(iterator);
373 373 var value = iterator.call(context, obj);
374 374 var low = 0, high = array.length;
375 375 while (low < high) {
376 376 var mid = (low + high) >>> 1;
377 377 iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
378 378 }
379 379 return low;
380 380 };
381 381
382 382 // Safely create a real, live array from anything iterable.
383 383 _.toArray = function(obj) {
384 384 if (!obj) return [];
385 385 if (_.isArray(obj)) return slice.call(obj);
386 386 if (obj.length === +obj.length) return _.map(obj, _.identity);
387 387 return _.values(obj);
388 388 };
389 389
390 390 // Return the number of elements in an object.
391 391 _.size = function(obj) {
392 392 if (obj == null) return 0;
393 393 return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
394 394 };
395 395
396 396 // Array Functions
397 397 // ---------------
398 398
399 399 // Get the first element of an array. Passing **n** will return the first N
400 400 // values in the array. Aliased as `head` and `take`. The **guard** check
401 401 // allows it to work with `_.map`.
402 402 _.first = _.head = _.take = function(array, n, guard) {
403 403 if (array == null) return void 0;
404 404 if ((n == null) || guard) return array[0];
405 405 if (n < 0) return [];
406 406 return slice.call(array, 0, n);
407 407 };
408 408
409 409 // Returns everything but the last entry of the array. Especially useful on
410 410 // the arguments object. Passing **n** will return all the values in
411 411 // the array, excluding the last N. The **guard** check allows it to work with
412 412 // `_.map`.
413 413 _.initial = function(array, n, guard) {
414 414 return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
415 415 };
416 416
417 417 // Get the last element of an array. Passing **n** will return the last N
418 418 // values in the array. The **guard** check allows it to work with `_.map`.
419 419 _.last = function(array, n, guard) {
420 420 if (array == null) return void 0;
421 421 if ((n == null) || guard) return array[array.length - 1];
422 422 return slice.call(array, Math.max(array.length - n, 0));
423 423 };
424 424
425 425 // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
426 426 // Especially useful on the arguments object. Passing an **n** will return
427 427 // the rest N values in the array. The **guard**
428 428 // check allows it to work with `_.map`.
429 429 _.rest = _.tail = _.drop = function(array, n, guard) {
430 430 return slice.call(array, (n == null) || guard ? 1 : n);
431 431 };
432 432
433 433 // Trim out all falsy values from an array.
434 434 _.compact = function(array) {
435 435 return _.filter(array, _.identity);
436 436 };
437 437
438 438 // Internal implementation of a recursive `flatten` function.
439 439 var flatten = function(input, shallow, output) {
440 440 if (shallow && _.every(input, _.isArray)) {
441 441 return concat.apply(output, input);
442 442 }
443 443 each(input, function(value) {
444 444 if (_.isArray(value) || _.isArguments(value)) {
445 445 shallow ? push.apply(output, value) : flatten(value, shallow, output);
446 446 } else {
447 447 output.push(value);
448 448 }
449 449 });
450 450 return output;
451 451 };
452 452
453 453 // Flatten out an array, either recursively (by default), or just one level.
454 454 _.flatten = function(array, shallow) {
455 455 return flatten(array, shallow, []);
456 456 };
457 457
458 458 // Return a version of the array that does not contain the specified value(s).
459 459 _.without = function(array) {
460 460 return _.difference(array, slice.call(arguments, 1));
461 461 };
462 462
463 463 // Split an array into two arrays: one whose elements all satisfy the given
464 464 // predicate, and one whose elements all do not satisfy the predicate.
465 465 _.partition = function(array, predicate) {
466 466 var pass = [], fail = [];
467 467 each(array, function(elem) {
468 468 (predicate(elem) ? pass : fail).push(elem);
469 469 });
470 470 return [pass, fail];
471 471 };
472 472
473 473 // Produce a duplicate-free version of the array. If the array has already
474 474 // been sorted, you have the option of using a faster algorithm.
475 475 // Aliased as `unique`.
476 476 _.uniq = _.unique = function(array, isSorted, iterator, context) {
477 477 if (_.isFunction(isSorted)) {
478 478 context = iterator;
479 479 iterator = isSorted;
480 480 isSorted = false;
481 481 }
482 482 var initial = iterator ? _.map(array, iterator, context) : array;
483 483 var results = [];
484 484 var seen = [];
485 485 each(initial, function(value, index) {
486 486 if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
487 487 seen.push(value);
488 488 results.push(array[index]);
489 489 }
490 490 });
491 491 return results;
492 492 };
493 493
494 494 // Produce an array that contains the union: each distinct element from all of
495 495 // the passed-in arrays.
496 496 _.union = function() {
497 497 return _.uniq(_.flatten(arguments, true));
498 498 };
499 499
500 500 // Produce an array that contains every item shared between all the
501 501 // passed-in arrays.
502 502 _.intersection = function(array) {
503 503 var rest = slice.call(arguments, 1);
504 504 return _.filter(_.uniq(array), function(item) {
505 505 return _.every(rest, function(other) {
506 506 return _.contains(other, item);
507 507 });
508 508 });
509 509 };
510 510
511 511 // Take the difference between one array and a number of other arrays.
512 512 // Only the elements present in just the first array will remain.
513 513 _.difference = function(array) {
514 514 var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
515 515 return _.filter(array, function(value){ return !_.contains(rest, value); });
516 516 };
517 517
518 518 // Zip together multiple lists into a single array -- elements that share
519 519 // an index go together.
520 520 _.zip = function() {
521 521 var length = _.max(_.pluck(arguments, 'length').concat(0));
522 522 var results = new Array(length);
523 523 for (var i = 0; i < length; i++) {
524 524 results[i] = _.pluck(arguments, '' + i);
525 525 }
526 526 return results;
527 527 };
528 528
529 529 // Converts lists into objects. Pass either a single array of `[key, value]`
530 530 // pairs, or two parallel arrays of the same length -- one of keys, and one of
531 531 // the corresponding values.
532 532 _.object = function(list, values) {
533 533 if (list == null) return {};
534 534 var result = {};
535 535 for (var i = 0, length = list.length; i < length; i++) {
536 536 if (values) {
537 537 result[list[i]] = values[i];
538 538 } else {
539 539 result[list[i][0]] = list[i][1];
540 540 }
541 541 }
542 542 return result;
543 543 };
544 544
545 545 // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
546 546 // we need this function. Return the position of the first occurrence of an
547 547 // item in an array, or -1 if the item is not included in the array.
548 548 // Delegates to **ECMAScript 5**'s native `indexOf` if available.
549 549 // If the array is large and already in sort order, pass `true`
550 550 // for **isSorted** to use binary search.
551 551 _.indexOf = function(array, item, isSorted) {
552 552 if (array == null) return -1;
553 553 var i = 0, length = array.length;
554 554 if (isSorted) {
555 555 if (typeof isSorted == 'number') {
556 556 i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);
557 557 } else {
558 558 i = _.sortedIndex(array, item);
559 559 return array[i] === item ? i : -1;
560 560 }
561 561 }
562 562 if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
563 563 for (; i < length; i++) if (array[i] === item) return i;
564 564 return -1;
565 565 };
566 566
567 567 // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
568 568 _.lastIndexOf = function(array, item, from) {
569 569 if (array == null) return -1;
570 570 var hasIndex = from != null;
571 571 if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
572 572 return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
573 573 }
574 574 var i = (hasIndex ? from : array.length);
575 575 while (i--) if (array[i] === item) return i;
576 576 return -1;
577 577 };
578 578
579 579 // Generate an integer Array containing an arithmetic progression. A port of
580 580 // the native Python `range()` function. See
581 581 // [the Python documentation](http://docs.python.org/library/functions.html#range).
582 582 _.range = function(start, stop, step) {
583 583 if (arguments.length <= 1) {
584 584 stop = start || 0;
585 585 start = 0;
586 586 }
587 587 step = arguments[2] || 1;
588 588
589 589 var length = Math.max(Math.ceil((stop - start) / step), 0);
590 590 var idx = 0;
591 591 var range = new Array(length);
592 592
593 593 while(idx < length) {
594 594 range[idx++] = start;
595 595 start += step;
596 596 }
597 597
598 598 return range;
599 599 };
600 600
601 601 // Function (ahem) Functions
602 602 // ------------------
603 603
604 604 // Reusable constructor function for prototype setting.
605 605 var ctor = function(){};
606 606
607 607 // Create a function bound to a given object (assigning `this`, and arguments,
608 608 // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
609 609 // available.
610 610 _.bind = function(func, context) {
611 611 var args, bound;
612 612 if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
613 613 if (!_.isFunction(func)) throw new TypeError;
614 614 args = slice.call(arguments, 2);
615 615 return bound = function() {
616 616 if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
617 617 ctor.prototype = func.prototype;
618 618 var self = new ctor;
619 619 ctor.prototype = null;
620 620 var result = func.apply(self, args.concat(slice.call(arguments)));
621 621 if (Object(result) === result) return result;
622 622 return self;
623 623 };
624 624 };
625 625
626 626 // Partially apply a function by creating a version that has had some of its
627 627 // arguments pre-filled, without changing its dynamic `this` context. _ acts
628 628 // as a placeholder, allowing any combination of arguments to be pre-filled.
629 629 _.partial = function(func) {
630 630 var boundArgs = slice.call(arguments, 1);
631 631 return function() {
632 632 var position = 0;
633 633 var args = boundArgs.slice();
634 634 for (var i = 0, length = args.length; i < length; i++) {
635 635 if (args[i] === _) args[i] = arguments[position++];
636 636 }
637 637 while (position < arguments.length) args.push(arguments[position++]);
638 638 return func.apply(this, args);
639 639 };
640 640 };
641 641
642 642 // Bind a number of an object's methods to that object. Remaining arguments
643 643 // are the method names to be bound. Useful for ensuring that all callbacks
644 644 // defined on an object belong to it.
645 645 _.bindAll = function(obj) {
646 646 var funcs = slice.call(arguments, 1);
647 647 if (funcs.length === 0) throw new Error('bindAll must be passed function names');
648 648 each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
649 649 return obj;
650 650 };
651 651
652 652 // Memoize an expensive function by storing its results.
653 653 _.memoize = function(func, hasher) {
654 654 var memo = {};
655 655 hasher || (hasher = _.identity);
656 656 return function() {
657 657 var key = hasher.apply(this, arguments);
658 658 return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
659 659 };
660 660 };
661 661
662 662 // Delays a function for the given number of milliseconds, and then calls
663 663 // it with the arguments supplied.
664 664 _.delay = function(func, wait) {
665 665 var args = slice.call(arguments, 2);
666 666 return setTimeout(function(){ return func.apply(null, args); }, wait);
667 667 };
668 668
669 669 // Defers a function, scheduling it to run after the current call stack has
670 670 // cleared.
671 671 _.defer = function(func) {
672 672 return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
673 673 };
674 674
675 675 // Returns a function, that, when invoked, will only be triggered at most once
676 676 // during a given window of time. Normally, the throttled function will run
677 677 // as much as it can, without ever going more than once per `wait` duration;
678 678 // but if you'd like to disable the execution on the leading edge, pass
679 679 // `{leading: false}`. To disable execution on the trailing edge, ditto.
680 680 _.throttle = function(func, wait, options) {
681 681 var context, args, result;
682 682 var timeout = null;
683 683 var previous = 0;
684 684 options || (options = {});
685 685 var later = function() {
686 686 previous = options.leading === false ? 0 : _.now();
687 687 timeout = null;
688 688 result = func.apply(context, args);
689 689 context = args = null;
690 690 };
691 691 return function() {
692 692 var now = _.now();
693 693 if (!previous && options.leading === false) previous = now;
694 694 var remaining = wait - (now - previous);
695 695 context = this;
696 696 args = arguments;
697 697 if (remaining <= 0) {
698 698 clearTimeout(timeout);
699 699 timeout = null;
700 700 previous = now;
701 701 result = func.apply(context, args);
702 702 context = args = null;
703 703 } else if (!timeout && options.trailing !== false) {
704 704 timeout = setTimeout(later, remaining);
705 705 }
706 706 return result;
707 707 };
708 708 };
709 709
710 710 // Returns a function, that, as long as it continues to be invoked, will not
711 711 // be triggered. The function will be called after it stops being called for
712 712 // N milliseconds. If `immediate` is passed, trigger the function on the
713 713 // leading edge, instead of the trailing.
714 714 _.debounce = function(func, wait, immediate) {
715 715 var timeout, args, context, timestamp, result;
716 716
717 717 var later = function() {
718 718 var last = _.now() - timestamp;
719 719 if (last < wait) {
720 720 timeout = setTimeout(later, wait - last);
721 721 } else {
722 722 timeout = null;
723 723 if (!immediate) {
724 724 result = func.apply(context, args);
725 725 context = args = null;
726 726 }
727 727 }
728 728 };
729 729
730 730 return function() {
731 731 context = this;
732 732 args = arguments;
733 733 timestamp = _.now();
734 734 var callNow = immediate && !timeout;
735 735 if (!timeout) {
736 736 timeout = setTimeout(later, wait);
737 737 }
738 738 if (callNow) {
739 739 result = func.apply(context, args);
740 740 context = args = null;
741 741 }
742 742
743 743 return result;
744 744 };
745 745 };
746 746
747 747 // Returns a function that will be executed at most one time, no matter how
748 748 // often you call it. Useful for lazy initialization.
749 749 _.once = function(func) {
750 750 var ran = false, memo;
751 751 return function() {
752 752 if (ran) return memo;
753 753 ran = true;
754 754 memo = func.apply(this, arguments);
755 755 func = null;
756 756 return memo;
757 757 };
758 758 };
759 759
760 760 // Returns the first function passed as an argument to the second,
761 761 // allowing you to adjust arguments, run code before and after, and
762 762 // conditionally execute the original function.
763 763 _.wrap = function(func, wrapper) {
764 764 return _.partial(wrapper, func);
765 765 };
766 766
767 767 // Returns a function that is the composition of a list of functions, each
768 768 // consuming the return value of the function that follows.
769 769 _.compose = function() {
770 770 var funcs = arguments;
771 771 return function() {
772 772 var args = arguments;
773 773 for (var i = funcs.length - 1; i >= 0; i--) {
774 774 args = [funcs[i].apply(this, args)];
775 775 }
776 776 return args[0];
777 777 };
778 778 };
779 779
780 780 // Returns a function that will only be executed after being called N times.
781 781 _.after = function(times, func) {
782 782 return function() {
783 783 if (--times < 1) {
784 784 return func.apply(this, arguments);
785 785 }
786 786 };
787 787 };
788 788
789 789 // Object Functions
790 790 // ----------------
791 791
792 792 // Retrieve the names of an object's properties.
793 793 // Delegates to **ECMAScript 5**'s native `Object.keys`
794 794 _.keys = function(obj) {
795 795 if (!_.isObject(obj)) return [];
796 796 if (nativeKeys) return nativeKeys(obj);
797 797 var keys = [];
798 798 for (var key in obj) if (_.has(obj, key)) keys.push(key);
799 799 return keys;
800 800 };
801 801
802 802 // Retrieve the values of an object's properties.
803 803 _.values = function(obj) {
804 804 var keys = _.keys(obj);
805 805 var length = keys.length;
806 806 var values = new Array(length);
807 807 for (var i = 0; i < length; i++) {
808 808 values[i] = obj[keys[i]];
809 809 }
810 810 return values;
811 811 };
812 812
813 813 // Convert an object into a list of `[key, value]` pairs.
814 814 _.pairs = function(obj) {
815 815 var keys = _.keys(obj);
816 816 var length = keys.length;
817 817 var pairs = new Array(length);
818 818 for (var i = 0; i < length; i++) {
819 819 pairs[i] = [keys[i], obj[keys[i]]];
820 820 }
821 821 return pairs;
822 822 };
823 823
824 824 // Invert the keys and values of an object. The values must be serializable.
825 825 _.invert = function(obj) {
826 826 var result = {};
827 827 var keys = _.keys(obj);
828 828 for (var i = 0, length = keys.length; i < length; i++) {
829 829 result[obj[keys[i]]] = keys[i];
830 830 }
831 831 return result;
832 832 };
833 833
834 834 // Return a sorted list of the function names available on the object.
835 835 // Aliased as `methods`
836 836 _.functions = _.methods = function(obj) {
837 837 var names = [];
838 838 for (var key in obj) {
839 839 if (_.isFunction(obj[key])) names.push(key);
840 840 }
841 841 return names.sort();
842 842 };
843 843
844 844 // Extend a given object with all the properties in passed-in object(s).
845 845 _.extend = function(obj) {
846 846 each(slice.call(arguments, 1), function(source) {
847 847 if (source) {
848 848 for (var prop in source) {
849 849 obj[prop] = source[prop];
850 850 }
851 851 }
852 852 });
853 853 return obj;
854 854 };
855 855
856 856 // Return a copy of the object only containing the whitelisted properties.
857 857 _.pick = function(obj) {
858 858 var copy = {};
859 859 var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
860 860 each(keys, function(key) {
861 861 if (key in obj) copy[key] = obj[key];
862 862 });
863 863 return copy;
864 864 };
865 865
866 866 // Return a copy of the object without the blacklisted properties.
867 867 _.omit = function(obj) {
868 868 var copy = {};
869 869 var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
870 870 for (var key in obj) {
871 871 if (!_.contains(keys, key)) copy[key] = obj[key];
872 872 }
873 873 return copy;
874 874 };
875 875
876 876 // Fill in a given object with default properties.
877 877 _.defaults = function(obj) {
878 878 each(slice.call(arguments, 1), function(source) {
879 879 if (source) {
880 880 for (var prop in source) {
881 881 if (obj[prop] === void 0) obj[prop] = source[prop];
882 882 }
883 883 }
884 884 });
885 885 return obj;
886 886 };
887 887
888 888 // Create a (shallow-cloned) duplicate of an object.
889 889 _.clone = function(obj) {
890 890 if (!_.isObject(obj)) return obj;
891 891 return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
892 892 };
893 893
894 894 // Invokes interceptor with the obj, and then returns obj.
895 895 // The primary purpose of this method is to "tap into" a method chain, in
896 896 // order to perform operations on intermediate results within the chain.
897 897 _.tap = function(obj, interceptor) {
898 898 interceptor(obj);
899 899 return obj;
900 900 };
901 901
902 902 // Internal recursive comparison function for `isEqual`.
903 903 var eq = function(a, b, aStack, bStack) {
904 904 // Identical objects are equal. `0 === -0`, but they aren't identical.
905 905 // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
906 906 if (a === b) return a !== 0 || 1 / a == 1 / b;
907 907 // A strict comparison is necessary because `null == undefined`.
908 908 if (a == null || b == null) return a === b;
909 909 // Unwrap any wrapped objects.
910 910 if (a instanceof _) a = a._wrapped;
911 911 if (b instanceof _) b = b._wrapped;
912 912 // Compare `[[Class]]` names.
913 913 var className = toString.call(a);
914 914 if (className != toString.call(b)) return false;
915 915 switch (className) {
916 916 // Strings, numbers, dates, and booleans are compared by value.
917 917 case '[object String]':
918 918 // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
919 919 // equivalent to `new String("5")`.
920 920 return a == String(b);
921 921 case '[object Number]':
922 922 // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
923 923 // other numeric values.
924 924 return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
925 925 case '[object Date]':
926 926 case '[object Boolean]':
927 927 // Coerce dates and booleans to numeric primitive values. Dates are compared by their
928 928 // millisecond representations. Note that invalid dates with millisecond representations
929 929 // of `NaN` are not equivalent.
930 930 return +a == +b;
931 931 // RegExps are compared by their source patterns and flags.
932 932 case '[object RegExp]':
933 933 return a.source == b.source &&
934 934 a.global == b.global &&
935 935 a.multiline == b.multiline &&
936 936 a.ignoreCase == b.ignoreCase;
937 937 }
938 938 if (typeof a != 'object' || typeof b != 'object') return false;
939 939 // Assume equality for cyclic structures. The algorithm for detecting cyclic
940 940 // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
941 941 var length = aStack.length;
942 942 while (length--) {
943 943 // Linear search. Performance is inversely proportional to the number of
944 944 // unique nested structures.
945 945 if (aStack[length] == a) return bStack[length] == b;
946 946 }
947 947 // Objects with different constructors are not equivalent, but `Object`s
948 948 // from different frames are.
949 949 var aCtor = a.constructor, bCtor = b.constructor;
950 950 if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
951 951 _.isFunction(bCtor) && (bCtor instanceof bCtor))
952 952 && ('constructor' in a && 'constructor' in b)) {
953 953 return false;
954 954 }
955 955 // Add the first object to the stack of traversed objects.
956 956 aStack.push(a);
957 957 bStack.push(b);
958 958 var size = 0, result = true;
959 959 // Recursively compare objects and arrays.
960 960 if (className == '[object Array]') {
961 961 // Compare array lengths to determine if a deep comparison is necessary.
962 962 size = a.length;
963 963 result = size == b.length;
964 964 if (result) {
965 965 // Deep compare the contents, ignoring non-numeric properties.
966 966 while (size--) {
967 967 if (!(result = eq(a[size], b[size], aStack, bStack))) break;
968 968 }
969 969 }
970 970 } else {
971 971 // Deep compare objects.
972 972 for (var key in a) {
973 973 if (_.has(a, key)) {
974 974 // Count the expected number of properties.
975 975 size++;
976 976 // Deep compare each member.
977 977 if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
978 978 }
979 979 }
980 980 // Ensure that both objects contain the same number of properties.
981 981 if (result) {
982 982 for (key in b) {
983 983 if (_.has(b, key) && !(size--)) break;
984 984 }
985 985 result = !size;
986 986 }
987 987 }
988 988 // Remove the first object from the stack of traversed objects.
989 989 aStack.pop();
990 990 bStack.pop();
991 991 return result;
992 992 };
993 993
994 994 // Perform a deep comparison to check if two objects are equal.
995 995 _.isEqual = function(a, b) {
996 996 return eq(a, b, [], []);
997 997 };
998 998
999 999 // Is a given array, string, or object empty?
1000 1000 // An "empty" object has no enumerable own-properties.
1001 1001 _.isEmpty = function(obj) {
1002 1002 if (obj == null) return true;
1003 1003 if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
1004 1004 for (var key in obj) if (_.has(obj, key)) return false;
1005 1005 return true;
1006 1006 };
1007 1007
1008 1008 // Is a given value a DOM element?
1009 1009 _.isElement = function(obj) {
1010 1010 return !!(obj && obj.nodeType === 1);
1011 1011 };
1012 1012
1013 1013 // Is a given value an array?
1014 1014 // Delegates to ECMA5's native Array.isArray
1015 1015 _.isArray = nativeIsArray || function(obj) {
1016 1016 return toString.call(obj) == '[object Array]';
1017 1017 };
1018 1018
1019 1019 // Is a given variable an object?
1020 1020 _.isObject = function(obj) {
1021 1021 return obj === Object(obj);
1022 1022 };
1023 1023
1024 1024 // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
1025 1025 each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
1026 1026 _['is' + name] = function(obj) {
1027 1027 return toString.call(obj) == '[object ' + name + ']';
1028 1028 };
1029 1029 });
1030 1030
1031 1031 // Define a fallback version of the method in browsers (ahem, IE), where
1032 1032 // there isn't any inspectable "Arguments" type.
1033 1033 if (!_.isArguments(arguments)) {
1034 1034 _.isArguments = function(obj) {
1035 1035 return !!(obj && _.has(obj, 'callee'));
1036 1036 };
1037 1037 }
1038 1038
1039 1039 // Optimize `isFunction` if appropriate.
1040 1040 if (typeof (/./) !== 'function') {
1041 1041 _.isFunction = function(obj) {
1042 1042 return typeof obj === 'function';
1043 1043 };
1044 1044 }
1045 1045
1046 1046 // Is a given object a finite number?
1047 1047 _.isFinite = function(obj) {
1048 1048 return isFinite(obj) && !isNaN(parseFloat(obj));
1049 1049 };
1050 1050
1051 1051 // Is the given value `NaN`? (NaN is the only number which does not equal itself).
1052 1052 _.isNaN = function(obj) {
1053 1053 return _.isNumber(obj) && obj != +obj;
1054 1054 };
1055 1055
1056 1056 // Is a given value a boolean?
1057 1057 _.isBoolean = function(obj) {
1058 1058 return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
1059 1059 };
1060 1060
1061 1061 // Is a given value equal to null?
1062 1062 _.isNull = function(obj) {
1063 1063 return obj === null;
1064 1064 };
1065 1065
1066 1066 // Is a given variable undefined?
1067 1067 _.isUndefined = function(obj) {
1068 1068 return obj === void 0;
1069 1069 };
1070 1070
1071 1071 // Shortcut function for checking if an object has a given property directly
1072 1072 // on itself (in other words, not on a prototype).
1073 1073 _.has = function(obj, key) {
1074 1074 return hasOwnProperty.call(obj, key);
1075 1075 };
1076 1076
1077 1077 // Utility Functions
1078 1078 // -----------------
1079 1079
1080 1080 // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
1081 1081 // previous owner. Returns a reference to the Underscore object.
1082 1082 _.noConflict = function() {
1083 1083 root._ = previousUnderscore;
1084 1084 return this;
1085 1085 };
1086 1086
1087 1087 // Keep the identity function around for default iterators.
1088 1088 _.identity = function(value) {
1089 1089 return value;
1090 1090 };
1091 1091
1092 1092 _.constant = function(value) {
1093 1093 return function () {
1094 1094 return value;
1095 1095 };
1096 1096 };
1097 1097
1098 1098 _.property = function(key) {
1099 1099 return function(obj) {
1100 1100 return obj[key];
1101 1101 };
1102 1102 };
1103 1103
1104 1104 // Returns a predicate for checking whether an object has a given set of `key:value` pairs.
1105 1105 _.matches = function(attrs) {
1106 1106 return function(obj) {
1107 1107 if (obj === attrs) return true; //avoid comparing an object to itself.
1108 1108 for (var key in attrs) {
1109 1109 if (attrs[key] !== obj[key])
1110 1110 return false;
1111 1111 }
1112 1112 return true;
1113 1113 }
1114 1114 };
1115 1115
1116 1116 // Run a function **n** times.
1117 1117 _.times = function(n, iterator, context) {
1118 1118 var accum = Array(Math.max(0, n));
1119 1119 for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
1120 1120 return accum;
1121 1121 };
1122 1122
1123 1123 // Return a random integer between min and max (inclusive).
1124 1124 _.random = function(min, max) {
1125 1125 if (max == null) {
1126 1126 max = min;
1127 1127 min = 0;
1128 1128 }
1129 1129 return min + Math.floor(Math.random() * (max - min + 1));
1130 1130 };
1131 1131
1132 1132 // A (possibly faster) way to get the current timestamp as an integer.
1133 1133 _.now = Date.now || function() { return new Date().getTime(); };
1134 1134
1135 1135 // List of HTML entities for escaping.
1136 1136 var entityMap = {
1137 1137 escape: {
1138 1138 '&': '&amp;',
1139 1139 '<': '&lt;',
1140 1140 '>': '&gt;',
1141 1141 '"': '&quot;',
1142 1142 "'": '&#x27;'
1143 1143 }
1144 1144 };
1145 1145 entityMap.unescape = _.invert(entityMap.escape);
1146 1146
1147 1147 // Regexes containing the keys and values listed immediately above.
1148 1148 var entityRegexes = {
1149 1149 escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
1150 1150 unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
1151 1151 };
1152 1152
1153 1153 // Functions for escaping and unescaping strings to/from HTML interpolation.
1154 1154 _.each(['escape', 'unescape'], function(method) {
1155 1155 _[method] = function(string) {
1156 1156 if (string == null) return '';
1157 1157 return ('' + string).replace(entityRegexes[method], function(match) {
1158 1158 return entityMap[method][match];
1159 1159 });
1160 1160 };
1161 1161 });
1162 1162
1163 1163 // If the value of the named `property` is a function then invoke it with the
1164 1164 // `object` as context; otherwise, return it.
1165 1165 _.result = function(object, property) {
1166 1166 if (object == null) return void 0;
1167 1167 var value = object[property];
1168 1168 return _.isFunction(value) ? value.call(object) : value;
1169 1169 };
1170 1170
1171 1171 // Add your own custom functions to the Underscore object.
1172 1172 _.mixin = function(obj) {
1173 1173 each(_.functions(obj), function(name) {
1174 1174 var func = _[name] = obj[name];
1175 1175 _.prototype[name] = function() {
1176 1176 var args = [this._wrapped];
1177 1177 push.apply(args, arguments);
1178 1178 return result.call(this, func.apply(_, args));
1179 1179 };
1180 1180 });
1181 1181 };
1182 1182
1183 1183 // Generate a unique integer id (unique within the entire client session).
1184 1184 // Useful for temporary DOM ids.
1185 1185 var idCounter = 0;
1186 1186 _.uniqueId = function(prefix) {
1187 1187 var id = ++idCounter + '';
1188 1188 return prefix ? prefix + id : id;
1189 1189 };
1190 1190
1191 1191 // By default, Underscore uses ERB-style template delimiters, change the
1192 1192 // following template settings to use alternative delimiters.
1193 1193 _.templateSettings = {
1194 1194 evaluate : /<%([\s\S]+?)%>/g,
1195 1195 interpolate : /<%=([\s\S]+?)%>/g,
1196 1196 escape : /<%-([\s\S]+?)%>/g
1197 1197 };
1198 1198
1199 1199 // When customizing `templateSettings`, if you don't want to define an
1200 1200 // interpolation, evaluation or escaping regex, we need one that is
1201 1201 // guaranteed not to match.
1202 1202 var noMatch = /(.)^/;
1203 1203
1204 1204 // Certain characters need to be escaped so that they can be put into a
1205 1205 // string literal.
1206 1206 var escapes = {
1207 1207 "'": "'",
1208 1208 '\\': '\\',
1209 1209 '\r': 'r',
1210 1210 '\n': 'n',
1211 1211 '\t': 't',
1212 1212 '\u2028': 'u2028',
1213 1213 '\u2029': 'u2029'
1214 1214 };
1215 1215
1216 1216 var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
1217 1217
1218 1218 // JavaScript micro-templating, similar to John Resig's implementation.
1219 1219 // Underscore templating handles arbitrary delimiters, preserves whitespace,
1220 1220 // and correctly escapes quotes within interpolated code.
1221 1221 _.template = function(text, data, settings) {
1222 1222 var render;
1223 1223 settings = _.defaults({}, settings, _.templateSettings);
1224 1224
1225 1225 // Combine delimiters into one regular expression via alternation.
1226 1226 var matcher = new RegExp([
1227 1227 (settings.escape || noMatch).source,
1228 1228 (settings.interpolate || noMatch).source,
1229 1229 (settings.evaluate || noMatch).source
1230 1230 ].join('|') + '|$', 'g');
1231 1231
1232 1232 // Compile the template source, escaping string literals appropriately.
1233 1233 var index = 0;
1234 1234 var source = "__p+='";
1235 1235 text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
1236 1236 source += text.slice(index, offset)
1237 1237 .replace(escaper, function(match) { return '\\' + escapes[match]; });
1238 1238
1239 1239 if (escape) {
1240 1240 source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
1241 1241 }
1242 1242 if (interpolate) {
1243 1243 source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
1244 1244 }
1245 1245 if (evaluate) {
1246 1246 source += "';\n" + evaluate + "\n__p+='";
1247 1247 }
1248 1248 index = offset + match.length;
1249 1249 return match;
1250 1250 });
1251 1251 source += "';\n";
1252 1252
1253 1253 // If a variable is not specified, place data values in local scope.
1254 1254 if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
1255 1255
1256 1256 source = "var __t,__p='',__j=Array.prototype.join," +
1257 1257 "print=function(){__p+=__j.call(arguments,'');};\n" +
1258 1258 source + "return __p;\n";
1259 1259
1260 1260 try {
1261 1261 render = new Function(settings.variable || 'obj', '_', source);
1262 1262 } catch (e) {
1263 1263 e.source = source;
1264 1264 throw e;
1265 1265 }
1266 1266
1267 1267 if (data) return render(data, _);
1268 1268 var template = function(data) {
1269 1269 return render.call(this, data, _);
1270 1270 };
1271 1271
1272 1272 // Provide the compiled function source as a convenience for precompilation.
1273 1273 template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
1274 1274
1275 1275 return template;
1276 1276 };
1277 1277
1278 1278 // Add a "chain" function, which will delegate to the wrapper.
1279 1279 _.chain = function(obj) {
1280 1280 return _(obj).chain();
1281 1281 };
1282 1282
1283 1283 // OOP
1284 1284 // ---------------
1285 1285 // If Underscore is called as a function, it returns a wrapped object that
1286 1286 // can be used OO-style. This wrapper holds altered versions of all the
1287 1287 // underscore functions. Wrapped objects may be chained.
1288 1288
1289 1289 // Helper function to continue chaining intermediate results.
1290 1290 var result = function(obj) {
1291 1291 return this._chain ? _(obj).chain() : obj;
1292 1292 };
1293 1293
1294 1294 // Add all of the Underscore functions to the wrapper object.
1295 1295 _.mixin(_);
1296 1296
1297 1297 // Add all mutator Array functions to the wrapper.
1298 1298 each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
1299 1299 var method = ArrayProto[name];
1300 1300 _.prototype[name] = function() {
1301 1301 var obj = this._wrapped;
1302 1302 method.apply(obj, arguments);
1303 1303 if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
1304 1304 return result.call(this, obj);
1305 1305 };
1306 1306 });
1307 1307
1308 1308 // Add all accessor Array functions to the wrapper.
1309 1309 each(['concat', 'join', 'slice'], function(name) {
1310 1310 var method = ArrayProto[name];
1311 1311 _.prototype[name] = function() {
1312 1312 return result.call(this, method.apply(this._wrapped, arguments));
1313 1313 };
1314 1314 });
1315 1315
1316 1316 _.extend(_.prototype, {
1317 1317
1318 1318 // Start chaining a wrapped Underscore object.
1319 1319 chain: function() {
1320 1320 this._chain = true;
1321 1321 return this;
1322 1322 },
1323 1323
1324 1324 // Extracts the result from a wrapped and chained object.
1325 1325 value: function() {
1326 1326 return this._wrapped;
1327 1327 }
1328 1328
1329 1329 });
1330 1330
1331 1331 // AMD registration happens at the end for compatibility with AMD loaders
1332 1332 // that may not enforce next-turn semantics on modules. Even though general
1333 1333 // practice for AMD registration is to be anonymous, underscore registers
1334 1334 // as a named module because, like jQuery, it is a base library that is
1335 1335 // popular enough to be bundled in a third party lib, but not be part of
1336 1336 // an AMD load request. Those cases could generate an error when an
1337 1337 // anonymous define() is called outside of a loader request.
1338 1338 if (typeof define === 'function' && define.amd) {
1339 1339 define('underscore', [], function() {
1340 1340 return _;
1341 1341 });
1342 1342 }
1343 1343 }).call(this);
1344 1344
1345 1345 ;/*
1346 1346 AngularJS v1.5.5
1347 1347 (c) 2010-2016 Google, Inc. http://angularjs.org
1348 1348 License: MIT
1349 1349 */
1350 1350 (function(v){'use strict';function O(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.5/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function ya(a){if(null==a||Va(a))return!1;if(K(a)||F(a)||B&&a instanceof B)return!0;
1351 1351 var b="length"in Object(a)&&a.length;return Q(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function q(a,b,d){var c,e;if(a)if(E(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(K(a)||ya(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(oc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
1352 1352 b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function pc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function qc(a){return function(b,d){a(d,b)}}function Xd(){return++nb}function Nb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(G(g)||E(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var n=h[k],m=g[n];d&&G(m)?fa(m)?a[n]=new Date(m.valueOf()):Wa(m)?a[n]=new RegExp(m):m.nodeName?a[n]=m.cloneNode(!0):
1353 1353 Ob(m)?a[n]=m.clone():(G(a[n])||(a[n]=K(m)?[]:{}),Nb(a[n],[m],!0)):a[n]=m}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function R(a){return Nb(a,za.call(arguments,1),!1)}function Yd(a){return Nb(a,za.call(arguments,1),!0)}function X(a){return parseInt(a,10)}function Pb(a,b){return R(Object.create(a),b)}function C(){}function Xa(a){return a}function da(a){return function(){return a}}function rc(a){return E(a.toString)&&a.toString!==ma}function y(a){return"undefined"===typeof a}function x(a){return"undefined"!==
1354 1354 typeof a}function G(a){return null!==a&&"object"===typeof a}function oc(a){return null!==a&&"object"===typeof a&&!sc(a)}function F(a){return"string"===typeof a}function Q(a){return"number"===typeof a}function fa(a){return"[object Date]"===ma.call(a)}function E(a){return"function"===typeof a}function Wa(a){return"[object RegExp]"===ma.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Da(a){return"boolean"===typeof a}function Zd(a){return a&&Q(a.length)&&
1355 1355 $d.test(ma.call(a))}function Ob(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function ae(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function va(a){return P(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function qa(a,b){function d(a,b){var d=b.$$hashKey,e;if(K(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(oc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
1356 1356 (b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!G(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw Aa("cpws");var b=!1,c=e(a);void 0===c&&(c=K(a)?[]:Object.create(sc(a)),b=!0);f.push(a);g.push(c);return b?d(a,c):c}function e(a){switch(ma.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(c(a.buffer));
1357 1357 case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(E(a.cloneNode))return a.cloneNode(!0)}var f=[],
1358 1358 g=[];if(b){if(Zd(b)||"[object ArrayBuffer]"===ma.call(b))throw Aa("cpta");if(a===b)throw Aa("cpi");K(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]});f.push(a);g.push(b);return d(a,b)}return c(a)}function ha(a,b){if(K(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(G(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function pa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d==typeof b&&
1359 1359 "object"==d)if(K(a)){if(!K(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!pa(a[c],b[c]))return!1;return!0}}else{if(fa(a))return fa(b)?pa(a.getTime(),b.getTime()):!1;if(Wa(a))return Wa(b)?a.toString()==b.toString():!1;if(Ya(a)||Ya(b)||Va(a)||Va(b)||K(b)||fa(b)||Wa(b))return!1;d=T();for(c in a)if("$"!==c.charAt(0)&&!E(a[c])){if(!pa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&x(b[c])&&!E(b[c]))return!1;return!0}return!1}function $a(a,b,d){return a.concat(za.call(b,
1360 1360 d))}function tc(a,b){var d=2<arguments.length?za.call(arguments,2):[];return!E(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function be(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&v.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE");return d}function ab(a,b){if(!y(a))return Q(b)||(b=b?2:null),JSON.stringify(a,be,
1361 1361 b)}function uc(a){return F(a)?JSON.parse(a):a}function vc(a,b){a=a.replace(ce,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Qb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=vc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function wa(a){a=B(a).clone();try{a.empty()}catch(b){}var d=B("<div>").append(a).html();try{return a[0].nodeType===Ma?P(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+P(b)})}catch(c){return P(d)}}
1362 1362 function wc(a){try{return decodeURIComponent(a)}catch(b){}}function xc(a){var b={};q((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=wc(e),x(e)&&(f=x(f)?wc(f):!0,ua.call(b,e)?K(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Rb(a){var b=[];q(a,function(a,c){K(a)?q(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}
1363 1363 function ob(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function de(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,F(d=a.getAttribute(d)))return d;return null}function ee(a,b){var d,c,e={};q(Na,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});
1364 1364 q(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==de(d,"strict-di"),b(d,c?[c]:[],e))}function yc(a,b,d){G(d)||(d={});d=R({strictDi:!1},d);var c=function(){a=B(a);if(a.injector()){var c=a[0]===v.document?"document":wa(a);throw Aa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);
1365 1365 b.unshift("ng");c=bb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;v&&e.test(v.name)&&(d.debugInfoEnabled=!0,v.name=v.name.replace(e,""));if(v&&!f.test(v.name))return c();v.name=v.name.replace(f,"");ea.resumeBootstrap=function(a){q(a,function(a){b.push(a)});return c()};E(ea.resumeDeferredBootstrap)&&ea.resumeDeferredBootstrap()}function fe(){v.name=
1366 1366 "NG_ENABLE_DEBUG_INFO!"+v.name;v.location.reload()}function ge(a){a=ea.element(a).injector();if(!a)throw Aa("test");return a.get("$$testability")}function zc(a,b){b=b||"_";return a.replace(he,function(a,c){return(c?b:"")+a.toLowerCase()})}function ie(){var a;if(!Ac){var b=pb();(Z=y(b)?v.jQuery:b?v[b]:void 0)&&Z.fn.on?(B=Z,R(Z.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=Z.cleanData,Z.cleanData=function(b){for(var c,
1367 1367 e=0,f;null!=(f=b[e]);e++)(c=Z._data(f,"events"))&&c.$destroy&&Z(f).triggerHandler("$destroy");a(b)}):B=U;ea.element=B;Ac=!0}}function qb(a,b,d){if(!a)throw Aa("areq",b||"?",d||"required");return a}function Pa(a,b,d){d&&K(a)&&(a=a[a.length-1]);qb(E(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Qa(a,b){if("hasOwnProperty"===a)throw Aa("badname",b);}function Bc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=
1368 1368 b[g],a&&(a=(e=a)[c]);return!d&&E(a)?tc(e,a):a}function rb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=B(za.call(a,0,e))),c.push(b);return c||a}function T(){return Object.create(null)}function je(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=O("$injector"),c=O("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||O;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&
1369 1369 (a[f]=null);return b(a,f,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return M}}function b(a,d){return function(b,e){e&&E(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return M}}if(!g)throw d("nomod",f);var c=[],e=[],r=[],N=a("$injector","invoke","push",e),M={_invokeQueue:c,_configBlocks:e,_runBlocks:r,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide",
1370 1370 "constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:N,run:function(a){r.push(a);return this}};h&&N(h);return M})}})}function ke(a){R(a,{bootstrap:yc,copy:qa,extend:R,merge:Yd,equals:pa,element:B,forEach:q,injector:bb,noop:C,bind:tc,toJson:ab,fromJson:uc,identity:Xa,isUndefined:y,
1371 1371 isDefined:x,isString:F,isFunction:E,isObject:G,isNumber:Q,isElement:Ob,isArray:K,version:le,isDate:fa,lowercase:P,uppercase:sb,callbacks:{counter:0},getTestability:ge,$$minErr:O,$$csp:Ea,reloadWithDebugInfo:fe});Sb=je(v);Sb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:me});a.provider("$compile",Cc).directive({a:ne,input:Dc,textarea:Dc,form:oe,script:pe,select:qe,style:re,option:se,ngBind:te,ngBindHtml:ue,ngBindTemplate:ve,ngClass:we,ngClassEven:xe,ngClassOdd:ye,ngCloak:ze,ngController:Ae,
1372 1372 ngForm:Be,ngHide:Ce,ngIf:De,ngInclude:Ee,ngInit:Fe,ngNonBindable:Ge,ngPluralize:He,ngRepeat:Ie,ngShow:Je,ngStyle:Ke,ngSwitch:Le,ngSwitchWhen:Me,ngSwitchDefault:Ne,ngOptions:Oe,ngTransclude:Pe,ngModel:Qe,ngList:Re,ngChange:Se,pattern:Ec,ngPattern:Ec,required:Fc,ngRequired:Fc,minlength:Gc,ngMinlength:Gc,maxlength:Hc,ngMaxlength:Hc,ngValue:Te,ngModelOptions:Ue}).directive({ngInclude:Ve}).directive(tb).directive(Ic);a.provider({$anchorScroll:We,$animate:Xe,$animateCss:Ye,$$animateJs:Ze,$$animateQueue:$e,
1373 1373 $$AnimateRunner:af,$$animateAsyncRun:bf,$browser:cf,$cacheFactory:df,$controller:ef,$document:ff,$exceptionHandler:gf,$filter:Jc,$$forceReflow:hf,$interpolate:jf,$interval:kf,$http:lf,$httpParamSerializer:mf,$httpParamSerializerJQLike:nf,$httpBackend:of,$xhrFactory:pf,$location:qf,$log:rf,$parse:sf,$rootScope:tf,$q:uf,$$q:vf,$sce:wf,$sceDelegate:xf,$sniffer:yf,$templateCache:zf,$templateRequest:Af,$$testability:Bf,$timeout:Cf,$window:Df,$$rAF:Ef,$$jqLite:Ff,$$HashMap:Gf,$$cookieReader:Hf})}])}function cb(a){return a.replace(If,
1374 1374 function(a,d,c,e){return e?c.toUpperCase():c}).replace(Jf,"Moz$1")}function Kc(a){a=a.nodeType;return 1===a||!a||9===a}function Lc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Tb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Kf.exec(a)||["",""])[1].toLowerCase();c=ia[c]||ia._default;d.innerHTML=c[1]+a.replace(Lf,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=$a(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";q(f,function(a){e.appendChild(a)});
1375 1375 return e}function Mc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function U(a){if(a instanceof U)return a;var b;F(a)&&(a=V(a),b=!0);if(!(this instanceof U)){if(b&&"<"!=a.charAt(0))throw Ub("nosel");return new U(a)}if(b){b=v.document;var d;a=(d=Mf.exec(a))?[b.createElement(d[1])]:(d=Lc(a,b))?d.childNodes:[]}Nc(this,a)}function Vb(a){return a.cloneNode(!0)}function ub(a,b){b||db(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)db(d[c])}function Oc(a,
1376 1376 b,d,c){if(x(c))throw Ub("offargs");var e=(c=vb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];x(d)&&Za(c||[],d);x(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};q(b.split(" "),function(a){g(a);wb[a]&&g(wb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function db(a,b){var d=a.ng339,c=d&&eb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Oc(a)),delete eb[d],a.ng339=void 0))}function vb(a,b){var d=
1377 1377 a.ng339,d=d&&eb[d];b&&!d&&(a.ng339=d=++Nf,d=eb[d]={events:{},data:{},handle:void 0});return d}function Wb(a,b,d){if(Kc(a)){var c=x(d),e=!c&&b&&!G(b),f=!b;a=(a=vb(a,!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];R(a,b)}}}function xb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function yb(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",V((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g,
1378 1378 " ").replace(" "+V(b)+" "," ")))})}function zb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=V(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",V(d))}}function Nc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Pc(a,b){return Ab(a,"$"+(b||"ngController")+"Controller")}function Ab(a,
1379 1379 b,d){9==a.nodeType&&(a=a.documentElement);for(b=K(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(x(d=B.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Qc(a){for(ub(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Bb(a,b){b||ub(a);var d=a.parentNode;d&&d.removeChild(a)}function Of(a,b){b=b||v;if("complete"===b.document.readyState)b.setTimeout(a);else B(b).on("load",a)}function Rc(a,b){var d=Cb[b.toLowerCase()];return d&&Sc[va(a)]&&d}function Pf(a,b){var d=function(c,
1380 1380 d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(y(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Qf;1<g&&(f=ha(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=
1381 1381 a;return d}function Qf(a,b,d){d.call(a,b)}function Rf(a,b,d){var c=b.relatedTarget;c&&(c===a||Sf.call(a,c))||d.call(a,b)}function Ff(){this.$get=function(){return R(U,{hasClass:function(a,b){a.attr&&(a=a[0]);return xb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return yb(a,b)}})}}function Fa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=
1382 1382 d+":"+(b||Xd)():d+":"+a}function Ra(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function Tc(a){a=Function.prototype.toString.call(a).replace(Tf,"");return a.match(Uf)||a.match(Vf)}function Wf(a){return(a=Tc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function bb(a,b){function d(a){return function(b,c){if(G(b))q(b,qc(a));else return a(b,c)}}function c(a,b){Qa(a,"service");if(E(b)||K(b))b=r.instantiate(b);if(!b.$get)throw Ga("pget",a);return m[a+"Provider"]=
1383 1383 b}function e(a,b){return function(){var c=w.invoke(b,this);if(y(c))throw Ga("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){qb(y(a)||K(a),"modulesToLoad","not an array");var b=[],c;q(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=r.get(e[0]);f[e[1]].apply(f,e[2])}}if(!n.get(a)){n.put(a,!0);try{F(a)?(c=Sb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):E(a)?b.push(r.invoke(a)):K(a)?b.push(r.invoke(a)):
1384 1384 Pa(a,"module")}catch(e){throw K(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ga("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=bb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];
1385 1385 if("string"!==typeof l)throw Ga("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);K(a)&&(a=a[a.length-1]);d=11>=Ca?!1:"function"===typeof a&&/^(?:class\s|constructor\()/.test(Function.prototype.toString.call(a));return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=K(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,
1386 1386 a))},get:d,annotate:bb.$$annotate,has:function(b){return m.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],n=new Ra([],!0),m={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,da(b),!1)}),constant:d(function(a,b){Qa(a,"constant");m[a]=b;N[a]=b}),decorator:function(a,b){var c=r.get(a+"Provider"),d=c.$get;c.$get=function(){var a=w.invoke(d,c);return w.invoke(b,null,
1387 1387 {$delegate:a})}}}},r=m.$injector=h(m,function(a,b){ea.isString(b)&&l.push(b);throw Ga("unpr",l.join(" <- "));}),N={},M=h(N,function(a,b){var c=r.get(a+"Provider",b);return w.invoke(c.$get,c,void 0,a)}),w=M;m.$injectorProvider={$get:da(M)};var p=g(a),w=M.get("$injector");w.strictDi=b;q(p,function(a){a&&w.invoke(a)});return w}function We(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,
1388 1388 function(a){if("a"===va(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;E(c)?c=c():Ob(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Q(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=F(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===
1389 1389 b&&""===a||Of(function(){c.$evalAsync(g)})});return g}]}function fb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;K(a)&&(a=a.join(" "));K(b)&&(b=b.join(" "));return a+" "+b}function Xf(a){F(a)&&(a=a.split(" "));var b=T();q(a,function(a){a.length&&(b[a]=!0)});return b}function Ha(a){return G(a)?a:{}}function Yf(a,b,d,c){function e(a){try{a.apply(null,za.call(arguments,1))}finally{if(M--,0===M)for(;w.length;)try{w.pop()()}catch(b){d.error(b)}}}function f(){u=null;g();h()}function g(){p=I();
1390 1390 p=y(p)?null:p;pa(p,L)&&(p=L);L=p}function h(){if(t!==k.url()||H!==p)t=k.url(),H=p,q(J,function(a){a(k.url(),p)})}var k=this,l=a.location,n=a.history,m=a.setTimeout,r=a.clearTimeout,N={};k.isMock=!1;var M=0,w=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){M++};k.notifyWhenNoOutstandingRequests=function(a){0===M?a():w.push(a)};var p,H,t=l.href,z=b.find("base"),u=null,I=c.history?function(){try{return n.state}catch(a){}}:C;g();H=p;k.url=function(b,d,e){y(e)&&(e=null);l!==
1391 1391 a.location&&(l=a.location);n!==a.history&&(n=a.history);if(b){var f=H===e;if(t===b&&(!c.history||f))return k;var h=t&&Ia(t)===Ia(b);t=b;H=e;if(!c.history||h&&f){if(!h||u)u=b;d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b;l.href!==b&&(u=b)}else n[d?"replaceState":"pushState"](e,"",b),g(),H=p;return k}return u||l.href.replace(/%27/g,"'")};k.state=function(){return p};var J=[],D=!1,L=null;k.onUrlChange=function(b){if(!D){if(c.history)B(a).on("popstate",f);B(a).on("hashchange",
1392 1392 f);D=!0}J.push(b);return b};k.$$applicationDestroyed=function(){B(a).off("hashchange popstate",f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=z.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;M++;c=m(function(){delete N[c];e(a)},b||0);N[c]=!0;return c};k.defer.cancel=function(a){return N[a]?(delete N[a],r(a),e(C),!0):!1}}function cf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Yf(a,c,b,d)}]}function df(){this.$get=
1393 1393 function(){function a(a,c){function e(a){a!=m&&(r?r==a&&(r=a.n):r=a,f(a.n,a.p),f(a,m),m=a,m.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw O("$cacheFactory")("iid",a);var g=0,h=R({},c,{id:a}),k=T(),l=c&&c.capacity||Number.MAX_VALUE,n=T(),m=null,r=null;return b[a]={put:function(a,b){if(!y(b)){if(l<Number.MAX_VALUE){var c=n[a]||(n[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(r.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=n[a];if(!b)return;e(b)}return k[a]},
1394 1394 remove:function(a){if(l<Number.MAX_VALUE){var b=n[a];if(!b)return;b==m&&(m=b.p);b==r&&(r=b.n);f(b.n,b.p);delete n[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=T();g=0;n=T();m=r=null},destroy:function(){n=h=k=null;delete b[a]},info:function(){return R({},h,{size:g})}}}var b={};a.info=function(){var a={};q(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function zf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Cc(a,b){function d(a,
1395 1395 b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e=T();q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(n[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==P(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,
1396 1396 h=ae("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/,n=T();this.directive=function M(b,d){Qa(b,"directive");F(b)?(c(b),qb(d,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];q(e[b],function(e,f){try{var g=a.invoke(e);E(g)?g={compile:da(g)}:!g.compile&&g.link&&(g.compile=da(g.link));g.priority=g.priority||0;g.index=f;g.name=g.name||b;g.require=g.require||g.controller&&g.name;g.restrict=
1397 1397 g.restrict||"EA";g.$$moduleName=e.$$moduleName;d.push(g)}catch(h){c(h)}});return d}])),e[b].push(d)):q(b,qc(M));return this};this.component=function(a,b){function c(a){function e(b){return E(b)||K(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Uc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",
1398 1398 require:b.require};q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}var d=b.controller||function(){};q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,E(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return x(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var m=!0;this.debugInfoEnabled=
1399 1399 function(a){return x(a)?(m=a,this):m};var r=10;this.onChangesTtl=function(a){return arguments.length?(r=a,this):r};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,n,t,z,u,I,J,D){function L(){try{if(!--qa)throw Z=void 0,ga("infchng",r);u.$apply(function(){for(var a=0,b=Z.length;a<b;++a)Z[a]();Z=void 0})}finally{qa++}}function S(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<
1400 1400 e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function $(a,b,c){na.innerHTML="<span "+b+">";b=na.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function A(a,b){try{a.addClass(b)}catch(c){}}function ba(a,b,c,d,e){a instanceof B||(a=B(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Ma&&k.nodeValue.match(f)&&Mc(k,a[g]=v.document.createElement("span"))}var l=s(a,b,a,c,d,e);ba.$$addScopeClass(a);var m=null;return function(b,
1401 1401 c,d){qb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude);m||(m=(d=d&&d[0])?"foreignobject"!==va(d)&&ma.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==m?B(ca(m,B("<div>").append(a).html())):c?Oa.clone.call(a):a;if(g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);ba.$$addScopeInfo(d,b);c&&c(d,b);l&&l(b,d,d,f);return d}}function s(a,b,c,d,e,f){function g(a,
1402 1402 c,d,e){var f,k,l,m,n,t,p;if(r)for(p=Array(c.length),m=0;m<h.length;m+=3)f=h[m],p[f]=c[f];else p=c;m=0;for(n=h.length;m<n;)k=p[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),ba.$$addScopeInfo(B(k),l)):l=a,t=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,t)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k,l,m,n,r,t=0;t<a.length;t++){k=new S;l=x(a[t],[],k,0===t?d:void 0,e);(f=l.length?Ba(l,a[t],k,b,c,null,[],[],f):null)&&f.scope&&ba.$$addScopeClass(k.$$element);
1403 1403 k=f&&f.terminal||!(m=a[t].childNodes)||!m.length?null:s(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(t,f,k),n=!0,r=r||f;f=null}return n?g:null}function ka(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=T(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function x(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:la(b,
1404 1404 xa(va(a)),"E",d,e);for(var l,m,n,t=a.attributes,r=0,p=t&&t.length;r<p;r++){var I=!1,D=!1;l=t[r];k=l.name;m=V(l.value);l=xa(k);if(n=ya.test(l))k=k.replace(Vc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(l=l.match(Aa))&&Q(l[1])&&(I=k,D=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=xa(k.toLowerCase());h[l]=k;if(n||!c.hasOwnProperty(l))c[l]=m,Rc(a,l)&&(c[l]=!0);fa(a,b,m,l,n);la(b,l,"A",d,e,I,D)}a=a.className;G(a)&&(a=a.animVal);if(F(a)&&""!==a)for(;k=g.exec(a);)l=xa(k[2]),
1405 1405 la(b,l,"C",d,e)&&(c[l]=V(k[3])),a=a.substr(k.index+k[0].length);break;case Ma:if(11===Ca)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Ma;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);X(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l=xa(k[1]),la(b,l,"M",d,e)&&(c[l]=V(k[2]))}catch(J){}}b.sort(Y);return b}function Wc(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&
1406 1406 e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function Xc(a,b,c){return function(d,e,f,g,h){e=Wc(e[0],b,c);return a(d,e,f,g,h)}}function Yb(a,b,c,d,e,f){var g;return a?ba(b,c,d,e,f):function(){g||(g=ba(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function Ba(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=Xc(a,c,d));a.require=A.require;a.directiveName=M;if(D===A||A.$$isolateScope)a=ha(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=Xc(b,c,d));
1407 1407 b.require=A.require;b.directiveName=M;if(D===A||A.$$isolateScope)b=ha(b,{isolateScope:!0});k.push(b)}}function n(a,c,e,f,g){function l(a,b,c,d){var e;Ya(a)||(d=c,c=b,b=a,a=void 0);H&&(e=u);c||(c=H?z.parent():z);if(d){var f=g.$$slots[d];if(f)return f(a,b,e,c,$);if(y(f))throw ga("noslot",d,wa(z));}else return g(a,b,e,c,$)}var m,t,p,A,w,u,L,z;b===e?(f=d,z=d.$$element):(z=B(e),f=new S(z,d));w=c;D?A=c.$new(!0):r&&(w=c.$parent);g&&(L=l,L.$$boundTransclude=g,L.isSlotFilled=function(a){return!!g.$$slots[a]});
1408 1408 I&&(u=O(z,f,L,I,A,c,D));D&&(ba.$$addScopeInfo(z,A,!0,!(J&&(J===D||J===D.$$originalDirective))),ba.$$addScopeClass(z,!0),A.$$isolateBindings=D.$$isolateBindings,t=ia(c,f,A,A.$$isolateBindings,D),t.removeWatches&&A.$on("$destroy",t.removeWatches));for(m in u){t=I[m];p=u[m];var Xb=t.$$bindings.bindToController;p.bindingInfo=p.identifier&&Xb?ia(w,f,p.instance,Xb,t):{};var M=p();M!==p.instance&&(p.instance=M,z.data("$"+t.name+"Controller",M),p.bindingInfo.removeWatches&&p.bindingInfo.removeWatches(),p.bindingInfo=
1409 1409 ia(w,f,p.instance,Xb,t))}q(I,function(a,b){var c=a.require;a.bindToController&&!K(c)&&G(c)&&R(u[b].instance,gb(b,c,z,u))});q(u,function(a){var b=a.instance;E(b.$onChanges)&&b.$onChanges(a.bindingInfo.initialChanges);E(b.$onInit)&&b.$onInit();E(b.$onDestroy)&&w.$on("$destroy",function(){b.$onDestroy()})});m=0;for(t=h.length;m<t;m++)p=h[m],ja(p,p.isolateScope?A:c,z,f,p.require&&gb(p.directiveName,p.require,z,u),L);var $=c;D&&(D.template||null===D.templateUrl)&&($=A);a&&a($,e.childNodes,void 0,g);for(m=
1410 1410 k.length-1;0<=m;m--)p=k[m],ja(p,p.isolateScope?A:c,z,f,p.require&&gb(p.directiveName,p.require,z,u),L);q(u,function(a){a=a.instance;E(a.$postLink)&&a.$postLink()})}l=l||{};for(var t=-Number.MAX_VALUE,r=l.newScopeDirective,I=l.controllerDirectives,D=l.newIsolateScopeDirective,J=l.templateDirective,w=l.nonTlbTranscludeDirective,u=!1,L=!1,H=l.hasElementTranscludeDirective,z=d.$$element=B(b),A,M,$,s=e,Sa,ka=!1,C=!1,v,F=0,Ba=a.length;F<Ba;F++){A=a[F];var P=A.$$start,Q=A.$$end;P&&(z=Wc(b,P,Q));$=void 0;
1411 1411 if(t>A.priority)break;if(v=A.scope)A.templateUrl||(G(v)?(W("new/isolated scope",D||r,A,z),D=A):W("new/isolated scope",D,A,z)),r=r||A;M=A.name;if(!ka&&(A.replace&&(A.templateUrl||A.template)||A.transclude&&!A.$$tlb)){for(v=F+1;ka=a[v++];)if(ka.transclude&&!ka.$$tlb||ka.replace&&(ka.templateUrl||ka.template)){C=!0;break}ka=!0}!A.templateUrl&&A.controller&&(v=A.controller,I=I||T(),W("'"+M+"' controller",I[M],A,z),I[M]=A);if(v=A.transclude)if(u=!0,A.$$tlb||(W("transclusion",w,A,z),w=A),"element"==v)H=
1412 1412 !0,t=A.priority,$=z,z=d.$$element=B(ba.$$createComment(M,d[M])),b=z[0],da(f,za.call($,0),b),$[0].$$parentNode=$[0].parentNode,s=Yb(C,$,e,t,g&&g.name,{nonTlbTranscludeDirective:w});else{var la=T();$=B(Vb(b)).contents();if(G(v)){$=[];var Y=T(),X=T();q(v,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Y[a]=b;la[b]=null;X[b]=c});q(z.contents(),function(a){var b=Y[xa(va(a))];b?(X[b]=!0,la[b]=la[b]||[],la[b].push(a)):$.push(a)});q(X,function(a,b){if(!a)throw ga("reqslot",b);});for(var Z in la)la[Z]&&
1413 1413 (la[Z]=Yb(C,la[Z],e))}z.empty();s=Yb(C,$,e,void 0,void 0,{needsNewScope:A.$$isolateScope||A.$$newScope});s.$$slots=la}if(A.template)if(L=!0,W("template",J,A,z),J=A,v=E(A.template)?A.template(z,d):A.template,v=ta(v),A.replace){g=A;$=Tb.test(v)?Yc(ca(A.templateNamespace,V(v))):[];b=$[0];if(1!=$.length||1!==b.nodeType)throw ga("tplrt",M,"");da(f,z,b);Ba={$attr:{}};v=x(b,[],Ba);var ea=a.splice(F+1,a.length-(F+1));(D||r)&&Zc(v,D,r);a=a.concat(v).concat(ea);U(d,Ba);Ba=a.length}else z.html(v);if(A.templateUrl)L=
1414 1414 !0,W("template",J,A,z),J=A,A.replace&&(g=A),n=aa(a.splice(F,a.length-F),z,d,f,u&&s,h,k,{controllerDirectives:I,newScopeDirective:r!==A&&r,newIsolateScopeDirective:D,templateDirective:J,nonTlbTranscludeDirective:w}),Ba=a.length;else if(A.compile)try{Sa=A.compile(z,d,s),E(Sa)?m(null,Sa,P,Q):Sa&&m(Sa.pre,Sa.post,P,Q)}catch(fa){c(fa,wa(z))}A.terminal&&(n.terminal=!0,t=Math.max(t,A.priority))}n.scope=r&&!0===r.scope;n.transcludeOnThisElement=u;n.templateOnThisElement=L;n.transclude=s;l.hasElementTranscludeDirective=
1415 1415 H;return n}function gb(a,b,c,d){var e;if(F(b)){var f=b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ga("ctreq",b,a);}else if(K(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=gb(a,b[g],c,d);else G(b)&&(e={},q(b,function(b,f){e[f]=gb(a,b,c,d)}));return e||null}function O(a,b,c,d,e,f,g){var h=T(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,
1416 1416 $element:a,$attrs:b,$transclude:c},n=l.controller;"@"==n&&(n=b[l.name]);m=z(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function Zc(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Pb(a[d],{$$isolateScope:b,$$newScope:c})}function la(b,f,g,h,k,l,m){if(f===k)return null;k=null;if(e.hasOwnProperty(f)){var n;f=a.get(f+"Directive");for(var t=0,r=f.length;t<r;t++)try{if(n=f[t],(y(h)||h>n.priority)&&-1!=n.restrict.indexOf(g)){l&&(n=Pb(n,{$$start:l,$$end:m}));if(!n.$$bindings){var I=
1417 1417 n,D=n,A=n.name,J={isolateScope:null,bindToController:null};G(D.scope)&&(!0===D.bindToController?(J.bindToController=d(D.scope,A,!0),J.isolateScope={}):J.isolateScope=d(D.scope,A,!1));G(D.bindToController)&&(J.bindToController=d(D.bindToController,A,!0));if(G(J.bindToController)){var w=D.controller,z=D.controllerAs;if(!w)throw ga("noctrl",A);if(!Uc(w,z))throw ga("noident",A);}var u=I.$$bindings=J;G(u.isolateScope)&&(n.$$isolateBindings=u.isolateScope)}b.push(n);k=n}}catch(L){c(L)}}return k}function Q(b){if(e.hasOwnProperty(b))for(var c=
1418 1418 a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function U(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(A(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function aa(a,b,c,d,e,f,
1419 1419 g,h){var k=[],l,m,t=b[0],p=a.shift(),r=Pb(p,{templateUrl:null,transclude:null,replace:null,$$originalDirective:p}),I=E(p.templateUrl)?p.templateUrl(b,c):p.templateUrl,D=p.templateNamespace;b.empty();n(I).then(function(n){var J,w;n=ta(n);if(p.replace){n=Tb.test(n)?Yc(ca(D,V(n))):[];J=n[0];if(1!=n.length||1!==J.nodeType)throw ga("tplrt",p.name,I);n={$attr:{}};da(d,b,J);var z=x(J,[],n);G(p.scope)&&Zc(z,!0);a=z.concat(a);U(c,n)}else J=t,b.html(n);a.unshift(r);l=Ba(a,J,c,e,b,p,f,g,h);q(d,function(a,c){a==
1420 1420 J&&(d[c]=b[0])});for(m=s(b[0].childNodes,e);k.length;){n=k.shift();w=k.shift();var u=k.shift(),L=k.shift(),z=b[0];if(!n.$$destroyed){if(w!==t){var S=w.className;h.hasElementTranscludeDirective&&p.replace||(z=Vb(J));da(u,B(w),z);A(B(z),S)}w=l.transcludeOnThisElement?ka(n,l.transclude,L):L;l(m,n,z,d,w)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=ka(b,l.transclude,e)),l(m,b,c,d,a)))}}function Y(a,b){var c=b.priority-a.priority;return 0!==
1421 1421 c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function W(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,wa(d));}function X(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&ba.$$addBindingClass(a);return function(a,c){var e=c.parent();b||ba.$$addBindingClass(e);ba.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ca(a,b){a=
1422 1422 P(a||"html");switch(a){case "svg":case "math":var c=v.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function ea(a,b){if("srcdoc"==b)return I.HTML;var c=va(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return I.RESOURCE_URL}function fa(a,c,d,e,f){var g=ea(a,e);f=h[e]||f;var k=b(d,!0,g,f);if(k){if("multiple"===e&&"select"===va(a))throw ga("selmulti",wa(a));c.push({priority:100,compile:function(){return{pre:function(a,
1423 1423 c,h){c=h.$$observers||(h.$$observers=T());if(l.test(e))throw ga("nodomevents");var m=h[e];m!==d&&(k=m&&b(m,!0,g,f),d=m);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function da(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=
1424 1424 c);break}f&&f.replaceChild(c,d);a=v.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);B.hasData(d)&&(B.data(c,B.data(d)),B(d).off("$destroy"));B.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function ha(a,b){return R(function(){return a.apply(null,arguments)},a,b)}function ja(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,wa(d))}}function ia(a,c,d,e,f){function g(b,c,e){E(d.$onChanges)&&c!==e&&(Z||(a.$$postDigest(L),Z=[]),m||(m={},Z.push(h)),m[b]&&
1425 1425 (e=m[b].previousValue),m[b]=new Db(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;q(e,function(e,h){var m=e.attrName,n=e.optional,p,r,I,D;switch(e.mode){case "@":n||ua.call(c,m)||(d[h]=c[m]=void 0);c.$observe(m,function(a){if(F(a)||Da(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;p=c[m];F(p)?d[h]=b(p)(a):Da(p)&&(d[h]=p);l[h]=new Db(Zb,d[h]);break;case "=":if(!ua.call(c,m)){if(n)break;c[m]=void 0}if(n&&!c[m])break;r=t(c[m]);D=r.literal?pa:function(a,b){return a===b||a!==a&&b!==b};
1426 1426 I=r.assign||function(){p=d[h]=r(a);throw ga("nonassign",c[m],m,f.name);};p=d[h]=r(a);n=function(b){D(b,d[h])||(D(b,p)?I(a,b=d[h]):d[h]=b);return p=b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(t(c[m],n),null,r.literal);k.push(n);break;case "<":if(!ua.call(c,m)){if(n)break;c[m]=void 0}if(n&&!c[m])break;r=t(c[m]);d[h]=r(a);l[h]=new Db(Zb,d[h]);n=a.$watch(r,function(a,b){a===b&&(b=d[h]);g(h,a,b);d[h]=a},r.literal);k.push(n);break;case "&":r=c.hasOwnProperty(m)?t(c[m]):C;if(r===
1427 1427 C&&n)break;d[h]=function(b){return r(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var oa=/^\w/,na=v.document.createElement("div"),qa=r,Z;S.prototype={$normalize:xa,$addClass:function(a){a&&0<a.length&&J.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&J.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=$c(a,b);c&&c.length&&J.addClass(this.$$element,c);(c=$c(b,a))&&c.length&&J.removeClass(this.$$element,
1428 1428 c)},$set:function(a,b,d,e){var f=Rc(this.$$element[0],a),g=ad[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=zc(a,"-"));f=va(this.$$element);if("a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=D(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=V(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+D(V(g[m]),!0),f=
1429 1429 f+(" "+V(g[m+1]));g=V(g[2*l]).split(/\s/);f+=D(V(g[0]),!0);2===g.length&&(f+=" "+V(g[1]));this[a]=b=f}!1!==d&&(null===b||y(b)?this.$$element.removeAttr(e):oa.test(e)?this.$$element.attr(e,b):$(this.$$element[0],e,b));(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=T()),e=d[a]||(d[a]=[]);e.push(b);u.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||y(c[a])||b(c[a])});return function(){Za(e,b)}}};var ra=b.startSymbol(),
1430 1430 sa=b.endSymbol(),ta="{{"==ra&&"}}"==sa?Xa:function(a){return a.replace(/\{\{/g,ra).replace(/}}/g,sa)},ya=/^ngAttr[A-Z]/,Aa=/^(.+)Start$/;ba.$$addBindingInfo=m?function(a,b){var c=a.data("$binding")||[];K(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:C;ba.$$addBindingClass=m?function(a){A(a,"ng-binding")}:C;ba.$$addScopeInfo=m?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:C;ba.$$addScopeClass=m?function(a,b){A(a,b?"ng-isolate-scope":"ng-scope")}:C;ba.$$createComment=
1431 1431 function(a,b){var c="";m&&(c=" "+(a||"")+": "+(b||"")+" ");return v.document.createComment(c)};return ba}]}function Db(a,b){this.previousValue=a;this.currentValue=b}function xa(a){return cb(a.replace(Vc,""))}function $c(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Yc(a){a=B(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&Zf.call(a,b,1);return a}function Uc(a,
1432 1432 b){if(b&&F(b))return b;if(F(a)){var d=bd.exec(a);if(d)return d[3]}}function ef(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Qa(b,"controller");G(b)?R(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!G(a.$scope))throw O("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,n,m;h=!0===h;k&&F(k)&&(m=k);if(F(f)){k=f.match(bd);if(!k)throw $f("ctrlfmt",f);n=k[1];m=
1433 1433 m||k[3];f=a.hasOwnProperty(n)?a[n]:Bc(g.$scope,n,!0)||(b?Bc(c,n,!0):void 0);Pa(f,n,!0)}if(h)return h=(K(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),m&&e(g,m,l,n||f.name),R(function(){var a=d.invoke(f,l,g,n);a!==l&&(G(a)||E(a))&&(l=a,m&&e(g,m,l,n||f.name));return l},{instance:l,identifier:m});l=d.instantiate(f,g,n);m&&e(g,m,l,n||f.name);return l}}]}function ff(){this.$get=["$window",function(a){return B(a.document)}]}function gf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,
1434 1434 arguments)}}]}function $b(a){return G(a)?fa(a)?a.toISOString():ab(a):a}function mf(){this.$get=function(){return function(a){if(!a)return"";var b=[];pc(a,function(a,c){null===a||y(a)||(K(a)?q(a,function(a){b.push(ja(c)+"="+ja($b(a)))}):b.push(ja(c)+"="+ja($b(a))))});return b.join("&")}}}function nf(){this.$get=function(){return function(a){function b(a,e,f){null===a||y(a)||(K(a)?q(a,function(a,c){b(a,e+"["+(G(a)?c:"")+"]")}):G(a)&&!fa(a)?pc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+
1435 1435 "="+ja($b(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function ac(a,b){if(F(a)){var d=a.replace(ag,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(cd))||(c=(c=d.match(bg))&&cg[c[0]].test(d));c&&(a=uc(d))}}return a}function dd(a){var b=T(),d;F(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var e=P(V(a.substr(0,d)));a=V(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):G(a)&&q(a,function(a,d){var f=P(d),g=V(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function ed(a){var b;
1436 1436 return function(d){b||(b=dd(a));return d?(d=b[P(d)],void 0===d&&(d=null),d):b}}function fd(a,b,d,c){if(E(c))return c(a,b,d);q(c,function(c){a=c(a,b,d)});return a}function lf(){var a=this.defaults={transformResponse:[ac],transformRequest:[function(a){return G(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?ab(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ha(bc),put:ha(bc),patch:ha(bc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",
1437 1437 paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return x(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return x(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function n(b){function c(a){var b=R({},a);b.data=fd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};q(a,function(a,
1438 1438 e){E(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!G(b))throw O("$http")("badreq",b);if(!F(b.url))throw O("$http")("badreq",b.url);var f=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c=a.headers,d=R({},b.headers),f,g,h,c=R({},c.common,c[P(b.method)]);a:for(f in c){g=P(f);for(h in d)if(P(h)===g)continue a;d[f]=c[f]}return e(d,ha(b))}(b);f.method=sb(f.method);f.paramSerializer=F(f.paramSerializer)?
1439 1439 l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=fd(b.data,ed(d),void 0,b.transformRequest);y(e)&&q(d,function(a,b){"content-type"===P(b)&&delete d[b]});y(b.withCredentials)&&!y(a.withCredentials)&&(b.withCredentials=a.withCredentials);return m(b,e).then(c,c)},void 0],h=k.when(f);for(q(M,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=g.shift();var n=g.shift(),
1440 1440 h=h.then(b,n)}d?(h.success=function(a){Pa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Pa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=gd("success"),h.error=gd("error"));return h}function m(c,d){function g(a){if(a){var c={};q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e){function f(){m(c,a,d,e)}L&&(200<=a&&300>a?L.put(A,[a,c,dd(d),
1441 1441 e]):L.remove(A));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function m(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?J.resolve:J.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function u(a){m(a.data,a.status,ha(a.headers()),a.statusText)}function I(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var J=k.defer(),D=J.promise,L,S,M=c.headers,A=r(c.url,c.paramSerializer(c.params));n.pendingRequests.push(c);D.then(I,I);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&
1442 1442 "JSONP"!==c.method||(L=G(c.cache)?c.cache:G(a.cache)?a.cache:N);L&&(S=L.get(A),x(S)?S&&E(S.then)?S.then(u,u):K(S)?m(S[1],S[0],ha(S[2]),S[3]):m(S,200,{},"OK"):L.put(A,D));y(S)&&((S=hd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(M[c.xsrfHeaderName||a.xsrfHeaderName]=S),e(c.method,A,d,l,M,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers)));return D}function r(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);return a}var N=g("$http");a.paramSerializer=
1443 1443 F(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var M=[];q(c,function(a){M.unshift(F(a)?l.get(a):l.invoke(a))});n.pendingRequests=[];(function(a){q(arguments,function(a){n[a]=function(b,c){return n(R({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){n[a]=function(b,c,d){return n(R({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function pf(){this.$get=function(){return function(){return new v.XMLHttpRequest}}}
1444 1444 function of(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return dg(a,c,a.defer,b.angular.callbacks,d[0])}]}function dg(a,b,d,c,e){function f(a,b,d){var f=e.createElement("script"),n=null;f.type="text/javascript";f.src=a;f.async=!0;n=function(a){f.removeEventListener("load",n,!1);f.removeEventListener("error",n,!1);e.body.removeChild(f);f=null;var g=-1,N="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),N=a.type,g="error"===a.type?404:200);d&&d(g,N)};f.addEventListener("load",
1445 1445 n,!1);f.addEventListener("error",n,!1);e.body.appendChild(f);return n}return function(e,h,k,l,n,m,r,N,M,w){function p(){z&&z();u&&u.abort()}function H(b,c,e,f,g){x(J)&&d.cancel(J);z=u=null;b(c,e,f,g);a.$$completeOutstandingRequest(C)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"==P(e)){var t="_"+(c.counter++).toString(36);c[t]=function(a){c[t].data=a;c[t].called=!0};var z=f(h.replace("JSON_CALLBACK","angular.callbacks."+t),t,function(a,b){H(l,a,c[t].data,"",b);c[t]=C})}else{var u=b(e,h);
1446 1446 u.open(e,h,!0);q(n,function(a,b){x(a)&&u.setRequestHeader(b,a)});u.onload=function(){var a=u.statusText||"",b="response"in u?u.response:u.responseText,c=1223===u.status?204:u.status;0===c&&(c=b?200:"file"==ra(h).protocol?404:0);H(l,c,b,u.getAllResponseHeaders(),a)};e=function(){H(l,-1,null,null,"")};u.onerror=e;u.onabort=e;q(M,function(a,b){u.addEventListener(b,a)});q(w,function(a,b){u.upload.addEventListener(b,a)});r&&(u.withCredentials=!0);if(N)try{u.responseType=N}catch(I){if("json"!==N)throw I;
1447 1447 }u.send(y(k)?null:k)}if(0<m)var J=d(p,m);else m&&E(m.then)&&m.then(p)}}function jf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(m,a).replace(r,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){e();return d(a)},b,c)}function k(f,k,m,r){function H(a){try{var b=a;a=m?e.getTrusted(m,b):e.valueOf(b);
1448 1448 var d;if(r&&!x(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=ab(a)}d=a}return d}catch(g){c(Ja.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var t;k||(k=g(f),t=da(k),t.exp=f,t.expressions=[],t.$$watchDelegate=h);return t}r=!!r;var z,u,I=0,J=[],D=[];t=f.length;for(var L=[],S=[];I<t;)if(-1!=(z=f.indexOf(a,I))&&-1!=(u=f.indexOf(b,z+l)))I!==z&&L.push(g(f.substring(I,z))),I=f.substring(z+l,u),J.push(I),D.push(d(I,H)),I=u+n,S.push(L.length),L.push("");
1449 1449 else{I!==t&&L.push(g(f.substring(I)));break}m&&1<L.length&&Ja.throwNoconcat(f);if(!k||J.length){var q=function(a){for(var b=0,c=J.length;b<c;b++){if(r&&y(a[b]))return;L[S[b]]=a[b]}return L.join("")};return R(function(a){var b=0,d=J.length,e=Array(d);try{for(;b<d;b++)e[b]=D[b](a);return q(e)}catch(g){c(Ja.interr(f,g))}},{exp:f,expressions:J,$$watchDelegate:function(a,b){var c;return a.$watchGroup(D,function(d,e){var f=q(d);E(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,n=b.length,m=new RegExp(a.replace(/./g,
1450 1450 f),"g"),r=new RegExp(b.replace(/./g,f),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function kf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,n){function m(){r?f.apply(null,N):f(p)}var r=4<arguments.length,N=r?za.call(arguments,4):[],q=b.setInterval,w=b.clearInterval,p=0,H=x(n)&&!n,t=(H?c:d).defer(),z=t.promise;l=x(l)?l:0;z.$$intervalId=q(function(){H?e.defer(m):a.$evalAsync(m);t.notify(p++);0<l&&p>=l&&(t.resolve(p),
1451 1451 w(z.$$intervalId),delete g[z.$$intervalId]);H||a.$apply()},k);g[z.$$intervalId]=t;return z}var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function cc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=ob(a[b]);return a.join("/")}function id(a,b){var d=ra(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=X(d.port)||eg[d.protocol]||null}function jd(a,b){var d="/"!==a.charAt(0);
1452 1452 d&&(a="/"+a);var c=ra(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=xc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function na(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Ia(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function hb(a){return a.replace(/(#.+)|#$/,"$1")}function dc(a,b,d){this.$$html5=!0;d=d||"";id(a,this);this.$$parse=function(a){var d=na(b,
1453 1453 a);if(!F(d))throw Eb("ipthprfx",a,b);jd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Rb(this.$$search),d=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;x(f=na(a,c))?(g=f,g=x(f=na(d,f))?b+(na("/",f)||f):a+g):x(f=na(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function ec(a,b,d){id(a,this);
1454 1454 this.$$parse=function(c){var e=na(a,c)||na(b,c),f;y(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",y(e)&&(a=c,this.replace())):(f=na(d,e),y(f)&&(f=e));jd(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Rb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=
1455 1455 function(b,d){return Ia(a)==Ia(b)?(this.$$parse(b),!0):!1}}function kd(a,b,d){this.$$html5=!0;ec.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Ia(c)?f=c:(g=na(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Rb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=cc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Fb(a){return function(){return this[a]}}function ld(a,
1456 1456 b){return function(d){if(y(d))return this[a];this[a]=b(d);this.$$compose();return this}}function qf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return x(b)?(a=b,this):a};this.html5Mode=function(a){return Da(a)?(b.enabled=a,this):G(a)?(Da(a.enabled)&&(b.enabled=a.enabled),Da(a.requireBase)&&(b.requireBase=a.requireBase),Da(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,
1457 1457 c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,n;n=c.baseHref();var m=c.url(),r;if(b.enabled){if(!n&&b.requireBase)throw Eb("nobase");r=m.substring(0,m.indexOf("/",m.indexOf("//")+2))+(n||"/");n=e.history?dc:kd}else r=Ia(m),n=ec;var N=r.substr(0,Ia(r).lastIndexOf("/")+1);l=new n(r,N,"#"+a);l.$$parseLinkUrl(m,m);l.$$state=c.state();
1458 1458 var q=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=B(a.target);"a"!==va(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");G(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=ra(h.animVal).href);q.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=
1459 1459 !0))}});hb(l.absUrl())!=hb(m)&&c.url(l.absUrl(),!0);var w=!0;c.onUrlChange(function(a,b){y(na(N,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=hb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(w=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=hb(c.url()),b=hb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(w||
1460 1460 m)w=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function rf(){var a=!0,b=this;this.debugEnabled=function(b){return x(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
1461 1461 (a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];q(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Ta(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===
1462 1462 a||"__proto__"===a)throw ca("isecfld",b);return a}function fg(a){return a+""}function sa(a,b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a.window===a)throw ca("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ca("isecdom",b);if(a===Object)throw ca("isecobj",b);}return a}function md(a,b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a===gg||a===hg||a===ig)throw ca("isecff",b);}}function Gb(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||
1463 1463 a==={}.constructor||a===[].constructor||a===Function.constructor))throw ca("isecaf",b);}function jg(a,b){return"undefined"!==typeof a?a:b}function nd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function aa(a,b){var d,c;switch(a.type){case s.Program:d=!0;q(a.body,function(a){aa(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:aa(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;
1464 1464 break;case s.BinaryExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:aa(a.test,b);aa(a.alternate,b);aa(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=
1465 1465 !1;a.toWatch=[a];break;case s.MemberExpression:aa(a.object,b);a.computed&&aa(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];q(a.arguments,function(a){aa(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:aa(a.left,b);aa(a.right,b);a.constant=a.left.constant&&a.right.constant;
1466 1466 a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];q(a.elements,function(a){aa(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];q(a.properties,function(a){aa(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1;a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function od(a){if(1==a.length){a=a[0].expression;
1467 1467 var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function pd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function qd(a){if(1===a.body.length&&pd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function rd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function sd(a,
1468 1468 b){this.astBuilder=a;this.$filter=b}function td(a,b){this.astBuilder=a;this.$filter=b}function Hb(a){return"constructor"==a}function fc(a){return E(a.valueOf)?a.valueOf():kg.call(a)}function sf(){var a=T(),b=T(),d={"true":!0,"false":!1,"null":null,undefined:void 0},c,e;this.addLiteral=function(a,b){d[a]=b};this.setIdentifierFns=function(a,b){c=a;e=b;return this};this.$get=["$filter",function(f){function g(c,d,e){var g,k,D;e=e||H;switch(typeof c){case "string":D=c=c.trim();var q=e?b:a;g=q[D];if(!g){":"===
1469 1469 c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2));g=e?p:w;var S=new gc(g);g=(new hc(S,f,g)).parse(c);g.constant?g.$$watchDelegate=r:k?g.$$watchDelegate=g.literal?m:n:g.inputs&&(g.$$watchDelegate=l);e&&(g=h(g));q[D]=g}return N(g,d);case "function":return N(c,d);default:return N(C,d)}}function h(a){function b(c,d,e,f){var g=H;H=!0;try{return a(c,d,e,f)}finally{H=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate;b.assign=h(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&
1470 1470 c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);b.inputs=a.inputs;return b}function k(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function l(a,b,c,d,e){var f=d.inputs,g;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&fc(b));return g},b,c,e)}for(var l=[],m=[],n=0,r=f.length;n<r;n++)l[n]=k,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);
1471 1471 if(b||(b=!k(h,l[c])))m[c]=h,l[c]=h&&fc(h)}b&&(g=d(a,void 0,void 0,m));return g},b,c,e)}function n(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;E(b)&&b.apply(this,arguments);x(a)&&d.$$postDigest(function(){x(f)&&e()})},c)}function m(a,b,c,d){function e(a){var b=!0;q(a,function(a){x(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;E(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function r(a,b,c,d){var e;
1472 1472 return e=a.$watch(function(a){e();return d(a)},b,c)}function N(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==m&&c!==n?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return x(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var M=Ea().noUnsafeEval,w={csp:M,expensiveChecks:!1,literals:qa(d),isIdentifierStart:E(c)&&c,
1473 1473 isIdentifierContinue:E(e)&&e},p={csp:M,expensiveChecks:!0,literals:qa(d),isIdentifierStart:E(c)&&c,isIdentifierContinue:E(e)&&e},H=!1;g.$$runningExpensiveChecks=function(){return H};return g}]}function uf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return ud(function(b){a.$evalAsync(b)},b)}]}function vf(){this.$get=["$browser","$exceptionHandler",function(a,b){return ud(function(b){a.defer(b)},b)}]}function ud(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,
1474 1474 c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending;c.processScheduled=!1;c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{E(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=new d}var g=O("$q",TypeError);R(d.prototype,{then:function(a,b,c){if(y(a)&&y(b)&&y(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,
1475 1475 a,b,c]);0<this.$$state.status&&e(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}});R(f.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(g("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){function d(a){k||(k=!0,h.$$resolve(a))}function f(a){k||(k=!0,h.$$reject(a))}var g,h=this,k=!1;try{if(G(a)||E(a))g=a&&a.then;E(g)?
1476 1476 (this.promise.$$state.status=-1,g.call(a,d,f,c(this,this.notify))):(this.promise.$$state.value=a,this.promise.$$state.status=1,e(this.promise.$$state))}catch(l){f(l),b(l)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;e(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];
1477 1477 a=d[f][3];try{e.notify(E(a)?a(c):c)}catch(h){b(h)}}})}});var h=function(a,b){var c=new f;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{E(c)&&(d=c())}catch(e){return h(e,!1)}return d&&E(d.then)?d.then(function(){return h(a,b)},function(a){return h(a,!1)}):h(a,b)},l=function(a,b,c,d){var e=new f;e.resolve(a);return e.promise.then(b,c,d)},n=function(a){if(!E(a))throw g("norslvr",a);var b=new f;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};n.prototype=
1478 1478 d.prototype;n.defer=function(){var a=new f;a.resolve=c(a,a.resolve);a.reject=c(a,a.reject);a.notify=c(a,a.notify);return a};n.reject=function(a){var b=new f;b.reject(a);return b.promise};n.when=l;n.resolve=l;n.all=function(a){var b=new f,c=0,d=K(a)?[]:{};q(a,function(a,e){c++;l(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return n}function Ef(){this.$get=["$window","$timeout",function(a,
1479 1479 b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function tf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++nb;this.$$ChildScope=
1480 1480 null}b.prototype=a;return b}var b=10,d=O("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===Ca&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function n(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=
1481 1481 this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function m(a){if(H.$$phase)throw d("inprog",H.$$phase);H.$$phase=a}function r(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function N(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function w(){for(;u.length;)try{u.shift()()}catch(a){f(a)}e=
1482 1482 null}function p(){null===e&&(e=h.defer(function(){H.$apply(w)}))}n.prototype={constructor:n,$new:function(b,c){var d;c=c||this;b?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",k);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,
1483 1483 a);var h=this,k=h.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;E(b)||(l.fn=C);k||(k=h.$$watchers=[]);k.unshift(l);r(this,1);return function(){0<=Za(k,l)&&r(h,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});q(a,function(a,
1484 1484 b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!y(e)){if(G(e))if(ya(e))for(f!==m&&(f=m,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==r&&(f=r={},t=0,l++);a=0;for(b in e)ua.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>
1485 1485 a)for(b in l++,f)ua.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,n=g(a,c),m=[],r={},p=!0,t=0;return this.$watch(n,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(k)if(G(e))if(ya(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ua.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,n,r,p,q,N=b,u,x=[],y,v;m("$digest");h.$$checkUrlChange();this===H&&null!==e&&(h.defer.cancel(e),w());c=null;do{q=!1;
1486 1486 for(u=this;t.length;){try{v=t.shift(),v.scope.$eval(v.expression,v.locals)}catch(C){f(C)}c=null}a:do{if(r=u.$$watchers)for(p=r.length;p--;)try{if(a=r[p])if(n=a.get,(g=n(u))!==(k=a.last)&&!(a.eq?pa(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))q=!0,c=a,a.last=a.eq?qa(g,null):g,l=a.fn,l(g,k===s?g:k,u),5>N&&(y=4-N,x[y]||(x[y]=[]),x[y].push({msg:E(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:k}));else if(a===c){q=!1;break a}}catch(F){f(F)}if(!(r=u.$$watchersCount&&
1487 1487 u.$$childHead||u!==this&&u.$$nextSibling))for(;u!==this&&!(r=u.$$nextSibling);)u=u.$parent}while(u=r);if((q||t.length)&&!N--)throw H.$$phase=null,d("infdig",b,x);}while(q||t.length);for(H.$$phase=null;z.length;)try{z.shift()()}catch(B){f(B)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===H&&h.$$applicationDestroyed();r(this,-this.$$watchersCount);for(var b in this.$$listenerCount)N(this,this.$$listenerCount[b],b);a&&a.$$childHead==
1488 1488 this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=C;this.$on=this.$watch=this.$watchGroup=function(){return C};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){H.$$phase||
1489 1489 t.length||h.defer(function(){t.length&&H.$digest()});t.push({scope:this,expression:g(a),locals:b})},$$postDigest:function(a){z.push(a)},$apply:function(a){try{m("$apply");try{return this.$eval(a)}finally{H.$$phase=null}}catch(b){f(b)}finally{try{H.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&u.push(b);a=g(a);p()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=
1490 1490 0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,N(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=$a([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;l<n;l++)if(d[l])try{d[l].apply(null,k)}catch(m){f(m)}else d.splice(l,1),l--,n--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);
1491 1491 h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=$a([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=
1492 1492 null;return e}};var H=new n,t=H.$$asyncQueue=[],z=H.$$postDigestQueue=[],u=H.$$applyAsyncQueue=[];return H}]}function me(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return x(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=ra(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function lg(a){if("self"===a)return a;
1493 1493 if(F(a)){if(-1<a.indexOf("***"))throw ta("iwcard",a);a=vd(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Wa(a))return new RegExp("^"+a.source+"$");throw ta("imatcher");}function wd(a){var b=[];x(a)&&q(a,function(a){b.push(lg(a))});return b}function xf(){this.SCE_CONTEXTS=oa;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=wd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=wd(a));return b};this.$get=["$injector",
1494 1494 function(d){function c(a,b){return"self"===a?hd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw ta("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[oa.HTML]=e(g);h[oa.CSS]=e(g);h[oa.URL]=e(g);h[oa.JS]=e(g);h[oa.RESOURCE_URL]=
1495 1495 e(h[oa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw ta("icontext",a,b);if(null===b||y(b)||""===b)return b;if("string"!==typeof b)throw ta("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||y(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===oa.RESOURCE_URL){var g=ra(e.toString()),m,r,q=!1;m=0;for(r=a.length;m<r;m++)if(c(a[m],g)){q=!0;break}if(q)for(m=0,r=b.length;m<r;m++)if(c(b[m],
1496 1496 g)){q=!1;break}if(q)return e;throw ta("insecurl",e.toString());}if(d===oa.HTML)return f(e);throw ta("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function wf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ca)throw ta("iequirks");var c=ha(oa);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},
1497 1497 c.valueOf=Xa);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;q(oa,function(a,b){var d=P(b);c[cb("parse_as_"+d)]=function(b){return e(a,b)};c[cb("get_trusted_"+d)]=function(b){return f(a,b)};c[cb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function yf(){this.$get=["$window","$document",function(a,b){var d={},c=!(a.chrome&&a.chrome.app&&a.chrome.app.runtime)&&a.history&&a.history.pushState,
1498 1498 e=X((/android (\d+)/.exec(P((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h,k=/^(Moz|webkit|ms)(?=[A-Z])/,l=g.body&&g.body.style,n=!1,m=!1;if(l){for(var r in l)if(n=k.exec(r)){h=n[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");n=!!("transition"in l||h+"Transition"in l);m=!!("animation"in l||h+"Animation"in l);!e||n&&m||(n=F(l.webkitTransition),m=F(l.webkitAnimation))}return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===
1499 1499 a&&11>=Ca)return!1;if(y(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ea(),vendorPrefix:h,transitions:n,animations:m,android:e}}]}function Af(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$templateCache","$http","$q","$sce",function(b,d,c,e){function f(g,h){f.totalPendingRequests++;F(g)&&b.get(g)||(g=e.getTrustedResourceUrl(g));var k=d.defaults&&d.defaults.transformResponse;K(k)?k=k.filter(function(a){return a!==ac}):k===ac&&(k=null);return d.get(g,
1500 1500 R({cache:b,transformResponse:k},a))["finally"](function(){f.totalPendingRequests--}).then(function(a){b.put(g,a.data);return a.data},function(a){if(!h)throw mg("tpload",g,a.status,a.statusText);return c.reject(a)})}f.totalPendingRequests=0;return f}]}function Bf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];q(a,function(a){var c=ea.element(a).data("$binding");c&&q(c,function(c){d?(new RegExp("(^|\\s)"+
1501 1501 vd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Cf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",
1502 1502 function(a,b,d,c,e){function f(f,k,l){E(f)||(l=k,k=f,f=C);var n=za.call(arguments,3),m=x(l)&&!l,r=(m?c:d).defer(),q=r.promise,s;s=b.defer(function(){try{r.resolve(f.apply(null,n))}catch(b){r.reject(b),e(b)}finally{delete g[q.$$timeoutId]}m||a.$apply()},k);q.$$timeoutId=s;g[s]=r;return q}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function ra(a){Ca&&(Y.setAttribute("href",a),a=
1503 1503 Y.href);Y.setAttribute("href",a);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function hd(a){a=F(a)?ra(a):a;return a.protocol===xd.protocol&&a.host===xd.host}function Df(){this.$get=da(v)}function yd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},
1504 1504 c={},e="";return function(){var a,g,h,k,l;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),y(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function Hf(){this.$get=yd}function Jc(a){function b(d,c){if(G(d)){var e={};q(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",zd);b("date",Ad);b("filter",ng);
1505 1505 b("json",og);b("limitTo",pg);b("lowercase",qg);b("number",Bd);b("orderBy",Cd);b("uppercase",rg)}function ng(){return function(a,b,d){if(!ya(a)){if(null==a)return a;throw O("filter")("notarray",a);}var c;switch(ic(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b=sg(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function sg(a,b,d){var c=G(a)&&"$"in a;!0===b?b=pa:E(b)||(b=function(a,b){if(y(a))return!1;if(null===a||null===b)return a===
1506 1506 b;if(G(b)||G(a)&&!rc(a))return!1;a=P(""+a);b=P(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!G(e)?Ka(e,a.$,b,!1):Ka(e,a,b,d)}}function Ka(a,b,d,c,e){var f=ic(a),g=ic(b);if("string"===g&&"!"===b.charAt(0))return!Ka(a,b.substring(1),d,c);if(K(a))return a.some(function(a){return Ka(a,b,d,c)});switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&Ka(a[h],b,d,!0))return!0;return e?!1:Ka(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!E(e)&&!y(e)&&(f="$"===h,!Ka(f?a:a[h],
1507 1507 e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function ic(a){return null===a?"null":typeof a}function zd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){y(c)&&(c=b.CURRENCY_SYM);y(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Dd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(/\u00A4/g,c)}}function Bd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Dd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function tg(a){var b=0,d,c,e,f,g;-1<
1508 1508 (c=a.indexOf(Ed))&&(a=a.replace(Ed,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)==jc;e++);if(e==(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)==jc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Fd&&(d=d.splice(0,Fd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function ug(a,b,d,c){var e=a.d,f=e.length-a.i;b=y(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=
1509 1509 Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Dd(a,b,d,c,e){if(!F(a)&&!Q(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(f)k="\u221e";else{g=tg(h);ug(g,e,b.minFrac,b.maxFrac);k=g.d;h=g.i;e=g.e;f=[];for(g=k.reduce(function(a,
1510 1510 b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?f=k.splice(h):(f=k,k=[0]);h=[];for(k.length>=b.lgSize&&h.unshift(k.splice(-b.lgSize).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Ib(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<b;)a=jc+a;d&&(a=a.substr(a.length-b));return e+a}function W(a,b,d,c,e){d=
1511 1511 d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12==d&&(f=12);return Ib(f,b,c,e)}}function ib(a,b,d){return function(c,e){var f=c["get"+a](),g=sb((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Gd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Hd(a){return function(b){var d=Gd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ib(b,a)}}function kc(a,b){return 0>=a.getFullYear()?
1512 1512 b.ERAS[0]:b.ERAS[1]}function Ad(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=X(b[9]+b[10]),g=X(b[9]+b[11]));h.call(a,X(b[1]),X(b[2])-1,X(b[3]));f=X(b[4]||0)-f;g=X(b[5]||0)-g;h=X(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",h=
1513 1513 [],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;F(c)&&(c=vg.test(c)?X(c):b(c));Q(c)&&(c=new Date(c));if(!fa(c)||!isFinite(c.getTime()))return c;for(;d;)(l=wg.exec(d))?(h=$a(h,l,1),d=h.pop()):(h.push(d),d=null);var n=c.getTimezoneOffset();f&&(n=vc(f,n),c=Qb(c,f,!0));q(h,function(b){k=xg[b];g+=k?k(c,a.DATETIME_FORMATS,n):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function og(){return function(a,b){y(b)&&(b=2);return ab(a,b)}}function pg(){return function(a,b,d){b=Infinity===
1514 1514 Math.abs(Number(b))?Number(b):X(b);if(isNaN(b))return a;Q(a)&&(a=a.toString());if(!K(a)&&!F(a))return a;d=!d||isNaN(d)?0:X(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),d)}}function Cd(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=Xa;if(E(b))h=b;else if(F(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h,
1515 1515 descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(null==a)return a;if(!ya(a))throw O("orderBy")("notarray",a);K(e)||(e=[e]);0===e.length&&(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===
1516 1516 c)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),d(e)))break a;if(rc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],q=0;c.type===f.type?c.value!==f.value&&(q=c.value<f.value?-1:1):q=c.type<f.type?-1:1;if(c=q*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function La(a){E(a)&&(a={link:a});a.restrict=a.restrict||"AC";return da(a)}function Id(a,
1517 1517 b,d,c,e){var f=this,g=[];f.$error={};f.$$success={};f.$pending=void 0;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Jb;f.$rollbackViewValue=function(){q(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){q(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Qa(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];
1518 1518 f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];q(f.$pending,function(b,c){f.$setValidity(c,null,a)});q(f.$error,function(b,c){f.$setValidity(c,null,a)});q(f.$$success,function(b,c){f.$setValidity(c,null,a)});Za(g,a);a.$$parentForm=Jb};Jd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Za(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Ua);
1519 1519 c.addClass(a,Kb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()};f.$setPristine=function(){c.setClass(a,Ua,Kb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;q(g,function(a){a.$setPristine()})};f.$setUntouched=function(){q(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function lc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function jb(a,b,d,c,e,f){var g=P(b[0].type);
1520 1520 if(!e.android){var h=!1;b.on("compositionstart",function(){h=!0});b.on("compositionend",function(){h=!1;l()})}var k,l=function(a){k&&(f.defer.cancel(k),k=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=V(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var n=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<
1521 1521 b&&19>b||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",n)}b.on("change",l);if(Kd[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=f.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Lb(a,b){return function(d,c){var e,f;if(fa(d))return d;if(F(d)){'"'==d.charAt(0)&&
1522 1522 '"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(yg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},q(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(a,b,d,c){return function(e,f,g,h,k,l,n){function m(a){return a&&
1523 1523 !(a.getTime&&a.getTime()!==a.getTime())}function r(a){return x(a)&&!fa(a)?d(a)||void 0:a}Ld(e,f,g,h);jb(e,f,g,h,k,l);var q=h&&h.$options&&h.$options.timezone,s;h.$$parserName=a;h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a))return a=d(a,s),q&&(a=Qb(a,q)),a});h.$formatters.push(function(a){if(a&&!fa(a))throw lb("datefmt",a);if(m(a))return(s=a)&&q&&(s=Qb(s,q,!0)),n("date")(a,c,q);s=null;return""});if(x(g.min)||g.ngMin){var w;h.$validators.min=function(a){return!m(a)||y(w)||d(a)>=
1524 1524 w};g.$observe("min",function(a){w=r(a);h.$validate()})}if(x(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!m(a)||y(p)||d(a)<=p};g.$observe("max",function(a){p=r(a);h.$validate()})}}}function Ld(a,b,d,c){(c.$$hasNativeValidators=G(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function Md(a,b,d,c,e){if(x(c)){a=a(c);if(!a.constant)throw lb("constexpr",d,c);return a(b)}return e}function mc(a,b){a="ngClass"+a;return["$animate",
1525 1525 function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],n=0;n<b.length;n++)if(e==b[n])continue a;c.push(e)}return c}function e(a){var b=[];return K(a)?(q(a,function(a){b=b.concat(e(a))}),b):F(a)?a.split(" "):G(a)?(q(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",link:function(f,g,h){function k(a){a=l(a,1);h.$addClass(a)}function l(a,b){var c=g.data("$classCounts")||T(),d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",
1526 1526 c);return d.join(" ")}function n(a,b){var e=c(b,a),f=c(a,b),e=l(e,1),f=l(f,-1);e&&e.length&&d.addClass(g,e);f&&f.length&&d.removeClass(g,f)}function m(a){if(!0===b||f.$index%2===b){var c=e(a||[]);if(!r)k(c);else if(!pa(a,r)){var d=e(r);n(d,c)}}r=K(a)?a.map(function(a){return ha(a)}):ha(a)}var r;f.$watch(h[a],m,!0);h.$observe("class",function(b){m(f.$eval(h[a]))});"ngClass"!==a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var m=e(f.$eval(h[a]));g===b?k(m):(g=l(m,-1),h.$removeClass(g))}})}}}]}
1527 1527 function Jd(a){function b(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+zc(a,"-"):"";b(mb+a,!0===c);b(Nd+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Nd]=!(f[mb]=e.hasClass(mb));c.$setValidity=function(a,e,f){y(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&h(c.$pending,a,f),Od(c.$pending)&&(c.$pending=void 0));Da(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,
1528 1528 a,f),h(c.$$success,a,f));c.$pending?(b(Pd,!0),c.$valid=c.$invalid=void 0,d("",null)):(b(Pd,!1),c.$valid=Od(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?void 0:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Od(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var zg=/^\/(.+)\/([a-z]*)$/,ua=Object.prototype.hasOwnProperty,P=function(a){return F(a)?a.toLowerCase():a},sb=function(a){return F(a)?a.toUpperCase():a},Ca,
1529 1529 B,Z,za=[].slice,Zf=[].splice,Ag=[].push,ma=Object.prototype.toString,sc=Object.getPrototypeOf,Aa=O("ng"),ea=v.angular||(v.angular={}),Sb,nb=0;Ca=v.document.documentMode;C.$inject=[];Xa.$inject=[];var K=Array.isArray,$d=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,V=function(a){return F(a)?a.trim():a},vd=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ea=function(){if(!x(Ea.rules)){var a=v.document.querySelector("[ng-csp]")||
1530 1530 v.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ea.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ea;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ea.rules},pb=function(){if(x(pb.name_))return pb.name_;var a,b,d=Na.length,c,e;for(b=0;b<d;++b)if(c=Na[b],a=v.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+
1531 1531 "jq");break}return pb.name_=e},ce=/:/g,Na=["ng-","data-ng-","ng:","x-ng-"],he=/[A-Z]/g,Ac=!1,Ma=3,le={full:"1.5.5",major:1,minor:5,dot:5,codeName:"material-conspiration"};U.expando="ng339";var eb=U.cache={},Nf=1;U._data=function(a){return this.cache[a[this.expando]]||{}};var If=/([\:\-\_]+(.))/g,Jf=/^moz([A-Z])/,wb={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=O("jqLite"),Mf=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Kf=/<([\w:-]+)/,Lf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
1532 1532 ia={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option;ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead;ia.th=ia.td;var Sf=v.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Oa=U.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===
1533 1533 v.document.readyState?v.setTimeout(b):(this.on("DOMContentLoaded",b),U(v).on("load",b))},toString:function(){var a=[];q(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?B(this[a]):B(this[this.length+a])},length:0,push:Ag,sort:[].sort,splice:[].splice},Cb={};q("multiple selected checked disabled readOnly required open".split(" "),function(a){Cb[P(a)]=a});var Sc={};q("input select option textarea button form details".split(" "),function(a){Sc[a]=!0});var ad={ngMinlength:"minlength",
1534 1534 ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};q({data:Wb,removeData:db,hasData:function(a){for(var b in eb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)db(a[b])}},function(a,b){U[b]=a});q({data:Wb,inheritedData:Ab,scope:function(a){return B.data(a,"$scope")||Ab(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return B.data(a,"$isolateScope")||B.data(a,"$isolateScopeNoTemplate")},controller:Pc,injector:function(a){return Ab(a,
1535 1535 "$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:xb,css:function(a,b,d){b=cb(b);if(x(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Ma&&2!==c&&8!==c)if(c=P(b),Cb[c])if(x(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||C).specified?c:void 0;else if(x(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?void 0:a},prop:function(a,b,d){if(x(d))a[b]=
1536 1536 d;else return a[b]},text:function(){function a(a,d){if(y(d)){var c=a.nodeType;return 1===c||c===Ma?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(y(b)){if(a.multiple&&"select"===va(a)){var d=[];q(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(y(b))return a.innerHTML;ub(a,!0);a.innerHTML=b},empty:Qc},function(a,b){U.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==Qc&&y(2==a.length&&
1537 1537 a!==xb&&a!==Pc?b:c)){if(G(b)){for(e=0;e<g;e++)if(a===Wb)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=y(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});q({removeData:db,on:function(a,b,d,c){if(x(c))throw Ub("onargs");if(Kc(a)){c=vb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=Pf(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=
1538 1538 c,"$destroy"===b||g||a.addEventListener(b,f,!1));h.push(d)};g--;)b=c[g],wb[b]?(h(wb[b],Rf),h(b,void 0,!0)):h(b)}},off:Oc,one:function(a,b,d){a=B(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;ub(a);q(new U(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];q(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,
1539 1539 b){var d=a.nodeType;if(1===d||11===d){b=new U(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;q(new U(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){Mc(a,B(b).eq(0).clone()[0])},remove:Bb,detach:function(a){Bb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;b=new U(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}},addClass:zb,removeClass:yb,toggleClass:function(a,b,d){b&&q(b.split(" "),
1540 1540 function(b){var e=d;y(e)&&(e=!xb(a,b));(e?zb:yb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Vb,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=vb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=
1541 1541 !0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:C,type:f,target:a},b.type&&(c=R(c,b)),b=ha(g),e=d?[c].concat(d):[c],q(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){U.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)y(f)?(f=a(this[g],b,c,e),x(f)&&(f=B(f))):Nc(f,a(this[g],b,c,e));return x(f)?f:this};U.prototype.bind=U.prototype.on;U.prototype.unbind=U.prototype.off});Ra.prototype={put:function(a,
1542 1542 b){this[Fa(a,this.nextUid)]=b},get:function(a){return this[Fa(a,this.nextUid)]},remove:function(a){var b=this[a=Fa(a,this.nextUid)];delete this[a];return b}};var Gf=[function(){this.$get=[function(){return Ra}]}],Uf=/^([^\(]+?)=>/,Vf=/^[^\(]*\(\s*([^\)]*)\)/m,Bg=/,/,Cg=/^\s*(_?)(\S+?)\1\s*$/,Tf=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ga=O("$injector");bb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw F(d)&&d||(d=a.name||Wf(a)),Ga("strictdi",d);
1543 1543 b=Tc(a);q(b[1].split(Bg),function(a){a.replace(Cg,function(a,b,d){c.push(d)})})}a.$inject=c}}else K(a)?(b=a.length-1,Pa(a[b],"fn"),c=a.slice(0,b)):Pa(a,"fn",!0);return c};var Qd=O("$animate"),Ze=function(){this.$get=C},$e=function(){var a=new Ra,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=F(b)?b.split(" "):K(b)?b:[],q(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){q(b,function(b){var c=a.get(b);if(c){var d=Xf(b.attr("class")),e="",f="";q(c,
1544 1544 function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});q(b,function(a){e&&zb(a,e);f&&yb(a,f)});a.remove(b)}});b.length=0}return{enabled:C,on:C,off:C,pin:C,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},Xe=["$provide",function(a){var b=this;this.$$registeredAnimations=
1545 1545 Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Qd("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Qd("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=
1546 1546 d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"enter",Ha(h))},move:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"move",Ha(h))},leave:function(b,c){return a.push(b,"leave",Ha(c),function(){b.remove()})},addClass:function(b,
1547 1547 c,g){g=Ha(g);g.addClass=fb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ha(g);g.removeClass=fb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ha(h);h.addClass=fb(h.addClass,c);h.removeClass=fb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ha(k);k.from=k.from?R(k.from,c):c;k.to=k.to?R(k.to,g):g;k.tempClasses=fb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],bf=function(){this.$get=
1548 1548 ["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},af=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$document","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){var d=c[0];d&&d.hidden?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);
1549 1549 else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;q(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:C,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},
1550 1550 "finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=
1551 1551 0,this._state=2)}};return f}]},Ye=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=e||{};g.$$prepared||(g=qa(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:f,end:f}}}]},ga=O("$compile"),Zb=new function(){};
1552 1552 Cc.$inject=["$provide","$$sanitizeUriProvider"];Db.prototype.isFirstChange=function(){return this.previousValue===Zb};var Vc=/^((?:x|data)[\:\-_])/i,$f=O("$controller"),bd=/^(\S+)(\s+as\s+([\w$]+))?$/,hf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof B&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},cd="application/json",bc={"Content-Type":cd+";charset=utf-8"},bg=/^\[|^\{(?!\{)/,cg={"[":/]$/,"{":/}$/},ag=/^\)\]\}',?\n/,Dg=O("$http"),gd=function(a){return function(){throw Dg("legacy",
1553 1553 a);}},Ja=ea.$interpolateMinErr=O("$interpolate");Ja.throwNoconcat=function(a){throw Ja("noconcat",a);};Ja.interr=function(a,b){return Ja("interr",a,b.toString())};var Eg=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,eg={http:80,https:443,ftp:21},Eb=O("$location"),Fg={$$html5:!1,$$replace:!1,absUrl:Fb("$$absUrl"),url:function(a){if(y(a))return this.$$url;var b=Eg.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Fb("$$protocol"),
1554 1554 host:Fb("$$host"),port:Fb("$$port"),path:ld("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(F(a)||Q(a))a=a.toString(),this.$$search=xc(a);else if(G(a))a=qa(a,{}),q(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw Eb("isrcharg");break;default:y(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:ld("$$hash",function(a){return null!==
1555 1555 a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};q([kd,ec,dc],function(a){a.prototype=Object.create(Fg);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Eb("nostate");this.$$state=y(b)?null:b;return this}});var ca=O("$parse"),gg=Function.prototype.call,hg=Function.prototype.apply,ig=Function.prototype.bind,Mb=T();q("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var Gg={n:"\n",f:"\f",r:"\r",
1556 1556 t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;
1557 1557 else{var b=a+this.peek(),d=b+this.peek(2),c=Mb[b],e=Mb[d];Mb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||
1558 1558 "\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,
1559 1559 b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=x(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ca("lexerr",
1560 1560 a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=P(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"==d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},
1561 1561 readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||
1562 1562 this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=Gg[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var s=function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression="ConditionalExpression";
1563 1563 s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal="Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression="ObjectExpression";s.ThisExpression="ThisExpression";s.LocalsExpression="LocalsExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);
1564 1564 a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program,body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},
1565 1565 assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=
1566 1566 this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),
1567 1567 b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):
1568 1568 this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=qa(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:s.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:s.CallExpression,
1569 1569 callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==
1570 1570 this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},
1571 1571 object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?b.key=this.constant():this.peek().identifier?b.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");b.value=this.expression();a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,b){throw ca("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===
1572 1572 this.tokens.length)throw ca("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ca("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?
1573 1573 (this.tokens.shift(),a):!1},selfReferential:{"this":{type:s.ThisExpression},$locals:{type:s.LocalsExpression}}};sd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};aa(c,d.$filter);var e="",f;this.stage="assign";if(f=qd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign","s,v,l");f=od(c.body);
1574 1574 d.stage="inputs";q(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext",
1575 1575 "ifDefined","plus","text",e))(this.$filter,Ta,sa,md,fg,Gb,jg,nd,a);this.state=this.stage=void 0;e.literal=rd(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;q(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;q(this.state.filters,
1576 1576 function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,h,k=this,l,n;c=c||C;if(!f&&x(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case s.Program:q(a.body,function(b,c){k.recurse(b.expression,
1577 1577 void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:n=this.escape(a.value);this.assign(b,n);c(n);break;case s.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});n=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,n);c(n);break;case s.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});n="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,
1578 1578 0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,n);c(n);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",
1579 1579 a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ta(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Hb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||
1580 1580 this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){e&&1!==e&&k.addEnsureSafeAssignContext(g);if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),n=k.ensureSafeObject(k.computedMember(g,h)),k.assign(b,n),d&&(d.computed=!0,d.name=h);else{Ta(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),
1581 1581 k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));n=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Hb(a.property.name))n=k.ensureSafeObject(n);k.assign(b,n);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],q(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),n=h+"("+l.join(",")+")",k.assign(b,n),c(b)):(h=k.nextId(),g={},l=
1582 1582 [],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);q(a.arguments,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),n=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):n=h+"("+l.join(",")+")";n=k.ensureSafeObject(n);k.assign(b,n)},function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};if(!pd(a.left))throw ca("lval");
1583 1583 this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);n=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,n);c(b||n)})},1);break;case s.ArrayExpression:l=[];q(a.elements,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(a)})});n="["+l.join(",")+"]";this.assign(b,n);c(n);break;case s.ObjectExpression:l=[];q(a.properties,function(a){k.recurse(a.value,
1584 1584 k.nextId(),void 0,function(b){l.push(k.escape(a.key.type===s.Identifier?a.key.name:""+a.key.value)+":"+b)})});n="{"+l.join(",")+"}";this.assign(b,n);c(n);break;case s.ThisExpression:this.assign(b,"s");c("s");break;case s.LocalsExpression:this.assign(b,"l");c("l");break;case s.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,
1585 1585 "=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+
1586 1586 "!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/[$_a-zA-Z][$_a-zA-Z0-9]*/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),
1587 1587 ";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=
1588 1588 this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(F(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Q(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw ca("esc");},nextId:function(a,
1589 1589 b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};td.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;aa(c,d.$filter);var e,f;if(e=qd(c))f=this.recurse(e);e=od(c.body);var g;e&&(g=[],q(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];q(c.body,function(a){h.push(d.recurse(a.expression))});e=0===c.body.length?C:1===
1590 1590 c.body.length?h[0]:function(a,b){var c;q(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal=rd(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case s.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),
1591 1591 this["binary"+a.operator](c,e,b);case s.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return Ta(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Hb(a.name),b,d,f.expression);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Ta(a.property.name,f.expression),
1592 1592 e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case s.CallExpression:return g=[],q(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var m=[],r=0;r<g.length;++r)m.push(g[r](a,c,d,f));a=e.apply(void 0,m,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,
1593 1593 c,d,n){var m=e(a,c,d,n),r;if(null!=m.value){sa(m.context,f.expression);md(m.value,f.expression);r=[];for(var q=0;q<g.length;++q)r.push(sa(g[q](a,c,d,n),f.expression));r=sa(m.value.apply(m.context,r),f.expression)}return b?{value:r}:r};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,g,n){var m=c(a,d,g,n);a=e(a,d,g,n);sa(m.value,f.expression);Gb(m.context);m.context[m.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],q(a.elements,function(a){g.push(f.recurse(a))}),
1594 1594 function(a,c,d,e){for(var f=[],r=0;r<g.length;++r)f.push(g[r](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],q(a.properties,function(a){g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},r=0;r<g.length;++r)f[g[r].key]=g[r].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.LocalsExpression:return function(a,c){return b?{value:c}:c};case s.NGValueParameter:return function(a,
1595 1595 c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=nd(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);
1596 1596 h=(x(h)?h:0)-(x(c)?c:0);return d?{value:h}:h}},"binary*":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,
1597 1597 e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,
1598 1598 g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,
1599 1599 name:void 0,value:a}:a}},identifier:function(a,b,d,c,e){return function(f,g,h,k){f=g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:void 0;b&&sa(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var l=a(f,g,h,k),n,m;null!=l&&(n=b(f,g,h,k),n+="",Ta(n,e),c&&1!==c&&(Gb(l),l&&!l[n]&&(l[n]={})),m=l[n],sa(m,e));return d?{context:l,name:n,value:m}:m}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,l){g=a(g,h,k,l);e&&1!==e&&(Gb(g),
1600 1600 g&&!g[b]&&(g[b]={}));h=null!=g?g[b]:void 0;(d||Hb(b))&&sa(h,f);return c?{context:g,name:b,value:h}:h}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var hc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(a,d);this.astCompiler=d.csp?new td(this.ast,b):new sd(this.ast,b)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var kg=Object.prototype.valueOf,ta=O("$sce"),oa={HTML:"html",CSS:"css",
1601 1601 URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},mg=O("$compile"),Y=v.document.createElement("a"),xd=ra(v.location.href);yd.$inject=["$document"];Jc.$inject=["$provide"];var Fd=22,Ed=".",jc="0";zd.$inject=["$locale"];Bd.$inject=["$locale"];var xg={yyyy:W("FullYear",4,0,!1,!0),yy:W("FullYear",2,0,!0,!0),y:W("FullYear",1,0,!1,!0),MMMM:ib("Month"),MMM:ib("Month",!0),MM:W("Month",2,1),M:W("Month",1,1),LLLL:ib("Month",!1,!0),dd:W("Date",2),d:W("Date",1),HH:W("Hours",2),H:W("Hours",1),hh:W("Hours",2,-12),
1602 1602 h:W("Hours",1,-12),mm:W("Minutes",2),m:W("Minutes",1),ss:W("Seconds",2),s:W("Seconds",1),sss:W("Milliseconds",3),EEEE:ib("Day"),EEE:ib("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Ib(Math[0<a?"floor":"ceil"](a/60),2)+Ib(Math.abs(a%60),2))},ww:Hd(2),w:Hd(1),G:kc,GG:kc,GGG:kc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},wg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
1603 1603 vg=/^\-?\d+$/;Ad.$inject=["$locale"];var qg=da(P),rg=da(sb);Cd.$inject=["$parse"];var ne=da({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===ma.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),tb={};q(Cb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=xa("ng-"+b),e=d;"checked"===a&&(e=function(a,
1604 1604 b,e){e.ngModel!==e[c]&&d(a,b,e)});tb[c]=function(){return{restrict:"A",priority:100,link:e}}}});q(ad,function(a,b){tb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(zg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});q(["src","srcset","href"],function(a){var b=xa("ng-"+a);tb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===
1605 1605 ma.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ca&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Jb={$addControl:C,$$renameControl:function(a,b){a.$name=b},$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C,$setSubmitted:C};Id.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Rd=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||C}return{name:"form",
1606 1606 restrict:a?"EAC":"E",require:["form","^^?form"],controller:Id,compile:function(d,f){d.addClass(Ua).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var m=f[0];if(!("action"in e)){var r=function(b){a.$apply(function(){m.$commitViewValue();m.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",r,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",r,!1)},0,!1)})}(f[1]||m.$$parentForm).$addControl(m);var q=g?c(m.$name):C;g&&
1607 1607 (q(a,m),e.$observe(g,function(b){m.$name!==b&&(q(a,void 0),m.$$parentForm.$$renameControl(m,b),q=c(m.$name),q(a,m))}));d.on("$destroy",function(){m.$$parentForm.$removeControl(m);q(a,void 0);R(m,Jb)})}}}}}]},oe=Rd(),Be=Rd(!0),yg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,Hg=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Ig=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
1608 1608 Jg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Sd=/^(\d{4,})-(\d{2})-(\d{2})$/,Td=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,nc=/^(\d{4,})-W(\d\d)$/,Ud=/^(\d{4,})-(\d\d)$/,Vd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Kd=T();q(["date","datetime-local","month","time","week"],function(a){Kd[a]=!0});var Wd={text:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c)},date:kb("date",Sd,Lb(Sd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Td,Lb(Td,"yyyy MM dd HH mm ss sss".split(" ")),
1609 1609 "yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Vd,Lb(Vd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",nc,function(a,b){if(fa(a))return a;if(F(a)){nc.lastIndex=0;var d=nc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Gd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:kb("month",Ud,Lb(Ud,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Ld(a,b,d,c);jb(a,b,d,c,e,f);c.$$parserName=
1610 1610 "number";c.$parsers.push(function(a){if(c.$isEmpty(a))return null;if(Jg.test(a))return parseFloat(a)});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!Q(a))throw lb("numfmt",a);a=a.toString()}return a});if(x(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)||y(g)||a>=g};d.$observe("min",function(a){x(a)&&!Q(a)&&(a=parseFloat(a,10));g=Q(a)&&!isNaN(a)?a:void 0;c.$validate()})}if(x(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||y(h)||a<=h};d.$observe("max",
1611 1611 function(a){x(a)&&!Q(a)&&(a=parseFloat(a,10));h=Q(a)&&!isNaN(a)?a:void 0;c.$validate()})}},url:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||Hg.test(d)}},email:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);lc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||Ig.test(d)}},radio:function(a,b,d,c){y(d.name)&&b.attr("name",++nb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value,
1612 1612 a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Md(h,a,"ngTrueValue",d.ngTrueValue,!0),l=Md(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return pa(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:C,button:C,submit:C,reset:C,
1613 1613 file:C},Dc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Wd[P(g.type)]||Wd.text)(e,f,g,h[0],b,a,d,c)}}}}],Kg=/^(true|false|\d+)$/,Te=function(){return{restrict:"A",priority:100,compile:function(a,b){return Kg.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},te=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);
1614 1614 return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=y(a)?"":a})}}}}],ve=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=y(a)?"":a})}}}}],ue=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=
1615 1615 b(e.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){c.html(a.getTrustedHtml(f(b))||"")})}}}}],Se=da({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),we=mc("",!0),ye=mc("Odd",0),xe=mc("Even",1),ze=La({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ae=[function(){return{restrict:"A",scope:!0,controller:"@",
1616 1616 priority:500}}],Ic={},Lg={blur:!0,focus:!0};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=xa("ng-"+a);Ic[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};Lg[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var De=["$animate","$compile",function(a,
1617 1617 b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var h,k,l;d.$watch(e.ngIf,function(d){d?k||g(function(d,f){k=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=rb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],Ee=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,
1618 1618 transclude:"element",controller:ea.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,n,m,r){var q=0,s,w,p,y=function(){w&&(w.remove(),w=null);s&&(s.$destroy(),s=null);p&&(d.leave(p).then(function(){w=null}),w=p,p=null)};c.$watch(f,function(f){var n=function(){!x(h)||h&&!c.$eval(h)||b()},u=++q;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&u===q){var b=c.$new();m.template=a;a=r(b,function(a){y();d.enter(a,null,e).then(n)});s=b;p=a;s.$emit("$includeContentLoaded",
1619 1619 f);c.$eval(g)}},function(){c.$$destroyed||u!==q||(y(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(y(),m.template=null)})}}}}],Ve=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){ma.call(d[0]).match(/SVG/)?(d.empty(),a(Lc(e.template,v.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],Fe=La({priority:450,compile:function(){return{pre:function(a,
1620 1620 b,d){a.$eval(d.ngInit)}}}}),Re=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?V(e):e;c.$parsers.push(function(a){if(!y(a)){var b=[];a&&q(a.split(g),function(a){a&&b.push(f?V(a):a)});return b}});c.$formatters.push(function(a){if(K(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",Nd="ng-invalid",Ua="ng-pristine",Kb="ng-dirty",Pd="ng-pending",lb=O("ngModel"),Mg=["$scope",
1621 1621 "$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=l(d.name||"",!1)(a);
1622 1622 this.$$parentForm=Jb;var n=e(d.ngModel),m=n.assign,r=n,s=m,v=null,w,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");r=function(a){var c=n(a);E(c)&&(c=b(a));return c};s=function(a,b){E(n(a))?f(a,{$$$p:b}):m(a,b)}}else if(!n.assign)throw lb("nonassign",d.ngModel,wa(c));};this.$render=C;this.$isEmpty=function(a){return y(a)||""===a||null===a||a!==a};this.$$updateEmptyClasses=function(a){p.$isEmpty(a)?(f.removeClass(c,"ng-not-empty"),
1623 1623 f.addClass(c,"ng-empty")):(f.removeClass(c,"ng-empty"),f.addClass(c,"ng-not-empty"))};var H=0;Jd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;f.removeClass(c,Kb);f.addClass(c,Ua)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;f.removeClass(c,Ua);f.addClass(c,Kb);p.$$parentForm.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")};
1624 1624 this.$setTouched=function(){p.$touched=!0;p.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(v);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!Q(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,b=p.$valid,c=p.$modelValue,d=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(e){d||b===e||(p.$modelValue=e?a:void 0,p.$modelValue!==c&&p.$$writeModelToScope())})}};
1625 1625 this.$$runValidators=function(a,b,c){function d(){var c=!0;q(p.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(q(p.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;q(p.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!E(h.then))throw lb("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},C):g(!0)}function f(a,b){h===H&&p.$setValidity(a,b)}function g(a){h===H&&c(a)}H++;var h=
1626 1626 H;(function(){var a=p.$$parserName||"parse";if(y(w))f(a,null);else return w||(q(p.$validators,function(a,b){f(b,null)}),q(p.$asyncValidators,function(a,b){f(b,null)})),f(a,w),w;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=p.$viewValue;g.cancel(v);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$updateEmptyClasses(a),p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=p.$$lastCommittedViewValue;
1627 1627 if(w=y(b)?void 0:!0)for(var c=0;c<p.$parsers.length;c++)if(b=p.$parsers[c](b),y(b)){w=!1;break}Q(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=r(a));var d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=b;e&&(p.$modelValue=b,p.$modelValue!==d&&p.$$writeModelToScope());p.$$runValidators(b,p.$$lastCommittedViewValue,function(a){e||(p.$modelValue=a?b:void 0,p.$modelValue!==d&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,p.$modelValue);q(p.$viewChangeListeners,
1628 1628 function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){p.$viewValue=a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=p.$options;d&&x(d.debounce)&&(d=d.debounce,Q(d)?c=d:Q(d[b])?c=d[b]:Q(d["default"])&&(c=d["default"]));g.cancel(v);c?v=g(function(){p.$commitViewValue()},c):h.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var b=r(a);if(b!==p.$modelValue&&(p.$modelValue===
1629 1629 p.$modelValue||b===b)){p.$modelValue=p.$$rawModelValue=b;w=void 0;for(var c=p.$formatters,d=c.length,e=b;d--;)e=c[d](e);p.$viewValue!==e&&(p.$$updateEmptyClasses(e),p.$viewValue=p.$$lastCommittedViewValue=e,p.$render(),p.$$runValidators(b,e,C))}return b})}],Qe=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Mg,priority:1,compile:function(b){b.addClass(Ua).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||
1630 1630 g.$$parentForm;g.$$setOptions(f[2]&&f[2].$options);b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],Ng=/(\s+|^)default(\s+|$)/,Ue=function(){return{restrict:"A",
1631 1631 controller:["$scope","$attrs",function(a,b){var d=this;this.$options=qa(a.$eval(b.ngModelOptions));x(this.$options.updateOn)?(this.$options.updateOnDefault=!1,this.$options.updateOn=V(this.$options.updateOn.replace(Ng,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Ge=La({terminal:!0,priority:1E3}),Og=O("ngOptions"),Pg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
1632 1632 Oe=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!q&&ya(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var m=a.match(Pg);if(!m)throw Og("iexp",a,wa(b));var r=m[5]||m[7],q=m[6];a=/ as /.test(m[0])&&m[1];var s=m[9];b=d(m[2]?m[1]:r);var w=a&&d(a)||b,p=s&&d(s),v=s?function(a,b){return p(c,b)}:function(a){return Fa(a)},
1633 1633 t=function(a,b){return v(a,L(a,b))},z=d(m[2]||m[1]),u=d(m[3]||""),y=d(m[4]||""),x=d(m[8]),D={},L=q?function(a,b){D[q]=b;D[r]=a;return D}:function(a){D[r]=a;return D};return{trackBy:s,getTrackByValue:t,getWatchables:d(x,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var h=a===d?g:d[g],l=a[h],h=L(l,h),l=v(l,h);b.push(l);if(m[2]||m[1])l=z(c,h),b.push(l);m[4]&&(h=y(c,h),b.push(h))}return b}),getOptions:function(){for(var a=[],b={},d=x(c)||[],g=f(d),h=g.length,m=0;m<h;m++){var p=d===
1634 1634 g?m:g[m],q=L(d[p],p),r=w(c,q),p=v(r,q),D=z(c,q),N=u(c,q),q=y(c,q),r=new e(p,r,D,N,q);a.push(r);b[p]=r}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[t(a)]},getViewValueFromOption:function(a){return s?ea.copy(a.viewValue):a.viewValue}}}}}var e=v.document.createElement("option"),f=v.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=C},post:function(d,h,k,l){function n(a,b){a.element=
1635 1635 b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);a.value!==b.value&&(b.value=a.selectValue)}function m(){var a=u&&r.readValue();if(u)for(var b=u.items.length-1;0<=b;b--){var c=u.items[b];c.group?Bb(c.element.parentNode):Bb(c.element)}u=I.getOptions();var d={};t&&h.prepend(w);u.items.forEach(function(a){var b;if(x(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),E.appendChild(b),b.label=a.group,d[a.group]=b);var c=e.cloneNode(!1)}else b=E,c=e.cloneNode(!1);b.appendChild(c);
1636 1636 n(a,c)});h[0].appendChild(E);s.$render();s.$isEmpty(a)||(b=r.readValue(),(I.trackBy||v?pa(a,b):a===b)||(s.$setViewValue(b),s.$render()))}var r=l[0],s=l[1],v=k.multiple,w;l=0;for(var p=h.children(),y=p.length;l<y;l++)if(""===p[l].value){w=p.eq(l);break}var t=!!w,z=B(e.cloneNode(!1));z.val("?");var u,I=c(k.ngOptions,h,d),E=b[0].createDocumentFragment();v?(s.$isEmpty=function(a){return!a||0===a.length},r.writeValue=function(a){u.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){if(a=
1637 1637 u.getOptionFromViewValue(a))a.element.selected=!0})},r.readValue=function(){var a=h.val()||[],b=[];q(a,function(a){(a=u.selectValueMap[a])&&!a.disabled&&b.push(u.getViewValueFromOption(a))});return b},I.trackBy&&d.$watchCollection(function(){if(K(s.$viewValue))return s.$viewValue.map(function(a){return I.getTrackByValue(a)})},function(){s.$render()})):(r.writeValue=function(a){var b=u.getOptionFromViewValue(a);b?(h[0].value!==b.selectValue&&(z.remove(),t||w.remove(),h[0].value=b.selectValue,b.element.selected=
1638 1638 !0),b.element.setAttribute("selected","selected")):null===a||t?(z.remove(),t||h.prepend(w),h.val(""),w.prop("selected",!0),w.attr("selected",!0)):(t||w.remove(),h.prepend(z),h.val("?"),z.prop("selected",!0),z.attr("selected",!0))},r.readValue=function(){var a=u.selectValueMap[h.val()];return a&&!a.disabled?(t||w.remove(),z.remove(),u.getViewValueFromOption(a)):null},I.trackBy&&d.$watch(function(){return I.getTrackByValue(s.$viewValue)},function(){s.$render()}));t?(w.remove(),a(w)(d),w.removeClass("ng-scope")):
1639 1639 w=B(e.cloneNode(!1));h.empty();m();d.$watchCollection(I.getWatchables,m)}}}}],He=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,h){function k(a){g.text(a||"")}var l=h.count,n=h.$attr.when&&g.attr(h.$attr.when),m=h.offset||0,r=f.$eval(n)||{},s={},v=b.startSymbol(),w=b.endSymbol(),p=v+l+"-"+m+w,x=ea.noop,t;q(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+P(c[2]),r[c]=g.attr(h.$attr[b]))});q(r,function(a,d){s[d]=b(a.replace(c,p))});f.$watch(l,
1640 1640 function(b){var c=parseFloat(b),e=isNaN(c);e||c in r||(c=a.pluralCat(c-m));c===t||e&&Q(t)&&isNaN(t)||(x(),e=s[c],y(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+n),x=C,k()):x=f.$watch(e,k),t=c)})}}}],Ie=["$parse","$animate","$compile",function(a,b,d){var c=O("ngRepeat"),e=function(a,b,c,d,e,n,m){a[c]=d;e&&(a[e]=n);a.$index=b;a.$first=0===b;a.$last=b===m-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,
1641 1641 terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=d.$$createComment("end ngRepeat",h),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",h);var n=l[1],m=l[2],r=l[3],s=l[4],l=n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!l)throw c("iidexp",n);var v=l[3]||l[1],w=l[2];if(r&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(r)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(r)))throw c("badident",
1642 1642 r);var p,y,t,z,u={$id:Fa};s?p=a(s):(t=function(a,b){return Fa(b)},z=function(a){return a});return function(a,d,f,g,l){p&&(y=function(b,c,d){w&&(u[w]=b);u[v]=c;u.$index=d;return p(a,u)});var n=T();a.$watchCollection(m,function(f){var g,m,p=d[0],s,u=T(),x,D,E,C,F,B,G;r&&(a[r]=f);if(ya(f))F=f,m=y||t;else for(G in m=y||z,F=[],f)ua.call(f,G)&&"$"!==G.charAt(0)&&F.push(G);x=F.length;G=Array(x);for(g=0;g<x;g++)if(D=f===F?g:F[g],E=f[D],C=m(D,E,g),n[C])B=n[C],delete n[C],u[C]=B,G[g]=B;else{if(u[C])throw q(G,
1643 1643 function(a){a&&a.scope&&(n[a.id]=a)}),c("dupes",h,C,E);G[g]={id:C,scope:void 0,clone:void 0};u[C]=!0}for(s in n){B=n[s];C=rb(B.clone);b.leave(C);if(C[0].parentNode)for(g=0,m=C.length;g<m;g++)C[g].$$NG_REMOVED=!0;B.scope.$destroy()}for(g=0;g<x;g++)if(D=f===F?g:F[g],E=f[D],B=G[g],B.scope){s=p;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);B.clone[0]!=s&&b.move(rb(B.clone),null,p);p=B.clone[B.clone.length-1];e(B.scope,g,v,E,w,D,x)}else l(function(a,c){B.scope=c;var d=k.cloneNode(!1);a[a.length++]=d;b.enter(a,
1644 1644 null,p);p=d;B.clone=a;u[B.id]=B;e(B.scope,g,v,E,w,D,x)});n=u})}}}}],Je=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ce=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ke=La(function(a,b,d){a.$watch(d.ngStyle,function(a,
1645 1645 d){d&&a!==d&&q(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Le=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],h=[],k=[],l=[],n=function(a,b){return function(){a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var s=rb(h[d].clone);l[d].$destroy();(k[d]=a.leave(s)).then(n(k,d))}h.length=0;l.length=0;(g=f.cases["!"+
1646 1646 c]||f.cases["?"])&&q(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],Me=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["!"+d.ngSwitchWhen]=c.cases["!"+d.ngSwitchWhen]||[];c.cases["!"+d.ngSwitchWhen].push({transclude:e,element:b})}}),Ne=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,
1647 1647 b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),Qg=O("ngTransclude"),Pe=La({restrict:"EAC",link:function(a,b,d,c,e){d.ngTransclude===d.$attr.ngTransclude&&(d.ngTransclude="");if(!e)throw Qg("orphan",wa(b));e(function(a){a.length&&(b.empty(),b.append(a))},null,d.ngTransclude||d.ngTranscludeSlot)}}),pe=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"==d.type&&a.put(d.id,b[0].text)}}}],Rg={$setViewValue:C,$render:C},
1648 1648 Sg=["$element","$scope",function(a,b){var d=this,c=new Ra;d.ngModelCtrl=Rg;d.unknownOption=B(v.document.createElement("option"));d.renderUnknownOption=function(b){b="? "+Fa(b)+" ?";d.unknownOption.val(b);a.prepend(d.unknownOption);a.val(b)};b.$on("$destroy",function(){d.renderUnknownOption=C});d.removeUnknownOption=function(){d.unknownOption.parent()&&d.unknownOption.remove()};d.readValue=function(){d.removeUnknownOption();return a.val()};d.writeValue=function(b){d.hasOption(b)?(d.removeUnknownOption(),
1649 1649 a.val(b),""===b&&d.emptyOption.prop("selected",!0)):null==b&&d.emptyOption?(d.removeUnknownOption(),a.val("")):d.renderUnknownOption(b)};d.addOption=function(a,b){if(8!==b[0].nodeType){Qa(a,'"option value"');""===a&&(d.emptyOption=b);var g=c.get(a)||0;c.put(a,g+1);d.ngModelCtrl.$render();b[0].hasAttribute("selected")&&(b[0].selected=!0)}};d.removeOption=function(a){var b=c.get(a);b&&(1===b?(c.remove(a),""===a&&(d.emptyOption=void 0)):c.put(a,b-1))};d.hasOption=function(a){return!!c.get(a)};d.registerOption=
1650 1650 function(a,b,c,h,k){if(h){var l;c.$observe("value",function(a){x(l)&&d.removeOption(l);l=a;d.addOption(a,b)})}else k?a.$watch(k,function(a,e){c.$set("value",a);e!==a&&d.removeOption(e);d.addOption(a,b)}):d.addOption(c.value,b);b.on("$destroy",function(){d.removeOption(c.value);d.ngModelCtrl.$render()})}}],qe=function(){return{restrict:"E",require:["select","?ngModel"],controller:Sg,priority:1,link:{pre:function(a,b,d,c){var e=c[1];if(e){var f=c[0];f.ngModelCtrl=e;b.on("change",function(){a.$apply(function(){e.$setViewValue(f.readValue())})});
1651 1651 if(d.multiple){f.readValue=function(){var a=[];q(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};f.writeValue=function(a){var c=new Ra(a);q(b.find("option"),function(a){a.selected=x(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!==e.$viewValue||pa(g,e.$viewValue)||(g=ha(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},se=["$interpolate",
1652 1652 function(a){return{restrict:"E",priority:100,compile:function(b,d){if(x(d.value))var c=a(d.value,!0);else{var e=a(b.text(),!0);e||d.$set("value",b.text())}return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,e)}}}}],re=da({restrict:"E",terminal:!1}),Fc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",
1653 1653 function(){c.$validate()}))}}},Ec=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){F(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw O("ngPattern")("noregexp",f,a,wa(b));e=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||y(e)||e.test(b)}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=
1654 1654 X(a);e=isNaN(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=X(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};v.angular.bootstrap?v.console&&console.log("WARNING: Tried to load angular more than once."):(ie(),ke(ea),ea.module("ngLocale",[],["$provide",function(a){function b(a){a+=
1655 1655 "";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
1656 1656 WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
1657 1657 c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),B(v.document).ready(function(){ee(v.document,yc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
1658 1658 //# sourceMappingURL=angular.min.js.map
1659 1659
1660 1660 ;/*
1661 1661 AngularJS v1.5.5
1662 1662 (c) 2010-2016 Google, Inc. http://angularjs.org
1663 1663 License: MIT
1664 1664 */
1665 1665 (function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
1666 1666 f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
1667 1667 ["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);
1668 1668 //# sourceMappingURL=angular-cookies.min.js.map
1669 1669
1670 1670 ;/*
1671 1671 AngularJS v1.5.5
1672 1672 (c) 2010-2016 Google, Inc. http://angularjs.org
1673 1673 License: MIT
1674 1674 */
1675 1675 (function(C,d){'use strict';function z(r,h,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,y){function k(){n&&(g.cancel(n),n=null);l&&(l.$destroy(),l=null);m&&(n=g.leave(m),n.then(function(){n=null}),m=null)}function x(){var b=r.current&&r.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),f=r.current;m=y(b,function(b){g.enter(b,null,m||c).then(function(){!d.isDefined(t)||t&&!a.$eval(t)||h()});k()});l=f.scope=b;l.$emit("$viewContentLoaded");
1676 1676 l.$eval(u)}else k()}var l,m,n,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,h,g){return{restrict:"ECA",priority:-400,link:function(a,c){var b=g.current,f=b.locals;c.html(f.$template);var y=d(c.contents());if(b.controller){f.$scope=a;var k=h(b.controller,f);b.controllerAs&&(a[b.controllerAs]=k);c.data("$ngControllerController",k);c.children().data("$ngControllerController",k)}a[b.resolveAs||"$resolve"]=f;y(a)}}}var w=d.module("ngRoute",["ng"]).provider("$route",function(){function r(a,
1677 1677 c){return d.extend(Object.create(a),c)}function h(a,d){var b=d.caseInsensitiveMatch,f={originalPath:a,regexp:a},g=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[\?\*])?/g,function(a,d,b,c){a="?"===c||"*?"===c?"?":null;c="*"===c||"*?"===c?"*":null;g.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=new RegExp("^"+a+"$",b?"i":"");return f}var g={};this.when=function(a,c){var b=
1678 1678 d.copy(c);d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&h(a,b));if(a){var f="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";g[f]=d.extend({redirectTo:a},h(f,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest",
1679 1679 "$sce",function(a,c,b,f,h,k,x){function l(b){var e=s.current;(w=(p=n())&&e&&p.$$route===e.$$route&&d.equals(p.pathParams,e.pathParams)&&!p.reloadOnSearch&&!u)||!e&&!p||a.$broadcast("$routeChangeStart",p,e).defaultPrevented&&b&&b.preventDefault()}function m(){var v=s.current,e=p;if(w)v.params=e.params,d.copy(v.params,b),a.$broadcast("$routeUpdate",v);else if(e||v)u=!1,(s.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?c.path(t(e.redirectTo,e.params)).search(e.params).replace():c.url(e.redirectTo(e.pathParams,
1680 1680 c.path(),c.search())).replace()),f.when(e).then(function(){if(e){var a=d.extend({},e.resolve),b,c;d.forEach(a,function(b,e){a[e]=d.isString(b)?h.get(b):h.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(c=e.templateUrl)&&(d.isFunction(c)&&(c=c(e.params)),d.isDefined(c)&&(e.loadedTemplateUrl=x.valueOf(c),b=k(c)));d.isDefined(b)&&(a.$template=b);return f.all(a)}}).then(function(c){e==s.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",
1681 1681 e,v))},function(b){e==s.current&&a.$broadcast("$routeChangeError",e,v,b)})}function n(){var a,b;d.forEach(g,function(f,g){var q;if(q=!b){var h=c.path();q=f.keys;var l={};if(f.regexp)if(h=f.regexp.exec(h)){for(var k=1,n=h.length;k<n;++k){var m=q[k-1],p=h[k];m&&p&&(l[m.name]=p)}q=l}else q=null;else q=null;q=a=q}q&&(b=r(f,{params:d.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||g[null]&&r(g[null],{params:{},pathParams:{}})}function t(a,b){var c=[];d.forEach((a||"").split(":"),function(a,
1682 1682 d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var u=!1,p,w,s={routes:g,reload:function(){u=!0;var b={defaultPrevented:!1,preventDefault:function(){this.defaultPrevented=!0;u=!1}};a.$evalAsync(function(){l(b);b.defaultPrevented||m()})},updateParams:function(a){if(this.current&&this.current.$$route)a=d.extend({},this.current.params,a),c.path(t(this.current.$$route.originalPath,a)),c.search(a);else throw B("norout");
1683 1683 }};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",m);return s}]}),B=d.$$minErr("ngRoute");w.provider("$routeParams",function(){this.$get=function(){return{}}});w.directive("ngView",z);w.directive("ngView",A);z.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
1684 1684 //# sourceMappingURL=angular-route.min.js.map
1685 1685
1686 1686 ;/*
1687 1687 AngularJS v1.5.5
1688 1688 (c) 2010-2016 Google, Inc. http://angularjs.org
1689 1689 License: MIT
1690 1690 */
1691 1691 (function(P,d){'use strict';function G(t,g){g=g||{};d.forEach(g,function(d,q){delete g[q]});for(var q in t)!t.hasOwnProperty(q)||"$"===q.charAt(0)&&"$"===q.charAt(1)||(g[q]=t[q]);return g}var z=d.$$minErr("$resource"),M=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var t=/^https?:\/\/[^\/]*/,g=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
1692 1692 this.$get=["$http","$log","$q","$timeout",function(q,L,H,I){function A(d,h){return encodeURIComponent(d).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,h?"%20":"+")}function B(d,h){this.template=d;this.defaults=v({},g.defaults,h);this.urlParams={}}function J(e,h,n,k){function c(a,b){var c={};b=v({},h,b);u(b,function(b,h){x(b)&&(b=b());var f;if(b&&b.charAt&&"@"==b.charAt(0)){f=a;var l=b.substr(1);if(null==l||""===l||"hasOwnProperty"===l||!M.test("."+
1693 1693 l))throw z("badmember",l);for(var l=l.split("."),m=0,k=l.length;m<k&&d.isDefined(f);m++){var r=l[m];f=null!==f?f[r]:void 0}}else f=b;c[h]=f});return c}function N(a){return a.resource}function m(a){G(a||{},this)}var t=new B(e,k);n=v({},g.defaults.actions,n);m.prototype.toJSON=function(){var a=v({},this);delete a.$promise;delete a.$resolved;return a};u(n,function(a,b){var h=/^(POST|PUT|PATCH)$/i.test(a.method),e=a.timeout,E=d.isDefined(a.cancellable)?a.cancellable:k&&d.isDefined(k.cancellable)?k.cancellable:
1694 1694 g.defaults.cancellable;e&&!d.isNumber(e)&&(L.debug("ngResource:\n Only numeric values are allowed as `timeout`.\n Promises are not supported in $resource, because the same value would be used for multiple requests. If you are looking for a way to cancel requests, you should use the `cancellable` option."),delete a.timeout,e=null);m[b]=function(f,l,k,g){var r={},n,w,C;switch(arguments.length){case 4:C=g,w=k;case 3:case 2:if(x(l)){if(x(f)){w=f;C=l;break}w=l;C=k}else{r=f;n=l;w=k;break}case 1:x(f)?
1695 1695 w=f:h?n=f:r=f;break;case 0:break;default:throw z("badargs",arguments.length);}var D=this instanceof m,p=D?n:a.isArray?[]:new m(n),s={},A=a.interceptor&&a.interceptor.response||N,B=a.interceptor&&a.interceptor.responseError||void 0,y,F;u(a,function(a,b){switch(b){default:s[b]=O(a);case "params":case "isArray":case "interceptor":case "cancellable":}});!D&&E&&(y=H.defer(),s.timeout=y.promise,e&&(F=I(y.resolve,e)));h&&(s.data=n);t.setUrlParams(s,v({},c(n,a.params||{}),r),a.url);r=q(s).then(function(f){var c=
1696 1696 f.data;if(c){if(d.isArray(c)!==!!a.isArray)throw z("badcfg",b,a.isArray?"array":"object",d.isArray(c)?"array":"object",s.method,s.url);if(a.isArray)p.length=0,u(c,function(b){"object"===typeof b?p.push(new m(b)):p.push(b)});else{var l=p.$promise;G(c,p);p.$promise=l}}f.resource=p;return f},function(b){(C||K)(b);return H.reject(b)});r["finally"](function(){p.$resolved=!0;!D&&E&&(p.$cancelRequest=d.noop,I.cancel(F),y=F=s.timeout=null)});r=r.then(function(b){var a=A(b);(w||K)(a,b.headers);return a},B);
1697 1697 return D?r:(p.$promise=r,p.$resolved=!1,E&&(p.$cancelRequest=y.resolve),p)};m.prototype["$"+b]=function(a,c,d){x(a)&&(d=c,c=a,a={});a=m[b].call(this,a,this,c,d);return a.$promise||a}});m.bind=function(a){return J(e,v({},h,a),n)};return m}var K=d.noop,u=d.forEach,v=d.extend,O=d.copy,x=d.isFunction;B.prototype={setUrlParams:function(e,h,n){var k=this,c=n||k.template,g,m,q="",a=k.urlParams={};u(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw z("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+
1698 1698 b+"(\\W|$)")).test(c)&&(a[b]={isQueryParamValue:(new RegExp("\\?.*=:"+b+"(?:\\W|$)")).test(c)})});c=c.replace(/\\:/g,":");c=c.replace(t,function(a){q=a;return""});h=h||{};u(k.urlParams,function(a,e){g=h.hasOwnProperty(e)?h[e]:k.defaults[e];d.isDefined(g)&&null!==g?(m=a.isQueryParamValue?A(g,!0):A(g,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+e+"(\\W|$)","g"),function(a,b){return m+b})):c=c.replace(new RegExp("(/?):"+e+"(\\W|$)","g"),function(a,b,c){return"/"==
1699 1699 c.charAt(0)?c:b+c})});k.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");e.url=q+c.replace(/\/\\\./,"/.");u(h,function(a,c){k.urlParams[c]||(e.params=e.params||{},e.params[c]=a)})}};return J}]})})(window,window.angular);
1700 1700 //# sourceMappingURL=angular-resource.min.js.map
1701 1701
1702 1702 ;/*
1703 1703 AngularJS v1.5.5
1704 1704 (c) 2010-2016 Google, Inc. http://angularjs.org
1705 1705 License: MIT
1706 1706 */
1707 1707 (function(S,q){'use strict';function Aa(a,b,c){if(!a)throw Ma("areq",b||"?",c||"required");return a}function Ba(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;ba(a)&&(a=a.join(" "));ba(b)&&(b=b.join(" "));return a+" "+b}function Na(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function X(a,b,c){var d="";a=ba(a)?a:a&&P(a)&&a.length?a.split(/\s+/):[];r(a,function(a,f){a&&0<a.length&&(d+=0<f?" ":"",d+=c?b+a:a+b)});return d}function Oa(a){if(a instanceof G)switch(a.length){case 0:return[];
1708 1708 case 1:if(1===a[0].nodeType)return a;break;default:return G(ca(a))}if(1===a.nodeType)return G(a)}function ca(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Pa(a,b,c){r(b,function(b){a.addClass(b,c)})}function Qa(a,b,c){r(b,function(b){a.removeClass(b,c)})}function U(a){return function(b,c){c.addClass&&(Pa(a,b,c.addClass),c.addClass=null);c.removeClass&&(Qa(a,b,c.removeClass),c.removeClass=null)}}function pa(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
1709 1709 Q;a.domOperation=function(){a.$$domOperationFired=!0;b();b=Q};a.$$prepared=!0}return a}function ga(a,b){Ca(a,b);Da(a,b)}function Ca(a,b){b.from&&(a.css(b.from),b.from=null)}function Da(a,b){b.to&&(a.css(b.to),b.to=null)}function V(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),f=(d.removeClass||"")+" "+(c.removeClass||"");a=Ra(a.attr("class"),e,f);c.preparationClasses&&(d.preparationClasses=Y(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
1710 1710 e=d.domOperation!==Q?d.domOperation:null;Ea(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Ra(a,b,c){function d(a){P(a)&&(a=a.split(" "));var b={};r(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);r(b,function(a,b){e[b]=1});c=d(c);r(c,function(a,b){e[b]=1===e[b]?null:-1});var f={addClass:"",removeClass:""};r(e,function(b,c){var d,e;1===b?(d="addClass",
1711 1711 e=!a[c]):-1===b&&(d="removeClass",e=a[c]);e&&(f[d].length&&(f[d]+=" "),f[d]+=c)});return f}function D(a){return a instanceof q.element?a[0]:a}function Sa(a,b,c){var d="";b&&(d=X(b,"ng-",!0));c.addClass&&(d=Y(d,X(c.addClass,"-add")));c.removeClass&&(d=Y(d,X(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function qa(a,b){var c=b?"-"+b+"s":"";la(a,[ma,c]);return[ma,c]}function ta(a,b){var c=b?"paused":"",d=Z+"PlayState";la(a,[d,c]);return[d,c]}function la(a,b){a.style[b[0]]=
1712 1712 b[1]}function Y(a,b){return a?b?a+" "+b:a:b}function Fa(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};r(c,function(a,b){var c=e[a];if(c){var s=c.charAt(0);if("-"===s||"+"===s||0<=s)c=Ta(c);0===c&&(c=null);d[b]=c}});return d}function Ta(a){var b=0;a=a.split(/\s*,\s*/);r(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function ua(a){return 0===a||null!=a}function Ga(a,b){var c=T,d=a+"s";b?c+="Duration":d+=" linear all";
1713 1713 return[c,d]}function Ha(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ia(a,b,c){r(c,function(c){a[c]=da(a[c])?a[c]:b.style.getPropertyValue(c)})}var Q=q.noop,Ja=q.copy,Ea=q.extend,G=q.element,r=q.forEach,ba=q.isArray,P=q.isString,va=q.isObject,C=q.isUndefined,da=q.isDefined,Ka=q.isFunction,wa=q.isElement,T,xa,Z,ya;C(S.ontransitionend)&&
1714 1714 da(S.onwebkittransitionend)?(T="WebkitTransition",xa="webkitTransitionEnd transitionend"):(T="transition",xa="transitionend");C(S.onanimationend)&&da(S.onwebkitanimationend)?(Z="WebkitAnimation",ya="webkitAnimationEnd animationend"):(Z="animation",ya="animationend");var ra=Z+"Delay",za=Z+"Duration",ma=T+"Delay",La=T+"Duration",Ma=q.$$minErr("ng"),Ua={transitionDuration:La,transitionDelay:ma,transitionProperty:T+"Property",animationDuration:za,animationDelay:ra,animationIterationCount:Z+"IterationCount"},
1715 1715 Va={transitionDuration:La,transitionDelay:ma,animationDuration:za,animationDelay:ra};q.module("ngAnimate",[]).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,e,f,z){var B,s;b.$watchCollection(e.ngAnimateSwap||e["for"],function(e){B&&a.leave(B);s&&(s.$destroy(),s=null);if(e||0===e)s=b.$new(),z(s,function(b){B=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,
1716 1716 c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var f=d.ngAnimateChildren;q.isString(f)&&0===f.length?c.data("$$ngAnimateChildren",!0):(e(a(f)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),z=0;z<b.length;z++)b[z]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",
1717 1717 ["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);r(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c,d){return f[a].some(function(a){return a(b,c,d)})}function e(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var f=this.rules={skip:[],cancel:[],join:[]};f.join.push(function(a,b,c){return!b.structural&&e(b)});f.skip.push(function(a,
1718 1718 b,c){return!b.structural&&!e(b)});f.skip.push(function(a,b,c){return"leave"==c.event&&b.structural});f.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});f.cancel.push(function(a,b,c){return c.structural&&b.structural});f.cancel.push(function(a,b,c){return 2===c.state&&b.structural});f.cancel.push(function(a,b,d){if(d.structural)return!1;a=b.addClass;b=b.removeClass;var e=d.addClass;d=d.removeClass;return C(a)&&C(b)||C(e)&&C(d)?!1:c(a,d)||c(b,e)});this.$get=["$$rAF","$rootScope",
1719 1719 "$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(b,c,f,v,I,Wa,u,sa,w,x){function R(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function J(a,b,c){var g=D(b),d=D(a),k=[];(a=h[c])&&r(a,function(a){ia.call(a.node,g)?k.push(a.callback):"leave"===c&&ia.call(a.node,d)&&k.push(a.callback)});return k}function k(a,b,c){var g=ca(b);return a.filter(function(a){return!(a.node===g&&(!c||a.callback===c))})}
1720 1720 function p(a,k,h){function l(c,g,d,h){f(function(){var c=J(oa,a,g);c.length?b(function(){r(c,function(b){b(a,d,h)});"close"!==d||a[0].parentNode||N.off(a)}):"close"!==d||a[0].parentNode||N.off(a)});c.progress(g,d,h)}function A(b){var c=a,g=m;g.preparationClasses&&(c.removeClass(g.preparationClasses),g.preparationClasses=null);g.activeClasses&&(c.removeClass(g.activeClasses),g.activeClasses=null);F(a,m);ga(a,m);m.domOperation();p.complete(!b)}var m=Ja(h),x,oa;if(a=Oa(a))x=D(a),oa=a.parent();var m=
1721 1721 pa(m),p=new u,f=R();ba(m.addClass)&&(m.addClass=m.addClass.join(" "));m.addClass&&!P(m.addClass)&&(m.addClass=null);ba(m.removeClass)&&(m.removeClass=m.removeClass.join(" "));m.removeClass&&!P(m.removeClass)&&(m.removeClass=null);m.from&&!va(m.from)&&(m.from=null);m.to&&!va(m.to)&&(m.to=null);if(!x)return A(),p;h=[x.className,m.addClass,m.removeClass].join(" ");if(!Xa(h))return A(),p;var s=0<=["enter","move","leave"].indexOf(k),t=v[0].hidden,w=!g||t||H.get(x);h=!w&&y.get(x)||{};var I=!!h.state;w||
1722 1722 I&&1==h.state||(w=!K(a,oa,k));if(w)return t&&l(p,k,"start"),A(),t&&l(p,k,"close"),p;s&&L(a);t={structural:s,element:a,event:k,addClass:m.addClass,removeClass:m.removeClass,close:A,options:m,runner:p};if(I){if(d("skip",a,t,h)){if(2===h.state)return A(),p;V(a,h,t);return h.runner}if(d("cancel",a,t,h))if(2===h.state)h.runner.end();else if(h.structural)h.close();else return V(a,h,t),h.runner;else if(d("join",a,t,h))if(2===h.state)V(a,t,{});else return Sa(a,s?k:null,m),k=t.event=h.event,m=V(a,h,t),h.runner}else V(a,
1723 1723 t,{});(I=t.structural)||(I="animate"===t.event&&0<Object.keys(t.options.to||{}).length||e(t));if(!I)return A(),O(a),p;var ia=(h.counter||0)+1;t.counter=ia;M(a,1,t);c.$$postDigest(function(){var b=y.get(x),c=!b,b=b||{},g=0<(a.parent()||[]).length&&("animate"===b.event||b.structural||e(b));if(c||b.counter!==ia||!g){c&&(F(a,m),ga(a,m));if(c||s&&b.event!==k)m.domOperation(),p.end();g||O(a)}else k=!b.structural&&e(b,!0)?"setClass":b.event,M(a,2),b=Wa(a,k,b.options),p.setHost(b),l(p,k,"start",{}),b.done(function(b){A(!b);
1724 1724 (b=y.get(x))&&b.counter===ia&&O(D(a));l(p,k,"close",{})})});return p}function L(a){a=D(a).querySelectorAll("[data-ng-animate]");r(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=y.get(a);if(c)switch(b){case 2:c.runner.end();case 1:y.remove(a)}})}function O(a){a=D(a);a.removeAttribute("data-ng-animate");y.remove(a)}function l(a,b){return D(a)===D(b)}function K(a,b,c){c=G(v[0].body);var g=l(a,c)||"HTML"===a[0].nodeName,d=l(a,f),h=!1,k,e=H.get(D(a));(a=G.data(a[0],"$ngAnimatePin"))&&
1725 1725 (b=a);for(b=D(b);b;){d||(d=l(b,f));if(1!==b.nodeType)break;a=y.get(b)||{};if(!h){var p=H.get(b);if(!0===p&&!1!==e){e=!0;break}else!1===p&&(e=!1);h=a.structural}if(C(k)||!0===k)a=G.data(b,"$$ngAnimateChildren"),da(a)&&(k=a);if(h&&!1===k)break;g||(g=l(b,c));if(g&&d)break;if(!d&&(a=G.data(b,"$ngAnimatePin"))){b=D(a);continue}b=b.parentNode}return(!h||k)&&!0!==e&&d&&g}function M(a,b,c){c=c||{};c.state=b;a=D(a);a.setAttribute("data-ng-animate",b);c=(b=y.get(a))?Ea(b,c):c;y.put(a,c)}var y=new I,H=new I,
1726 1726 g=null,oa=c.$watch(function(){return 0===sa.totalPendingRequests},function(a){a&&(oa(),c.$$postDigest(function(){c.$$postDigest(function(){null===g&&(g=!0)})}))}),h={},A=a.classNameFilter(),Xa=A?function(a){return A.test(a)}:function(){return!0},F=U(w),ia=S.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)},N={on:function(a,b,c){var g=ca(b);h[a]=h[a]||[];h[a].push({node:g,callback:c});G(b).on("$destroy",function(){y.get(g)||N.off(a,b,c)})},off:function(a,
1727 1727 b,c){if(1!==arguments.length||q.isString(arguments[0])){var g=h[a];g&&(h[a]=1===arguments.length?null:k(g,b,c))}else for(g in b=arguments[0],h)h[g]=k(h[g],b)},pin:function(a,b){Aa(wa(a),"element","not an element");Aa(wa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,g){c=c||{};c.domOperation=g;return p(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!g;else if(wa(a)){var d=D(a),h=H.get(d);1===c?b=!h:H.put(d,!b)}else b=g=!!a;return b}};return N}]}]).provider("$$animation",
1728 1728 ["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,e,f,z,B,s){function v(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,L=d.parentNode;e.put(d,a);for(var f;L;){if(f=e.get(L)){f.processed||(f=b(f));break}L=L.parentNode}(f||c).children.push(a);return a}var c={children:[]},d,e=new B;for(d=0;d<a.length;d++){var f=a[d];e.put(f.domNode,
1729 1729 a[d]={domNode:f.domNode,fn:f.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var e=0,f=[];for(d=0;d<c.length;d++){var x=c[d];0>=a&&(a=e,e=0,b.push(f),f=[]);f.push(x.fn);x.children.forEach(function(a){e++;c.push(a)});a--}f.length&&b.push(f);return b}(c)}var I=[],q=U(a);return function(u,B,w){function x(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];r(a,function(a){var c=
1730 1730 a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function R(a){var b=[],c={};r(a,function(a,g){var d=D(a.element),e=0<=["enter","move"].indexOf(a.event),d=a.structural?x(d):[];if(d.length){var k=e?"to":"from";r(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][k]={animationID:g,element:G(a)}})}else b.push(a)});var d={},e={};r(c,function(c,h){var k=c.from,f=c.to;if(k&&f){var p=a[k.animationID],y=a[f.animationID],l=k.animationID.toString();if(!e[l]){var x=e[l]=
1731 1731 {structural:!0,beforeStart:function(){p.beforeStart();y.beforeStart()},close:function(){p.close();y.close()},classes:J(p.classes,y.classes),from:p,to:y,anchors:[]};x.classes.length?b.push(x):(b.push(p),b.push(y))}e[l].anchors.push({out:k.element,"in":f.element})}else k=k?k.animationID:f.animationID,f=k.toString(),d[f]||(d[f]=!0,b.push(a[k]))});return b}function J(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var k=a[d];if("ng-"!==k.substring(0,3))for(var e=0;e<b.length;e++)if(k===
1732 1732 b[e]){c.push(k);break}}return c.join(" ")}function k(a){for(var b=c.length-1;0<=b;b--){var d=c[b];if(f.has(d)&&(d=f.get(d)(a)))return d}}function p(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function L(){var a=b(u);!a||"leave"===B&&w.$$domOperationFired||a.end()}function O(b){u.off("$destroy",L);u.removeData("$$animationRunner");q(u,w);ga(u,w);w.domOperation();y&&a.removeClass(u,y);u.removeClass("ng-animate");K.complete(!b)}w=pa(w);var l=0<=
1733 1733 ["enter","move","leave"].indexOf(B),K=new z({end:function(){O()},cancel:function(){O(!0)}});if(!c.length)return O(),K;u.data("$$animationRunner",K);var M=Ba(u.attr("class"),Ba(w.addClass,w.removeClass)),y=w.tempClasses;y&&(M+=" "+y,w.tempClasses=null);var H;l&&(H="ng-"+B+"-prepare",a.addClass(u,H));I.push({element:u,classes:M,event:B,structural:l,options:w,beforeStart:function(){u.addClass("ng-animate");y&&a.addClass(u,y);H&&(a.removeClass(u,H),H=null)},close:O});u.on("$destroy",L);if(1<I.length)return K;
1734 1734 e.$$postDigest(function(){var a=[];r(I,function(c){b(c.element)?a.push(c):c.close()});I.length=0;var c=R(a),d=[];r(c,function(a){d.push({domNode:D(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var c,d=a.close;if(b(a.anchors?a.from.element||a.to.element:a.element)){var g=k(a);g&&(c=g.start)}c?(c=c(),c.done(function(a){d(!a)}),p(a,c)):d()}})});s(v(d))});return K}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Ha(),c=Ha();this.$get=["$window","$$jqLite","$$AnimateRunner",
1735 1735 "$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,e,f,z,B,s,v,I){function q(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++R))+"-"+a.getAttribute("class")+"-"+b}function u(k,f,x,s){var l;0<b.count(x)&&(l=c.get(x),l||(f=X(f,"-stagger"),e.addClass(k,f),l=Fa(a,k,s),l.animationDuration=Math.max(l.animationDuration,0),l.transitionDuration=Math.max(l.transitionDuration,0),e.removeClass(k,f),c.put(x,l)));return l||{}}function sa(a){J.push(a);
1736 1736 v.waitUntilQuiet(function(){b.flush();c.flush();for(var a=B(),d=0;d<J.length;d++)J[d](a);J.length=0})}function w(c,e,f){e=b.get(f);e||(e=Fa(a,c,Ua),"infinite"===e.animationIterationCount&&(e.animationIterationCount=1));b.put(f,e);c=e;f=c.animationDelay;e=c.transitionDelay;c.maxDelay=f&&e?Math.max(f,e):f||e;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var x=U(e),R=0,J=[];return function(a,c){function d(){l()}function v(){l(!0)}function l(b){if(!(R||
1737 1737 G&&N)){R=!0;N=!1;g.$$skipPreparationClasses||e.removeClass(a,fa);e.removeClass(a,da);ta(h,!1);qa(h,!1);r(A,function(a){h.style[a[0]]=""});x(a,g);ga(a,g);Object.keys(J).length&&r(J,function(a,b){a?h.style.setProperty(b,a):h.style.removeProperty(b)});if(g.onDone)g.onDone();ea&&ea.length&&a.off(ea.join(" "),y);var c=a.data("$$animateCss");c&&(z.cancel(c[0].timer),a.removeData("$$animateCss"));C&&C.complete(!b)}}function K(a){n.blockTransition&&qa(h,a);n.blockKeyframeAnimation&&ta(h,!!a)}function M(){C=
1738 1738 new f({end:d,cancel:v});sa(Q);l();return{$$willAnimate:!1,start:function(){return C},end:d}}function y(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-V,0)>=S&&b>=m&&(G=!0,l())}function H(){function b(){if(!R){K(!1);r(A,function(a){h.style[a[0]]=a[1]});x(a,g);e.addClass(a,da);if(n.recalculateTimingStyles){na=h.className+" "+fa;ja=q(h,na);E=w(h,na,ja);$=E.maxDelay;ha=Math.max($,0);m=E.maxDuration;if(0===m){l();return}n.hasTransitions=
1739 1739 0<E.transitionDuration;n.hasAnimations=0<E.animationDuration}n.applyAnimationDelay&&($="boolean"!==typeof g.delay&&ua(g.delay)?parseFloat(g.delay):$,ha=Math.max($,0),E.animationDelay=$,aa=[ra,$+"s"],A.push(aa),h.style[aa[0]]=aa[1]);S=1E3*ha;U=1E3*m;if(g.easing){var d,f=g.easing;n.hasTransitions&&(d=T+"TimingFunction",A.push([d,f]),h.style[d]=f);n.hasAnimations&&(d=Z+"TimingFunction",A.push([d,f]),h.style[d]=f)}E.transitionDuration&&ea.push(xa);E.animationDuration&&ea.push(ya);V=Date.now();var H=S+
1740 1740 1.5*U;d=V+H;var f=a.data("$$animateCss")||[],s=!0;if(f.length){var p=f[0];(s=d>p.expectedEndTime)?z.cancel(p.timer):f.push(l)}s&&(H=z(c,H,!1),f[0]={timer:H,expectedEndTime:d},f.push(l),a.data("$$animateCss",f));if(ea.length)a.on(ea.join(" "),y);g.to&&(g.cleanupStyles&&Ia(J,h,Object.keys(g.to)),Da(a,g))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!R)if(h.parentNode){var d=function(a){if(G)N&&a&&(N=!1,l());else if(N=!a,E.animationDuration)if(a=
1741 1741 ta(h,N),N)A.push(a);else{var b=A,c=b.indexOf(a);0<=a&&b.splice(c,1)}},f=0<ca&&(E.transitionDuration&&0===W.transitionDuration||E.animationDuration&&0===W.animationDuration)&&Math.max(W.animationDelay,W.transitionDelay);f?z(b,Math.floor(f*ca*1E3),!1):b();P.resume=function(){d(!0)};P.pause=function(){d(!1)}}else l()}var g=c||{};g.$$prepared||(g=pa(Ja(g)));var J={},h=D(a);if(!h||!h.parentNode||!I.enabled())return M();var A=[],B=a.attr("class"),F=Na(g),R,N,G,C,P,ha,S,m,U,V,ea=[];if(0===g.duration||!s.animations&&
1742 1742 !s.transitions)return M();var ka=g.event&&ba(g.event)?g.event.join(" "):g.event,Y="",t="";ka&&g.structural?Y=X(ka,"ng-",!0):ka&&(Y=ka);g.addClass&&(t+=X(g.addClass,"-add"));g.removeClass&&(t.length&&(t+=" "),t+=X(g.removeClass,"-remove"));g.applyClassesEarly&&t.length&&x(a,g);var fa=[Y,t].join(" ").trim(),na=B+" "+fa,da=X(fa,"-active"),B=F.to&&0<Object.keys(F.to).length;if(!(0<(g.keyframeStyle||"").length||B||fa))return M();var ja,W;0<g.stagger?(F=parseFloat(g.stagger),W={transitionDelay:F,animationDelay:F,
1743 1743 transitionDuration:0,animationDuration:0}):(ja=q(h,na),W=u(h,fa,ja,Va));g.$$skipPreparationClasses||e.addClass(a,fa);g.transitionStyle&&(F=[T,g.transitionStyle],la(h,F),A.push(F));0<=g.duration&&(F=0<h.style[T].length,F=Ga(g.duration,F),la(h,F),A.push(F));g.keyframeStyle&&(F=[Z,g.keyframeStyle],la(h,F),A.push(F));var ca=W?0<=g.staggerIndex?g.staggerIndex:b.count(ja):0;(ka=0===ca)&&!g.skipBlocking&&qa(h,9999);var E=w(h,na,ja),$=E.maxDelay;ha=Math.max($,0);m=E.maxDuration;var n={};n.hasTransitions=
1744 1744 0<E.transitionDuration;n.hasAnimations=0<E.animationDuration;n.hasTransitionAll=n.hasTransitions&&"all"==E.transitionProperty;n.applyTransitionDuration=B&&(n.hasTransitions&&!n.hasTransitionAll||n.hasAnimations&&!n.hasTransitions);n.applyAnimationDuration=g.duration&&n.hasAnimations;n.applyTransitionDelay=ua(g.delay)&&(n.applyTransitionDuration||n.hasTransitions);n.applyAnimationDelay=ua(g.delay)&&n.hasAnimations;n.recalculateTimingStyles=0<t.length;if(n.applyTransitionDuration||n.applyAnimationDuration)m=
1745 1745 g.duration?parseFloat(g.duration):m,n.applyTransitionDuration&&(n.hasTransitions=!0,E.transitionDuration=m,F=0<h.style[T+"Property"].length,A.push(Ga(m,F))),n.applyAnimationDuration&&(n.hasAnimations=!0,E.animationDuration=m,A.push([za,m+"s"]));if(0===m&&!n.recalculateTimingStyles)return M();if(null!=g.delay){var aa;"boolean"!==typeof g.delay&&(aa=parseFloat(g.delay),ha=Math.max(aa,0));n.applyTransitionDelay&&A.push([ma,aa+"s"]);n.applyAnimationDelay&&A.push([ra,aa+"s"])}null==g.duration&&0<E.transitionDuration&&
1746 1746 (n.recalculateTimingStyles=n.recalculateTimingStyles||ka);S=1E3*ha;U=1E3*m;g.skipBlocking||(n.blockTransition=0<E.transitionDuration,n.blockKeyframeAnimation=0<E.animationDuration&&0<W.animationDelay&&0===W.animationDuration);g.from&&(g.cleanupStyles&&Ia(J,h,Object.keys(g.from)),Ca(a,g));n.blockTransition||n.blockKeyframeAnimation?K(m):g.skipBlocking||qa(h,!1);return{$$willAnimate:!0,end:d,start:function(){if(!R)return P={end:d,cancel:v,resume:null,pause:null},C=new f(P),sa(H),C}}}}]}]).provider("$$animateCssDriver",
1747 1747 ["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,f,z,B){function s(a){return a.replace(/\bng-\S+\b/g,"")}function v(a,b){P(a)&&(a=a.split(" "));P(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function I(c,e,f){function k(a){var b={},c=D(a).getBoundingClientRect();r(["width","height","top","left"],function(a){var d=c[a];
1748 1748 switch(a){case "top":d+=C.scrollTop;break;case "left":d+=C.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function p(){var c=s(f.attr("class")||""),d=v(c,l),c=v(l,c),d=a(z,{to:k(f),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function B(){z.remove();e.removeClass("ng-animate-shim");f.removeClass("ng-animate-shim")}var z=G(D(e).cloneNode(!0)),l=s(z.attr("class")||"");e.addClass("ng-animate-shim");f.addClass("ng-animate-shim");z.addClass("ng-anchor");
1749 1749 w.append(z);var K;c=function(){var c=a(z,{addClass:"ng-anchor-out",delay:!0,from:k(e)});return c.$$willAnimate?c:null}();if(!c&&(K=p(),!K))return B();var M=c||K;return{start:function(){function a(){c&&c.end()}var b,c=M.start();c.done(function(){c=null;if(!K&&(K=p()))return c=K.start(),c.done(function(){c=null;B();b.complete()}),c;B();b.complete()});return b=new d({end:a,cancel:a})}}}function q(a,b,c,e){var f=u(a,Q),s=u(b,Q),z=[];r(e,function(a){(a=I(c,a.out,a["in"]))&&z.push(a)});if(f||s||0!==z.length)return{start:function(){function a(){r(b,
1750 1750 function(a){a.end()})}var b=[];f&&b.push(f.start());s&&b.push(s.start());r(z,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function u(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=Y(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!f.animations&&!f.transitions)return Q;var C=B[0].body;
1751 1751 c=D(e);var w=G(c.parentNode&&11===c.parentNode.nodeType||C.contains(c)?c:C);U(z);return function(a){return a.from&&a.to?q(a.from,a.to,a.classes,a.anchors):u(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=ba(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var r=c[f],q=a.$$registeredAnimations[r];q&&!e[r]&&(d.push(b.get(q)),e[r]=!0)}return d}var f=U(d);return function(a,b,d,v){function q(){v.domOperation();
1752 1752 f(a,v)}function D(a,b,d,e,g){switch(d){case "animate":b=[b,e.from,e.to,g];break;case "setClass":b=[b,x,G,g];break;case "addClass":b=[b,x,g];break;case "removeClass":b=[b,G,g];break;default:b=[b,g]}b.push(e);if(a=a.apply(a,b))if(Ka(a.start)&&(a=a.start()),a instanceof c)a.done(g);else if(Ka(a))return a;return Q}function u(a,b,d,e,g){var f=[];r(e,function(e){var k=e[g];k&&f.push(function(){var e,g,f=!1,h=function(a){f||(f=!0,(g||Q)(a),e.complete(!a))};e=new c({end:function(){h()},cancel:function(){h(!0)}});
1753 1753 g=D(k,a,b,d,function(a){h(!1===a)});return e})});return f}function C(a,b,d,e,g){var f=u(a,b,d,e,g);if(0===f.length){var h,k;"beforeSetClass"===g?(h=u(a,"removeClass",d,e,"beforeRemoveClass"),k=u(a,"addClass",d,e,"beforeAddClass")):"setClass"===g&&(h=u(a,"removeClass",d,e,"removeClass"),k=u(a,"addClass",d,e,"addClass"));h&&(f=f.concat(h));k&&(f=f.concat(k))}if(0!==f.length)return function(a){var b=[];f.length&&r(f,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){r(b,function(b){a?
1754 1754 b.cancel():b.end()})}}}var w=!1;3===arguments.length&&va(d)&&(v=d,d=null);v=pa(v);d||(d=a.attr("class")||"",v.addClass&&(d+=" "+v.addClass),v.removeClass&&(d+=" "+v.removeClass));var x=v.addClass,G=v.removeClass,J=e(d),k,p;if(J.length){var L,O;"leave"==b?(O="leave",L="afterLeave"):(O="before"+b.charAt(0).toUpperCase()+b.substr(1),L=b);"enter"!==b&&"move"!==b&&(k=C(a,b,v,J,O));p=C(a,b,v,J,L)}if(k||p){var l;return{$$willAnimate:!0,end:function(){l?l.end():(w=!0,q(),ga(a,v),l=new c,l.complete(!0));return l},
1755 1755 start:function(){function b(c){w=!0;q();ga(a,v);l.complete(c)}if(l)return l;l=new c;var d,e=[];k&&e.push(function(a){d=k(a)});e.length?e.push(function(a){q();a(!0)}):q();p&&e.push(function(a){d=p(a)});l.setHost({end:function(){w||((d||Q)(void 0),b(void 0))},cancel:function(){w||((d||Q)(!0),b(!0))}});c.chain(e,b);return l}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,
1756 1756 c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),q=d(a.to);if(b||q)return{start:function(){function a(){return function(){r(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());q&&d.push(q.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
1757 1757 //# sourceMappingURL=angular-animate.min.js.map
1758 1758
1759 1759 ;/*
1760 1760 * angular-ui-bootstrap
1761 1761 * http://angular-ui.github.io/bootstrap/
1762 1762
1763 1763 * Version: 1.3.2 - 2016-04-14
1764 1764 * License: MIT
1765 1765 */angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.datepicker","ui.bootstrap.position","ui.bootstrap.datepickerPopup","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["uib/template/accordion/accordion-group.html","uib/template/accordion/accordion.html","uib/template/alert/alert.html","uib/template/carousel/carousel.html","uib/template/carousel/slide.html","uib/template/datepicker/datepicker.html","uib/template/datepicker/day.html","uib/template/datepicker/month.html","uib/template/datepicker/year.html","uib/template/datepickerPopup/popup.html","uib/template/modal/backdrop.html","uib/template/modal/window.html","uib/template/pager/pager.html","uib/template/pagination/pagination.html","uib/template/tooltip/tooltip-html-popup.html","uib/template/tooltip/tooltip-popup.html","uib/template/tooltip/tooltip-template-popup.html","uib/template/popover/popover-html.html","uib/template/popover/popover-template.html","uib/template/popover/popover.html","uib/template/progressbar/bar.html","uib/template/progressbar/progress.html","uib/template/progressbar/progressbar.html","uib/template/rating/rating.html","uib/template/tabs/tab.html","uib/template/tabs/tabset.html","uib/template/timepicker/timepicker.html","uib/template/typeahead/typeahead-match.html","uib/template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("uibCollapse",["$animate","$q","$parse","$injector",function(a,b,c,d){var e=d.has("$animateCss")?d.get("$animateCss"):null;return{link:function(d,f,g){function h(){f.hasClass("collapse")&&f.hasClass("in")||b.resolve(l(d)).then(function(){f.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),e?e(f,{addClass:"in",easing:"ease",to:{height:f[0].scrollHeight+"px"}}).start()["finally"](i):a.addClass(f,"in",{to:{height:f[0].scrollHeight+"px"}}).then(i)})}function i(){f.removeClass("collapsing").addClass("collapse").css({height:"auto"}),m(d)}function j(){return f.hasClass("collapse")||f.hasClass("in")?void b.resolve(n(d)).then(function(){f.css({height:f[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),e?e(f,{removeClass:"in",to:{height:"0"}}).start()["finally"](k):a.removeClass(f,"in",{to:{height:"0"}}).then(k)}):k()}function k(){f.css({height:"0"}),f.removeClass("collapsing").addClass("collapse"),o(d)}var l=c(g.expanding),m=c(g.expanded),n=c(g.collapsing),o=c(g.collapsed);d.$eval(g.uibCollapse)||f.addClass("in").addClass("collapse").attr("aria-expanded",!0).attr("aria-hidden",!1).css({height:"auto"}),d.$watch(g.uibCollapse,function(a){a?j():h()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("uibAccordionConfig",{closeOthers:!0}).controller("UibAccordionController",["$scope","$attrs","uibAccordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(c){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("uibAccordion",function(){return{controller:"UibAccordionController",controllerAs:"accordion",transclude:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/accordion/accordion.html"}}}).directive("uibAccordionGroup",function(){return{require:"^uibAccordion",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/accordion/accordion-group.html"},scope:{heading:"@",panelClass:"@?",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.openClass=c.openClass||"panel-open",a.panelClass=c.panelClass||"panel-default",a.$watch("isOpen",function(c){b.toggleClass(a.openClass,!!c),c&&d.closeOthers(a)}),a.toggleOpen=function(b){a.isDisabled||b&&32!==b.which||(a.isOpen=!a.isOpen)};var e="accordiongroup-"+a.$id+"-"+Math.floor(1e4*Math.random());a.headingId=e+"-tab",a.panelId=e+"-panel"}}}).directive("uibAccordionHeading",function(){return{transclude:!0,template:"",replace:!0,require:"^uibAccordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("uibAccordionTransclude",function(){return{require:"^uibAccordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.uibAccordionTransclude]},function(a){if(a){var c=angular.element(b[0].querySelector("[uib-accordion-header]"));c.html(""),c.append(a)}})}}}),angular.module("ui.bootstrap.alert",[]).controller("UibAlertController",["$scope","$attrs","$interpolate","$timeout",function(a,b,c,d){a.closeable=!!b.close;var e=angular.isDefined(b.dismissOnTimeout)?c(b.dismissOnTimeout)(a.$parent):null;e&&d(function(){a.close()},parseInt(e,10))}]).directive("uibAlert",function(){return{controller:"UibAlertController",controllerAs:"alert",templateUrl:function(a,b){return b.templateUrl||"uib/template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}),angular.module("ui.bootstrap.buttons",[]).constant("uibButtonConfig",{activeClass:"active",toggleEvent:"click"}).controller("UibButtonsController",["uibButtonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("uibBtnRadio",["$parse",function(a){return{require:["uibBtnRadio","ngModel"],controller:"UibButtonsController",controllerAs:"buttons",link:function(b,c,d,e){var f=e[0],g=e[1],h=a(d.uibUncheckable);c.find("input").css({display:"none"}),g.$render=function(){c.toggleClass(f.activeClass,angular.equals(g.$modelValue,b.$eval(d.uibBtnRadio)))},c.on(f.toggleEvent,function(){if(!d.disabled){var a=c.hasClass(f.activeClass);a&&!angular.isDefined(d.uncheckable)||b.$apply(function(){g.$setViewValue(a?null:b.$eval(d.uibBtnRadio)),g.$render()})}}),d.uibUncheckable&&b.$watch(h,function(a){d.$set("uncheckable",a?"":void 0)})}}}]).directive("uibBtnCheckbox",function(){return{require:["uibBtnCheckbox","ngModel"],controller:"UibButtonsController",controllerAs:"button",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){return angular.isDefined(b)?a.$eval(b):c}var h=d[0],i=d[1];b.find("input").css({display:"none"}),i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.on(h.toggleEvent,function(){c.disabled||a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("UibCarouselController",["$scope","$element","$interval","$timeout","$animate",function(a,b,c,d,e){function f(){for(;t.length;)t.shift()}function g(a){for(var b=0;b<q.length;b++)q[b].slide.active=b===a}function h(c,d,i){if(!u){if(angular.extend(c,{direction:i}),angular.extend(q[s].slide||{},{direction:i}),e.enabled(b)&&!a.$currentTransition&&q[d].element&&p.slides.length>1){q[d].element.data(r,c.direction);var j=p.getCurrentIndex();angular.isNumber(j)&&q[j].element&&q[j].element.data(r,c.direction),a.$currentTransition=!0,e.on("addClass",q[d].element,function(b,c){if("close"===c&&(a.$currentTransition=null,e.off("addClass",b),t.length)){var d=t.pop().slide,g=d.index,i=g>p.getCurrentIndex()?"next":"prev";f(),h(d,g,i)}})}a.active=c.index,s=c.index,g(d),l()}}function i(a){for(var b=0;b<q.length;b++)if(q[b].slide===a)return b}function j(){n&&(c.cancel(n),n=null)}function k(b){b.length||(a.$currentTransition=null,f())}function l(){j();var b=+a.interval;!isNaN(b)&&b>0&&(n=c(m,b))}function m(){var b=+a.interval;o&&!isNaN(b)&&b>0&&q.length?a.next():a.pause()}var n,o,p=this,q=p.slides=a.slides=[],r="uib-slideDirection",s=a.active,t=[],u=!1;p.addSlide=function(b,c){q.push({slide:b,element:c}),q.sort(function(a,b){return+a.slide.index-+b.slide.index}),(b.index===a.active||1===q.length&&!angular.isNumber(a.active))&&(a.$currentTransition&&(a.$currentTransition=null),s=b.index,a.active=b.index,g(s),p.select(q[i(b)]),1===q.length&&a.play())},p.getCurrentIndex=function(){for(var a=0;a<q.length;a++)if(q[a].slide.index===s)return a},p.next=a.next=function(){var b=(p.getCurrentIndex()+1)%q.length;return 0===b&&a.noWrap()?void a.pause():p.select(q[b],"next")},p.prev=a.prev=function(){var b=p.getCurrentIndex()-1<0?q.length-1:p.getCurrentIndex()-1;return a.noWrap()&&b===q.length-1?void a.pause():p.select(q[b],"prev")},p.removeSlide=function(b){var c=i(b),d=t.indexOf(q[c]);-1!==d&&t.splice(d,1),q.splice(c,1),q.length>0&&s===c?c>=q.length?(s=q.length-1,a.active=s,g(s),p.select(q[q.length-1])):(s=c,a.active=s,g(s),p.select(q[c])):s>c&&(s--,a.active=s),0===q.length&&(s=null,a.active=null,f())},p.select=a.select=function(b,c){var d=i(b.slide);void 0===c&&(c=d>p.getCurrentIndex()?"next":"prev"),b.slide.index===s||a.$currentTransition?b&&b.slide.index!==s&&a.$currentTransition&&t.push(q[d]):h(b.slide,d,c)},a.indexOfSlide=function(a){return+a.slide.index},a.isActive=function(b){return a.active===b.slide.index},a.isPrevDisabled=function(){return 0===a.active&&a.noWrap()},a.isNextDisabled=function(){return a.active===q.length-1&&a.noWrap()},a.pause=function(){a.noPause||(o=!1,j())},a.play=function(){o||(o=!0,l())},a.$on("$destroy",function(){u=!0,j()}),a.$watch("noTransition",function(a){e.enabled(b,!a)}),a.$watch("interval",l),a.$watchCollection("slides",k),a.$watch("active",function(a){if(angular.isNumber(a)&&s!==a){for(var b=0;b<q.length;b++)if(q[b].slide.index===a){a=b;break}var c=q[a];c&&(g(a),p.select(q[a]),s=a)}})}]).directive("uibCarousel",function(){return{transclude:!0,replace:!0,controller:"UibCarouselController",controllerAs:"carousel",templateUrl:function(a,b){return b.templateUrl||"uib/template/carousel/carousel.html"},scope:{active:"=",interval:"=",noTransition:"=",noPause:"=",noWrap:"&"}}}).directive("uibSlide",function(){return{require:"^uibCarousel",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/carousel/slide.html"},scope:{actual:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)})}}}).animation(".item",["$animateCss",function(a){function b(a,b,c){a.removeClass(b),c&&c()}var c="uib-slideDirection";return{beforeAddClass:function(d,e,f){if("active"===e){var g=!1,h=d.data(c),i="next"===h?"left":"right",j=b.bind(this,d,i+" "+h,f);return d.addClass(h),a(d,{addClass:i}).start().done(j),function(){g=!0}}f()},beforeRemoveClass:function(d,e,f){if("active"===e){var g=!1,h=d.data(c),i="next"===h?"left":"right",j=b.bind(this,d,i,f);return a(d,{addClass:i}).start().done(j),function(){g=!0}}f()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("uibDateParser",["$log","$locale","dateFilter","orderByFilter",function(a,b,c,d){function e(a,b){var c=[],e=a.split(""),f=a.indexOf("'");if(f>-1){var g=!1;a=a.split("");for(var h=f;h<a.length;h++)g?("'"===a[h]&&(h+1<a.length&&"'"===a[h+1]?(a[h+1]="$",e[h+1]=""):(e[h]="",g=!1)),a[h]="$"):"'"===a[h]&&(a[h]="$",e[h]="",g=!0);a=a.join("")}return angular.forEach(n,function(d){var f=a.indexOf(d.key);if(f>-1){a=a.split(""),e[f]="("+d.regex+")",a[f]="$";for(var g=f+1,h=f+d.key.length;h>g;g++)e[g]="",a[g]="$";a=a.join(""),c.push({index:f,key:d.key,apply:d[b],matcher:d.regex})}}),{regex:new RegExp("^"+e.join("")+"$"),map:d(c,"index")}}function f(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}function g(a){return parseInt(a,10)}function h(a,b){return a&&b?l(a,b):a}function i(a,b){return a&&b?l(a,b,!0):a}function j(a,b){var c=Date.parse("Jan 01, 1970 00:00:00 "+a)/6e4;return isNaN(c)?b:c}function k(a,b){return a=new Date(a.getTime()),a.setMinutes(a.getMinutes()+b),a}function l(a,b,c){c=c?-1:1;var d=j(b,a.getTimezoneOffset());return k(a,c*(d-a.getTimezoneOffset()))}var m,n,o=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.init=function(){m=b.id,this.parsers={},this.formatters={},n=[{key:"yyyy",regex:"\\d{4}",apply:function(a){this.year=+a},formatter:function(a){var b=new Date;return b.setFullYear(Math.abs(a.getFullYear())),c(b,"yyyy")}},{key:"yy",regex:"\\d{2}",apply:function(a){a=+a,this.year=69>a?a+2e3:a+1900},formatter:function(a){var b=new Date;return b.setFullYear(Math.abs(a.getFullYear())),c(b,"yy")}},{key:"y",regex:"\\d{1,4}",apply:function(a){this.year=+a},formatter:function(a){var b=new Date;return b.setFullYear(Math.abs(a.getFullYear())),c(b,"y")}},{key:"M!",regex:"0?[1-9]|1[0-2]",apply:function(a){this.month=a-1},formatter:function(a){var b=a.getMonth();return/^[0-9]$/.test(b)?c(a,"MM"):c(a,"M")}},{key:"MMMM",regex:b.DATETIME_FORMATS.MONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.MONTH.indexOf(a)},formatter:function(a){return c(a,"MMMM")}},{key:"MMM",regex:b.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.SHORTMONTH.indexOf(a)},formatter:function(a){return c(a,"MMM")}},{key:"MM",regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1},formatter:function(a){return c(a,"MM")}},{key:"M",regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1},formatter:function(a){return c(a,"M")}},{key:"d!",regex:"[0-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a},formatter:function(a){var b=a.getDate();return/^[1-9]$/.test(b)?c(a,"dd"):c(a,"d")}},{key:"dd",regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a},formatter:function(a){return c(a,"dd")}},{key:"d",regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a},formatter:function(a){return c(a,"d")}},{key:"EEEE",regex:b.DATETIME_FORMATS.DAY.join("|"),formatter:function(a){return c(a,"EEEE")}},{key:"EEE",regex:b.DATETIME_FORMATS.SHORTDAY.join("|"),formatter:function(a){return c(a,"EEE")}},{key:"HH",regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a},formatter:function(a){return c(a,"HH")}},{key:"hh",regex:"0[0-9]|1[0-2]",apply:function(a){this.hours=+a},formatter:function(a){return c(a,"hh")}},{key:"H",regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a},formatter:function(a){return c(a,"H")}},{key:"h",regex:"[0-9]|1[0-2]",apply:function(a){this.hours=+a},formatter:function(a){return c(a,"h")}},{key:"mm",regex:"[0-5][0-9]",apply:function(a){this.minutes=+a},formatter:function(a){return c(a,"mm")}},{key:"m",regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a},formatter:function(a){return c(a,"m")}},{key:"sss",regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a},formatter:function(a){return c(a,"sss")}},{key:"ss",regex:"[0-5][0-9]",apply:function(a){this.seconds=+a},formatter:function(a){return c(a,"ss")}},{key:"s",regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a},formatter:function(a){return c(a,"s")}},{key:"a",regex:b.DATETIME_FORMATS.AMPMS.join("|"),apply:function(a){12===this.hours&&(this.hours=0),"PM"===a&&(this.hours+=12)},formatter:function(a){return c(a,"a")}},{key:"Z",regex:"[+-]\\d{4}",apply:function(a){var b=a.match(/([+-])(\d{2})(\d{2})/),c=b[1],d=b[2],e=b[3];this.hours+=g(c+d),this.minutes+=g(c+e)},formatter:function(a){return c(a,"Z")}},{key:"ww",regex:"[0-4][0-9]|5[0-3]",formatter:function(a){return c(a,"ww")}},{key:"w",regex:"[0-9]|[1-4][0-9]|5[0-3]",formatter:function(a){return c(a,"w")}},{key:"GGGG",regex:b.DATETIME_FORMATS.ERANAMES.join("|").replace(/\s/g,"\\s"),formatter:function(a){return c(a,"GGGG")}},{key:"GGG",regex:b.DATETIME_FORMATS.ERAS.join("|"),formatter:function(a){return c(a,"GGG")}},{key:"GG",regex:b.DATETIME_FORMATS.ERAS.join("|"),formatter:function(a){return c(a,"GG")}},{key:"G",regex:b.DATETIME_FORMATS.ERAS.join("|"),formatter:function(a){return c(a,"G")}}]},this.init(),this.filter=function(a,c){if(!angular.isDate(a)||isNaN(a)||!c)return"";c=b.DATETIME_FORMATS[c]||c,b.id!==m&&this.init(),this.formatters[c]||(this.formatters[c]=e(c,"formatter"));var d=this.formatters[c],f=d.map,g=c;return f.reduce(function(b,c,d){var e=g.match(new RegExp("(.*)"+c.key));e&&angular.isString(e[1])&&(b+=e[1],g=g.replace(e[1]+c.key,""));var h=d===f.length-1?g:"";return c.apply?b+c.apply.call(null,a)+h:b+h},"")},this.parse=function(c,d,g){if(!angular.isString(c)||!d)return c;d=b.DATETIME_FORMATS[d]||d,d=d.replace(o,"\\$&"),b.id!==m&&this.init(),this.parsers[d]||(this.parsers[d]=e(d,"apply"));var h=this.parsers[d],i=h.regex,j=h.map,k=c.match(i),l=!1;if(k&&k.length){var n,p;angular.isDate(g)&&!isNaN(g.getTime())?n={year:g.getFullYear(),month:g.getMonth(),date:g.getDate(),hours:g.getHours(),minutes:g.getMinutes(),seconds:g.getSeconds(),milliseconds:g.getMilliseconds()}:(g&&a.warn("dateparser:","baseDate is not a valid date"),n={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var q=1,r=k.length;r>q;q++){var s=j[q-1];"Z"===s.matcher&&(l=!0),s.apply&&s.apply.call(n,k[q])}var t=l?Date.prototype.setUTCFullYear:Date.prototype.setFullYear,u=l?Date.prototype.setUTCHours:Date.prototype.setHours;return f(n.year,n.month,n.date)&&(!angular.isDate(g)||isNaN(g.getTime())||l?(p=new Date(0),t.call(p,n.year,n.month,n.date),u.call(p,n.hours||0,n.minutes||0,n.seconds||0,n.milliseconds||0)):(p=new Date(g),t.call(p,n.year,n.month,n.date),u.call(p,n.hours,n.minutes,n.seconds,n.milliseconds))),p}},this.toTimezone=h,this.fromTimezone=i,this.timezoneToOffset=j,this.addDateMinutes=k,this.convertTimezoneToLocal=l}]),angular.module("ui.bootstrap.isClass",[]).directive("uibIsClass",["$animate",function(a){var b=/^\s*([\s\S]+?)\s+on\s+([\s\S]+?)\s*$/,c=/^\s*([\s\S]+?)\s+for\s+([\s\S]+?)\s*$/;return{restrict:"A",compile:function(d,e){function f(a,b,c){i.push(a),j.push({scope:a,element:b}),o.forEach(function(b,c){g(b,a)}),a.$on("$destroy",h)}function g(b,d){var e=b.match(c),f=d.$eval(e[1]),g=e[2],h=k[b];if(!h){var i=function(b){var c=null;j.some(function(a){var d=a.scope.$eval(m);return d===b?(c=a,!0):void 0}),h.lastActivated!==c&&(h.lastActivated&&a.removeClass(h.lastActivated.element,f),c&&a.addClass(c.element,f),h.lastActivated=c)};k[b]=h={lastActivated:null,scope:d,watchFn:i,compareWithExp:g,watcher:d.$watch(g,i)}}h.watchFn(d.$eval(g))}function h(a){var b=a.targetScope,c=i.indexOf(b);if(i.splice(c,1),j.splice(c,1),i.length){var d=i[0];angular.forEach(k,function(a){a.scope===b&&(a.watcher=d.$watch(a.compareWithExp,a.watchFn),a.scope=d)})}else k={}}var i=[],j=[],k={},l=e.uibIsClass.match(b),m=l[2],n=l[1],o=n.split(",");return f}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.isClass"]).value("$datepickerSuppressError",!1).value("$datepickerLiteralWarning",!0).constant("uibDatepickerConfig",{datepickerMode:"day",formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",maxDate:null,maxMode:"year",minDate:null,minMode:"day",ngModelOptions:{},shortcutPropagation:!1,showWeeks:!0,yearColumns:5,yearRows:4}).controller("UibDatepickerController",["$scope","$attrs","$parse","$interpolate","$locale","$log","dateFilter","uibDatepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","uibDateParser",function(a,b,c,d,e,f,g,h,i,j,k){function l(b){a.datepickerMode=b,a.datepickerOptions.datepickerMode=b}var m=this,n={$setViewValue:angular.noop},o={},p=[];!!b.datepickerOptions;a.datepickerOptions||(a.datepickerOptions={}),this.modes=["day","month","year"],["customClass","dateDisabled","datepickerMode","formatDay","formatDayHeader","formatDayTitle","formatMonth","formatMonthTitle","formatYear","maxDate","maxMode","minDate","minMode","showWeeks","shortcutPropagation","startingDay","yearColumns","yearRows"].forEach(function(b){switch(b){case"customClass":case"dateDisabled":a[b]=a.datepickerOptions[b]||angular.noop;break;case"datepickerMode":a.datepickerMode=angular.isDefined(a.datepickerOptions.datepickerMode)?a.datepickerOptions.datepickerMode:h.datepickerMode;break;case"formatDay":case"formatDayHeader":case"formatDayTitle":case"formatMonth":case"formatMonthTitle":case"formatYear":m[b]=angular.isDefined(a.datepickerOptions[b])?d(a.datepickerOptions[b])(a.$parent):h[b];break;case"showWeeks":case"shortcutPropagation":case"yearColumns":case"yearRows":m[b]=angular.isDefined(a.datepickerOptions[b])?a.datepickerOptions[b]:h[b];break;case"startingDay":angular.isDefined(a.datepickerOptions.startingDay)?m.startingDay=a.datepickerOptions.startingDay:angular.isNumber(h.startingDay)?m.startingDay=h.startingDay:m.startingDay=(e.DATETIME_FORMATS.FIRSTDAYOFWEEK+8)%7;break;case"maxDate":case"minDate":a.$watch("datepickerOptions."+b,function(a){a?angular.isDate(a)?m[b]=k.fromTimezone(new Date(a),o.timezone):(i&&f.warn("Literal date support has been deprecated, please switch to date object usage"),m[b]=new Date(g(a,"medium"))):m[b]=h[b]?k.fromTimezone(new Date(h[b]),o.timezone):null,m.refreshView()});break;case"maxMode":case"minMode":a.datepickerOptions[b]?a.$watch(function(){return a.datepickerOptions[b]},function(c){m[b]=a[b]=angular.isDefined(c)?c:datepickerOptions[b],("minMode"===b&&m.modes.indexOf(a.datepickerOptions.datepickerMode)<m.modes.indexOf(m[b])||"maxMode"===b&&m.modes.indexOf(a.datepickerOptions.datepickerMode)>m.modes.indexOf(m[b]))&&(a.datepickerMode=m[b],a.datepickerOptions.datepickerMode=m[b])}):m[b]=a[b]=h[b]||null}}),a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),a.disabled=angular.isDefined(b.disabled)||!1,angular.isDefined(b.ngDisabled)&&p.push(a.$parent.$watch(b.ngDisabled,function(b){a.disabled=b,m.refreshView()})),a.isActive=function(b){return 0===m.compare(b.date,m.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(b){n=b,o=b.$options||h.ngModelOptions,a.datepickerOptions.initDate?(m.activeDate=k.fromTimezone(a.datepickerOptions.initDate,o.timezone)||new Date,a.$watch("datepickerOptions.initDate",function(a){a&&(n.$isEmpty(n.$modelValue)||n.$invalid)&&(m.activeDate=k.fromTimezone(a,o.timezone),m.refreshView())})):m.activeDate=new Date,this.activeDate=n.$modelValue?k.fromTimezone(new Date(n.$modelValue),o.timezone):k.fromTimezone(new Date,o.timezone),n.$render=function(){m.render()}},this.render=function(){if(n.$viewValue){var a=new Date(n.$viewValue),b=!isNaN(a);b?this.activeDate=k.fromTimezone(a,o.timezone):j||f.error('Datepicker directive: "ng-model" value must be a Date object')}this.refreshView()},this.refreshView=function(){if(this.element){a.selectedDt=null,this._refreshView(),a.activeDt&&(a.activeDateId=a.activeDt.uid);var b=n.$viewValue?new Date(n.$viewValue):null;b=k.fromTimezone(b,o.timezone),n.$setValidity("dateDisabled",!b||this.element&&!this.isDisabled(b))}},this.createDateObject=function(b,c){var d=n.$viewValue?new Date(n.$viewValue):null;d=k.fromTimezone(d,o.timezone);var e=new Date;e=k.fromTimezone(e,o.timezone);var f=this.compare(b,e),g={date:b,label:k.filter(b,c),selected:d&&0===this.compare(b,d),disabled:this.isDisabled(b),past:0>f,current:0===f,future:f>0,customClass:this.customClass(b)||null};return d&&0===this.compare(b,d)&&(a.selectedDt=g),m.activeDate&&0===this.compare(g.date,m.activeDate)&&(a.activeDt=g),g},this.isDisabled=function(b){return a.disabled||this.minDate&&this.compare(b,this.minDate)<0||this.maxDate&&this.compare(b,this.maxDate)>0||a.dateDisabled&&a.dateDisabled({date:b,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===m.minMode){var c=n.$viewValue?k.fromTimezone(new Date(n.$viewValue),o.timezone):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),c=k.toTimezone(c,o.timezone),n.$setViewValue(c),n.$render()}else m.activeDate=b,l(m.modes[m.modes.indexOf(a.datepickerMode)-1]),a.$emit("uib:datepicker.mode");a.$broadcast("uib:datepicker.focus")},a.move=function(a){var b=m.activeDate.getFullYear()+a*(m.step.years||0),c=m.activeDate.getMonth()+a*(m.step.months||0);m.activeDate.setFullYear(b,c,1),m.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===m.maxMode&&1===b||a.datepickerMode===m.minMode&&-1===b||(l(m.modes[m.modes.indexOf(a.datepickerMode)+b]),a.$emit("uib:datepicker.mode"))},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var q=function(){m.element[0].focus()};a.$on("uib:datepicker.focus",q),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey&&!a.disabled)if(b.preventDefault(),m.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(m.isDisabled(m.activeDate))return;a.select(m.activeDate)}else!b.ctrlKey||"up"!==c&&"down"!==c?(m.handleKeyDown(c,b),m.refreshView()):a.toggleMode("up"===c?1:-1)},a.$on("$destroy",function(){for(;p.length;)p.shift()()})}]).controller("UibDaypickerController",["$scope","$element","dateFilter",function(a,b,c){function d(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?f[b]:29}function e(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}var f=[31,28,31,30,31,30,31,31,30,31,30,31];this.step={months:1},this.element=b,this.init=function(b){angular.extend(b,this),a.showWeeks=b.showWeeks,b.refreshView()},this.getDates=function(a,b){for(var c,d=new Array(b),e=new Date(a),f=0;b>f;)c=new Date(e),d[f++]=c,e.setDate(e.getDate()+1);return d},this._refreshView=function(){var b=this.activeDate.getFullYear(),d=this.activeDate.getMonth(),f=new Date(this.activeDate);f.setFullYear(b,d,1);var g=this.startingDay-f.getDay(),h=g>0?7-g:-g,i=new Date(f);h>0&&i.setDate(-h+1);for(var j=this.getDates(i,42),k=0;42>k;k++)j[k]=angular.extend(this.createDateObject(j[k],this.formatDay),{secondary:j[k].getMonth()!==d,uid:a.uniqueId+"-"+k});a.labels=new Array(7);for(var l=0;7>l;l++)a.labels[l]={abbr:c(j[l].date,this.formatDayHeader),full:c(j[l].date,"EEEE")};if(a.title=c(this.activeDate,this.formatDayTitle),a.rows=this.split(j,7),a.showWeeks){a.weekNumbers=[];for(var m=(11-this.startingDay)%7,n=a.rows.length,o=0;n>o;o++)a.weekNumbers.push(e(a.rows[o][m].date))}},this.compare=function(a,b){var c=new Date(a.getFullYear(),a.getMonth(),a.getDate()),d=new Date(b.getFullYear(),b.getMonth(),b.getDate());return c.setFullYear(a.getFullYear()),d.setFullYear(b.getFullYear()),c-d},this.handleKeyDown=function(a,b){var c=this.activeDate.getDate();if("left"===a)c-=1;else if("up"===a)c-=7;else if("right"===a)c+=1;else if("down"===a)c+=7;else if("pageup"===a||"pagedown"===a){var e=this.activeDate.getMonth()+("pageup"===a?-1:1);this.activeDate.setMonth(e,1),c=Math.min(d(this.activeDate.getFullYear(),this.activeDate.getMonth()),c)}else"home"===a?c=1:"end"===a&&(c=d(this.activeDate.getFullYear(),this.activeDate.getMonth()));this.activeDate.setDate(c)}}]).controller("UibMonthpickerController",["$scope","$element","dateFilter",function(a,b,c){this.step={years:1},this.element=b,this.init=function(a){angular.extend(a,this),a.refreshView()},this._refreshView=function(){for(var b,d=new Array(12),e=this.activeDate.getFullYear(),f=0;12>f;f++)b=new Date(this.activeDate),b.setFullYear(e,f,1),d[f]=angular.extend(this.createDateObject(b,this.formatMonth),{uid:a.uniqueId+"-"+f});a.title=c(this.activeDate,this.formatMonthTitle),a.rows=this.split(d,3)},this.compare=function(a,b){var c=new Date(a.getFullYear(),a.getMonth()),d=new Date(b.getFullYear(),b.getMonth());return c.setFullYear(a.getFullYear()),d.setFullYear(b.getFullYear()),c-d},this.handleKeyDown=function(a,b){var c=this.activeDate.getMonth();if("left"===a)c-=1;else if("up"===a)c-=3;else if("right"===a)c+=1;else if("down"===a)c+=3;else if("pageup"===a||"pagedown"===a){var d=this.activeDate.getFullYear()+("pageup"===a?-1:1);this.activeDate.setFullYear(d)}else"home"===a?c=0:"end"===a&&(c=11);this.activeDate.setMonth(c)}}]).controller("UibYearpickerController",["$scope","$element","dateFilter",function(a,b,c){function d(a){return parseInt((a-1)/f,10)*f+1}var e,f;this.element=b,this.yearpickerInit=function(){e=this.yearColumns,f=this.yearRows*e,this.step={years:f}},this._refreshView=function(){for(var b,c=new Array(f),g=0,h=d(this.activeDate.getFullYear());f>g;g++)b=new Date(this.activeDate),b.setFullYear(h+g,0,1),c[g]=angular.extend(this.createDateObject(b,this.formatYear),{uid:a.uniqueId+"-"+g});a.title=[c[0].label,c[f-1].label].join(" - "),a.rows=this.split(c,e),a.columns=e},this.compare=function(a,b){return a.getFullYear()-b.getFullYear()},this.handleKeyDown=function(a,b){var c=this.activeDate.getFullYear();"left"===a?c-=1:"up"===a?c-=e:"right"===a?c+=1:"down"===a?c+=e:"pageup"===a||"pagedown"===a?c+=("pageup"===a?-1:1)*f:"home"===a?c=d(this.activeDate.getFullYear()):"end"===a&&(c=d(this.activeDate.getFullYear())+f-1),this.activeDate.setFullYear(c)}}]).directive("uibDatepicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/datepicker/datepicker.html"},scope:{datepickerOptions:"=?"},require:["uibDatepicker","^ngModel"],controller:"UibDatepickerController",controllerAs:"datepicker",link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}).directive("uibDaypicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/datepicker/day.html"},require:["^uibDatepicker","uibDaypicker"],controller:"UibDaypickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f.init(e)}}}).directive("uibMonthpicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/datepicker/month.html"},require:["^uibDatepicker","uibMonthpicker"],controller:"UibMonthpickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f.init(e)}}}).directive("uibYearpicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/datepicker/year.html"},require:["^uibDatepicker","uibYearpicker"],controller:"UibYearpickerController",link:function(a,b,c,d){var e=d[0];angular.extend(e,d[1]),e.yearpickerInit(),e.refreshView()}}}),angular.module("ui.bootstrap.position",[]).factory("$uibPosition",["$document","$window",function(a,b){var c,d,e={normal:/(auto|scroll)/,hidden:/(auto|scroll|hidden)/},f={auto:/\s?auto?\s?/i,primary:/^(top|bottom|left|right)$/,secondary:/^(top|bottom|left|right|center)$/,vertical:/^(top|bottom)$/},g=/(HTML|BODY)/;return{getRawNode:function(a){return a.nodeName?a:a[0]||a},parseStyle:function(a){return a=parseFloat(a),isFinite(a)?a:0},offsetParent:function(c){function d(a){return"static"===(b.getComputedStyle(a).position||"static")}c=this.getRawNode(c);for(var e=c.offsetParent||a[0].documentElement;e&&e!==a[0].documentElement&&d(e);)e=e.offsetParent;return e||a[0].documentElement},scrollbarWidth:function(e){if(e){if(angular.isUndefined(d)){var f=a.find("body");f.addClass("uib-position-body-scrollbar-measure"),d=b.innerWidth-f[0].clientWidth,d=isFinite(d)?d:0,f.removeClass("uib-position-body-scrollbar-measure")}return d}if(angular.isUndefined(c)){var g=angular.element('<div class="uib-position-scrollbar-measure"></div>');a.find("body").append(g),c=g[0].offsetWidth-g[0].clientWidth,c=isFinite(c)?c:0,g.remove()}return c},scrollbarPadding:function(a){a=this.getRawNode(a);var c=b.getComputedStyle(a),d=this.parseStyle(c.paddingRight),e=this.parseStyle(c.paddingBottom),f=this.scrollParent(a,!1,!0),h=this.scrollbarWidth(f,g.test(f.tagName));return{scrollbarWidth:h,widthOverflow:f.scrollWidth>f.clientWidth,right:d+h,originalRight:d,heightOverflow:f.scrollHeight>f.clientHeight,bottom:e+h,originalBottom:e}},isScrollable:function(a,c){a=this.getRawNode(a);var d=c?e.hidden:e.normal,f=b.getComputedStyle(a);return d.test(f.overflow+f.overflowY+f.overflowX);
1766 1766 },scrollParent:function(c,d,f){c=this.getRawNode(c);var g=d?e.hidden:e.normal,h=a[0].documentElement,i=b.getComputedStyle(c);if(f&&g.test(i.overflow+i.overflowY+i.overflowX))return c;var j="absolute"===i.position,k=c.parentElement||h;if(k===h||"fixed"===i.position)return h;for(;k.parentElement&&k!==h;){var l=b.getComputedStyle(k);if(j&&"static"!==l.position&&(j=!1),!j&&g.test(l.overflow+l.overflowY+l.overflowX))break;k=k.parentElement}return k},position:function(c,d){c=this.getRawNode(c);var e=this.offset(c);if(d){var f=b.getComputedStyle(c);e.top-=this.parseStyle(f.marginTop),e.left-=this.parseStyle(f.marginLeft)}var g=this.offsetParent(c),h={top:0,left:0};return g!==a[0].documentElement&&(h=this.offset(g),h.top+=g.clientTop-g.scrollTop,h.left+=g.clientLeft-g.scrollLeft),{width:Math.round(angular.isNumber(e.width)?e.width:c.offsetWidth),height:Math.round(angular.isNumber(e.height)?e.height:c.offsetHeight),top:Math.round(e.top-h.top),left:Math.round(e.left-h.left)}},offset:function(c){c=this.getRawNode(c);var d=c.getBoundingClientRect();return{width:Math.round(angular.isNumber(d.width)?d.width:c.offsetWidth),height:Math.round(angular.isNumber(d.height)?d.height:c.offsetHeight),top:Math.round(d.top+(b.pageYOffset||a[0].documentElement.scrollTop)),left:Math.round(d.left+(b.pageXOffset||a[0].documentElement.scrollLeft))}},viewportOffset:function(c,d,e){c=this.getRawNode(c),e=e!==!1;var f=c.getBoundingClientRect(),g={top:0,left:0,bottom:0,right:0},h=d?a[0].documentElement:this.scrollParent(c),i=h.getBoundingClientRect();if(g.top=i.top+h.clientTop,g.left=i.left+h.clientLeft,h===a[0].documentElement&&(g.top+=b.pageYOffset,g.left+=b.pageXOffset),g.bottom=g.top+h.clientHeight,g.right=g.left+h.clientWidth,e){var j=b.getComputedStyle(h);g.top+=this.parseStyle(j.paddingTop),g.bottom-=this.parseStyle(j.paddingBottom),g.left+=this.parseStyle(j.paddingLeft),g.right-=this.parseStyle(j.paddingRight)}return{top:Math.round(f.top-g.top),bottom:Math.round(g.bottom-f.bottom),left:Math.round(f.left-g.left),right:Math.round(g.right-f.right)}},parsePlacement:function(a){var b=f.auto.test(a);return b&&(a=a.replace(f.auto,"")),a=a.split("-"),a[0]=a[0]||"top",f.primary.test(a[0])||(a[0]="top"),a[1]=a[1]||"center",f.secondary.test(a[1])||(a[1]="center"),b?a[2]=!0:a[2]=!1,a},positionElements:function(a,c,d,e){a=this.getRawNode(a),c=this.getRawNode(c);var g=angular.isDefined(c.offsetWidth)?c.offsetWidth:c.prop("offsetWidth"),h=angular.isDefined(c.offsetHeight)?c.offsetHeight:c.prop("offsetHeight");d=this.parsePlacement(d);var i=e?this.offset(a):this.position(a),j={top:0,left:0,placement:""};if(d[2]){var k=this.viewportOffset(a,e),l=b.getComputedStyle(c),m={width:g+Math.round(Math.abs(this.parseStyle(l.marginLeft)+this.parseStyle(l.marginRight))),height:h+Math.round(Math.abs(this.parseStyle(l.marginTop)+this.parseStyle(l.marginBottom)))};if(d[0]="top"===d[0]&&m.height>k.top&&m.height<=k.bottom?"bottom":"bottom"===d[0]&&m.height>k.bottom&&m.height<=k.top?"top":"left"===d[0]&&m.width>k.left&&m.width<=k.right?"right":"right"===d[0]&&m.width>k.right&&m.width<=k.left?"left":d[0],d[1]="top"===d[1]&&m.height-i.height>k.bottom&&m.height-i.height<=k.top?"bottom":"bottom"===d[1]&&m.height-i.height>k.top&&m.height-i.height<=k.bottom?"top":"left"===d[1]&&m.width-i.width>k.right&&m.width-i.width<=k.left?"right":"right"===d[1]&&m.width-i.width>k.left&&m.width-i.width<=k.right?"left":d[1],"center"===d[1])if(f.vertical.test(d[0])){var n=i.width/2-g/2;k.left+n<0&&m.width-i.width<=k.right?d[1]="left":k.right+n<0&&m.width-i.width<=k.left&&(d[1]="right")}else{var o=i.height/2-m.height/2;k.top+o<0&&m.height-i.height<=k.bottom?d[1]="top":k.bottom+o<0&&m.height-i.height<=k.top&&(d[1]="bottom")}}switch(d[0]){case"top":j.top=i.top-h;break;case"bottom":j.top=i.top+i.height;break;case"left":j.left=i.left-g;break;case"right":j.left=i.left+i.width}switch(d[1]){case"top":j.top=i.top;break;case"bottom":j.top=i.top+i.height-h;break;case"left":j.left=i.left;break;case"right":j.left=i.left+i.width-g;break;case"center":f.vertical.test(d[0])?j.left=i.left+i.width/2-g/2:j.top=i.top+i.height/2-h/2}return j.top=Math.round(j.top),j.left=Math.round(j.left),j.placement="center"===d[1]?d[0]:d[0]+"-"+d[1],j},positionArrow:function(a,c){a=this.getRawNode(a);var d=a.querySelector(".tooltip-inner, .popover-inner");if(d){var e=angular.element(d).hasClass("tooltip-inner"),g=e?a.querySelector(".tooltip-arrow"):a.querySelector(".arrow");if(g){var h={top:"",bottom:"",left:"",right:""};if(c=this.parsePlacement(c),"center"===c[1])return void angular.element(g).css(h);var i="border-"+c[0]+"-width",j=b.getComputedStyle(g)[i],k="border-";k+=f.vertical.test(c[0])?c[0]+"-"+c[1]:c[1]+"-"+c[0],k+="-radius";var l=b.getComputedStyle(e?d:a)[k];switch(c[0]){case"top":h.bottom=e?"0":"-"+j;break;case"bottom":h.top=e?"0":"-"+j;break;case"left":h.right=e?"0":"-"+j;break;case"right":h.left=e?"0":"-"+j}h[c[1]]=l,angular.element(g).css(h)}}}}}]),angular.module("ui.bootstrap.datepickerPopup",["ui.bootstrap.datepicker","ui.bootstrap.position"]).value("$datepickerPopupLiteralWarning",!0).constant("uibDatepickerPopupConfig",{altInputFormats:[],appendToBody:!1,clearText:"Clear",closeOnDateSelection:!0,closeText:"Done",currentText:"Today",datepickerPopup:"yyyy-MM-dd",datepickerPopupTemplateUrl:"uib/template/datepickerPopup/popup.html",datepickerTemplateUrl:"uib/template/datepicker/datepicker.html",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},onOpenFocus:!0,showButtonBar:!0,placement:"auto bottom-left"}).controller("UibDatepickerPopupController",["$scope","$element","$attrs","$compile","$log","$parse","$window","$document","$rootScope","$uibPosition","dateFilter","uibDateParser","uibDatepickerPopupConfig","$timeout","uibDatepickerConfig","$datepickerPopupLiteralWarning",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){function q(b){var c=l.parse(b,w,a.date);if(isNaN(c))for(var d=0;d<I.length;d++)if(c=l.parse(b,I[d],a.date),!isNaN(c))return c;return c}function r(a){if(angular.isNumber(a)&&(a=new Date(a)),!a)return null;if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=q(a);if(!isNaN(b))return l.toTimezone(b,J)}return F.$options&&F.$options.allowInvalid?a:void 0}function s(a,b){var d=a||b;return c.ngRequired||d?(angular.isNumber(d)&&(d=new Date(d)),d?angular.isDate(d)&&!isNaN(d)?!0:angular.isString(d)?!isNaN(q(b)):!1:!0):!0}function t(c){if(a.isOpen||!a.disabled){var d=H[0],e=b[0].contains(c.target),f=void 0!==d.contains&&d.contains(c.target);!a.isOpen||e||f||a.$apply(function(){a.isOpen=!1})}}function u(c){27===c.which&&a.isOpen?(c.preventDefault(),c.stopPropagation(),a.$apply(function(){a.isOpen=!1}),b[0].focus()):40!==c.which||a.isOpen||(c.preventDefault(),c.stopPropagation(),a.$apply(function(){a.isOpen=!0}))}function v(){if(a.isOpen){var d=angular.element(H[0].querySelector(".uib-datepicker-popup")),e=c.popupPlacement?c.popupPlacement:m.placement,f=j.positionElements(b,d,e,y);d.css({top:f.top+"px",left:f.left+"px"}),d.hasClass("uib-position-measure")&&d.removeClass("uib-position-measure")}}var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K=!1,L=[];this.init=function(e){if(F=e,G=e.$options,x=angular.isDefined(c.closeOnDateSelection)?a.$parent.$eval(c.closeOnDateSelection):m.closeOnDateSelection,y=angular.isDefined(c.datepickerAppendToBody)?a.$parent.$eval(c.datepickerAppendToBody):m.appendToBody,z=angular.isDefined(c.onOpenFocus)?a.$parent.$eval(c.onOpenFocus):m.onOpenFocus,A=angular.isDefined(c.datepickerPopupTemplateUrl)?c.datepickerPopupTemplateUrl:m.datepickerPopupTemplateUrl,B=angular.isDefined(c.datepickerTemplateUrl)?c.datepickerTemplateUrl:m.datepickerTemplateUrl,I=angular.isDefined(c.altInputFormats)?a.$parent.$eval(c.altInputFormats):m.altInputFormats,a.showButtonBar=angular.isDefined(c.showButtonBar)?a.$parent.$eval(c.showButtonBar):m.showButtonBar,m.html5Types[c.type]?(w=m.html5Types[c.type],K=!0):(w=c.uibDatepickerPopup||m.datepickerPopup,c.$observe("uibDatepickerPopup",function(a,b){var c=a||m.datepickerPopup;if(c!==w&&(w=c,F.$modelValue=null,!w))throw new Error("uibDatepickerPopup must have a date format specified.")})),!w)throw new Error("uibDatepickerPopup must have a date format specified.");if(K&&c.uibDatepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");C=angular.element("<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>"),G?(J=G.timezone,a.ngModelOptions=angular.copy(G),a.ngModelOptions.timezone=null,a.ngModelOptions.updateOnDefault===!0&&(a.ngModelOptions.updateOn=a.ngModelOptions.updateOn?a.ngModelOptions.updateOn+" default":"default"),C.attr("ng-model-options","ngModelOptions")):J=null,C.attr({"ng-model":"date","ng-change":"dateSelection(date)","template-url":A}),D=angular.element(C.children()[0]),D.attr("template-url",B),a.datepickerOptions||(a.datepickerOptions={}),K&&"month"===c.type&&(a.datepickerOptions.datepickerMode="month",a.datepickerOptions.minMode="month"),D.attr("datepicker-options","datepickerOptions"),K?F.$formatters.push(function(b){return a.date=l.fromTimezone(b,J),b}):(F.$$parserName="date",F.$validators.date=s,F.$parsers.unshift(r),F.$formatters.push(function(b){return F.$isEmpty(b)?(a.date=b,b):(a.date=l.fromTimezone(b,J),angular.isNumber(a.date)&&(a.date=new Date(a.date)),l.filter(a.date,w))})),F.$viewChangeListeners.push(function(){a.date=q(F.$viewValue)}),b.on("keydown",u),H=d(C)(a),C.remove(),y?h.find("body").append(H):b.after(H),a.$on("$destroy",function(){for(a.isOpen===!0&&(i.$$phase||a.$apply(function(){a.isOpen=!1})),H.remove(),b.off("keydown",u),h.off("click",t),E&&E.off("scroll",v),angular.element(g).off("resize",v);L.length;)L.shift()()})},a.getText=function(b){return a[b+"Text"]||m[b+"Text"]},a.isDisabled=function(b){"today"===b&&(b=l.fromTimezone(new Date,J));var c={};return angular.forEach(["minDate","maxDate"],function(b){a.datepickerOptions[b]?angular.isDate(a.datepickerOptions[b])?c[b]=l.fromTimezone(new Date(a.datepickerOptions[b]),J):(p&&e.warn("Literal date support has been deprecated, please switch to date object usage"),c[b]=new Date(k(a.datepickerOptions[b],"medium"))):c[b]=null}),a.datepickerOptions&&c.minDate&&a.compare(b,c.minDate)<0||c.maxDate&&a.compare(b,c.maxDate)>0},a.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},a.dateSelection=function(c){angular.isDefined(c)&&(a.date=c);var d=a.date?l.filter(a.date,w):null;b.val(d),F.$setViewValue(d),x&&(a.isOpen=!1,b[0].focus())},a.keydown=function(c){27===c.which&&(c.stopPropagation(),a.isOpen=!1,b[0].focus())},a.select=function(b,c){if(c.stopPropagation(),"today"===b){var d=new Date;angular.isDate(a.date)?(b=new Date(a.date),b.setFullYear(d.getFullYear(),d.getMonth(),d.getDate())):b=new Date(d.setHours(0,0,0,0))}a.dateSelection(b)},a.close=function(c){c.stopPropagation(),a.isOpen=!1,b[0].focus()},a.disabled=angular.isDefined(c.disabled)||!1,c.ngDisabled&&L.push(a.$parent.$watch(f(c.ngDisabled),function(b){a.disabled=b})),a.$watch("isOpen",function(d){d?a.disabled?a.isOpen=!1:n(function(){v(),z&&a.$broadcast("uib:datepicker.focus"),h.on("click",t);var d=c.popupPlacement?c.popupPlacement:m.placement;y||j.parsePlacement(d)[2]?(E=E||angular.element(j.scrollParent(b)),E&&E.on("scroll",v)):E=null,angular.element(g).on("resize",v)},0,!1):(h.off("click",t),E&&E.off("scroll",v),angular.element(g).off("resize",v))}),a.$on("uib:datepicker.mode",function(){n(v,0,!1)})}]).directive("uibDatepickerPopup",function(){return{require:["ngModel","uibDatepickerPopup"],controller:"UibDatepickerPopupController",scope:{datepickerOptions:"=?",isOpen:"=?",currentText:"@",clearText:"@",closeText:"@"},link:function(a,b,c,d){var e=d[0],f=d[1];f.init(e)}}}).directive("uibDatepickerPopupWrap",function(){return{replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/datepickerPopup/popup.html"}}}),angular.module("ui.bootstrap.debounce",[]).factory("$$debounce",["$timeout",function(a){return function(b,c){var d;return function(){var e=this,f=Array.prototype.slice.call(arguments);d&&a.cancel(d),d=a(function(){b.apply(e,f)},c)}}}]),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("uibDropdownConfig",{appendToOpenClass:"uib-dropdown-open",openClass:"open"}).service("uibDropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b,f){c||(a.on("click",d),f.on("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b,f){c===b&&(c=null,a.off("click",d),f.off("keydown",e))};var d=function(a){if(c&&!(a&&"disabled"===c.getAutoClose()||a&&3===a.which)){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getDropdownElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which?(a.stopPropagation(),c.focusToggleElement(),d()):c.isKeynavEnabled()&&-1!==[38,40].indexOf(a.which)&&c.isOpen&&(a.preventDefault(),a.stopPropagation(),c.focusDropdownEntry(a.which))}}]).controller("UibDropdownController",["$scope","$element","$attrs","$parse","uibDropdownConfig","uibDropdownService","$animate","$uibPosition","$document","$compile","$templateRequest",function(a,b,c,d,e,f,g,h,i,j,k){var l,m,n=this,o=a.$new(),p=e.appendToOpenClass,q=e.openClass,r=angular.noop,s=c.onToggle?d(c.onToggle):angular.noop,t=!1,u=null,v=!1,w=i.find("body");b.addClass("dropdown"),this.init=function(){if(c.isOpen&&(m=d(c.isOpen),r=m.assign,a.$watch(m,function(a){o.isOpen=!!a})),angular.isDefined(c.dropdownAppendTo)){var e=d(c.dropdownAppendTo)(o);e&&(u=angular.element(e))}t=angular.isDefined(c.dropdownAppendToBody),v=angular.isDefined(c.keyboardNav),t&&!u&&(u=w),u&&n.dropdownMenu&&(u.append(n.dropdownMenu),b.on("$destroy",function(){n.dropdownMenu.remove()}))},this.toggle=function(a){return o.isOpen=arguments.length?!!a:!o.isOpen,angular.isFunction(r)&&r(o,o.isOpen),o.isOpen},this.isOpen=function(){return o.isOpen},o.getToggleElement=function(){return n.toggleElement},o.getAutoClose=function(){return c.autoClose||"always"},o.getElement=function(){return b},o.isKeynavEnabled=function(){return v},o.focusDropdownEntry=function(a){var c=n.dropdownMenu?angular.element(n.dropdownMenu).find("a"):b.find("ul").eq(0).find("a");switch(a){case 40:angular.isNumber(n.selectedOption)?n.selectedOption=n.selectedOption===c.length-1?n.selectedOption:n.selectedOption+1:n.selectedOption=0;break;case 38:angular.isNumber(n.selectedOption)?n.selectedOption=0===n.selectedOption?0:n.selectedOption-1:n.selectedOption=c.length-1}c[n.selectedOption].focus()},o.getDropdownElement=function(){return n.dropdownMenu},o.focusToggleElement=function(){n.toggleElement&&n.toggleElement[0].focus()},o.$watch("isOpen",function(c,d){if(u&&n.dropdownMenu){var e,i,m=h.positionElements(b,n.dropdownMenu,"bottom-left",!0);if(e={top:m.top+"px",display:c?"block":"none"},i=n.dropdownMenu.hasClass("dropdown-menu-right"),i?(e.left="auto",e.right=window.innerWidth-(m.left+b.prop("offsetWidth"))+"px"):(e.left=m.left+"px",e.right="auto"),!t){var v=h.offset(u);e.top=m.top-v.top+"px",i?e.right=window.innerWidth-(m.left-v.left+b.prop("offsetWidth"))+"px":e.left=m.left-v.left+"px"}n.dropdownMenu.css(e)}var w=u?u:b,x=w.hasClass(u?p:q);if(x===!c&&g[c?"addClass":"removeClass"](w,u?p:q).then(function(){angular.isDefined(c)&&c!==d&&s(a,{open:!!c})}),c)n.dropdownMenuTemplateUrl&&k(n.dropdownMenuTemplateUrl).then(function(a){l=o.$new(),j(a.trim())(l,function(a){var b=a;n.dropdownMenu.replaceWith(b),n.dropdownMenu=b})}),o.focusToggleElement(),f.open(o,b);else{if(n.dropdownMenuTemplateUrl){l&&l.$destroy();var y=angular.element('<ul class="dropdown-menu"></ul>');n.dropdownMenu.replaceWith(y),n.dropdownMenu=y}f.close(o,b),n.selectedOption=null}angular.isFunction(r)&&r(a,c)})}]).directive("uibDropdown",function(){return{controller:"UibDropdownController",link:function(a,b,c,d){d.init()}}}).directive("uibDropdownMenu",function(){return{restrict:"A",require:"?^uibDropdown",link:function(a,b,c,d){if(d&&!angular.isDefined(c.dropdownNested)){b.addClass("dropdown-menu");var e=c.templateUrl;e&&(d.dropdownMenuTemplateUrl=e),d.dropdownMenu||(d.dropdownMenu=b)}}}}).directive("uibDropdownToggle",function(){return{require:"?^uibDropdown",link:function(a,b,c,d){if(d){b.addClass("dropdown-toggle"),d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.stackedMap",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c<a.length;c++)if(b===a[c].key)return a[c]},keys:function(){for(var b=[],c=0;c<a.length;c++)b.push(a[c].key);return b},top:function(){return a[a.length-1]},remove:function(b){for(var c=-1,d=0;d<a.length;d++)if(b===a[d].key){c=d;break}return a.splice(c,1)[0]},removeTop:function(){return a.splice(a.length-1,1)[0]},length:function(){return a.length}}}}}),angular.module("ui.bootstrap.modal",["ui.bootstrap.stackedMap","ui.bootstrap.position"]).factory("$$multiMap",function(){return{createNew:function(){var a={};return{entries:function(){return Object.keys(a).map(function(b){return{key:b,value:a[b]}})},get:function(b){return a[b]},hasKey:function(b){return!!a[b]},keys:function(){return Object.keys(a)},put:function(b,c){a[b]||(a[b]=[]),a[b].push(c)},remove:function(b,c){var d=a[b];if(d){var e=d.indexOf(c);-1!==e&&d.splice(e,1),d.length||delete a[b]}}}}}}).provider("$uibResolve",function(){var a=this;this.resolver=null,this.setResolver=function(a){this.resolver=a},this.$get=["$injector","$q",function(b,c){var d=a.resolver?b.get(a.resolver):null;return{resolve:function(a,e,f,g){if(d)return d.resolve(a,e,f,g);var h=[];return angular.forEach(a,function(a){angular.isFunction(a)||angular.isArray(a)?h.push(c.resolve(b.invoke(a))):angular.isString(a)?h.push(c.resolve(b.get(a))):h.push(c.resolve(a))}),c.all(h).then(function(b){var c={},d=0;return angular.forEach(a,function(a,e){c[e]=b[d++]}),c})}}}]}).directive("uibModalBackdrop",["$animate","$injector","$uibModalStack",function(a,b,c){function d(b,d,e){e.modalInClass&&(a.addClass(d,e.modalInClass),b.$on(c.NOW_CLOSING_EVENT,function(c,f){var g=f();b.modalOptions.animation?a.removeClass(d,e.modalInClass).then(g):g()}))}return{replace:!0,templateUrl:"uib/template/modal/backdrop.html",compile:function(a,b){return a.addClass(b.backdropClass),d}}}]).directive("uibModalWindow",["$uibModalStack","$q","$animateCss","$document",function(a,b,c,d){return{scope:{index:"@"},replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/modal/window.html"},link:function(e,f,g){f.addClass(g.windowClass||""),f.addClass(g.windowTopClass||""),e.size=g.size,e.close=function(b){var c=a.getTop();c&&c.value.backdrop&&"static"!==c.value.backdrop&&b.target===b.currentTarget&&(b.preventDefault(),b.stopPropagation(),a.dismiss(c.key,"backdrop click"))},f.on("click",e.close),e.$isRendered=!0;var h=b.defer();g.$observe("modalRender",function(a){"true"===a&&h.resolve()}),h.promise.then(function(){var h=null;g.modalInClass&&(h=c(f,{addClass:g.modalInClass}).start(),e.$on(a.NOW_CLOSING_EVENT,function(a,b){var d=b();c(f,{removeClass:g.modalInClass}).start().then(d)})),b.when(h).then(function(){var b=a.getTop();if(b&&a.modalRendered(b.key),!d[0].activeElement||!f[0].contains(d[0].activeElement)){var c=f[0].querySelector("[autofocus]");c?c.focus():f[0].focus()}})})}}}]).directive("uibModalAnimationClass",function(){return{compile:function(a,b){b.modalAnimation&&a.addClass(b.uibModalAnimationClass)}}}).directive("uibModalTransclude",function(){return{link:function(a,b,c,d,e){e(a.$parent,function(a){b.empty(),b.append(a)})}}}).factory("$uibModalStack",["$animate","$animateCss","$document","$compile","$rootScope","$q","$$multiMap","$$stackedMap","$uibPosition",function(a,b,c,d,e,f,g,h,i){function j(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)}function k(){for(var a=-1,b=v.keys(),c=0;c<b.length;c++)v.get(b[c]).value.backdrop&&(a=c);return a>-1&&y>a&&(a=y),a}function l(a,b){var c=v.get(a).value,d=c.appendTo;v.remove(a),z=v.top(),z&&(y=parseInt(z.value.modalDomEl.attr("index"),10)),o(c.modalDomEl,c.modalScope,function(){var b=c.openedClass||u;w.remove(b,a);var e=w.hasKey(b);d.toggleClass(b,e),!e&&t&&t.heightOverflow&&t.scrollbarWidth&&(t.originalRight?d.css({paddingRight:t.originalRight+"px"}):d.css({paddingRight:""}),t=null),m(!0)},c.closedDeferred),n(),b&&b.focus?b.focus():d.focus&&d.focus()}function m(a){var b;v.length()>0&&(b=v.top().value,b.modalDomEl.toggleClass(b.windowTopClass||"",a))}function n(){if(r&&-1===k()){var a=s;o(r,s,function(){a=null}),r=void 0,s=void 0}}function o(b,c,d,e){function g(){g.done||(g.done=!0,a.leave(b).then(function(){b.remove(),e&&e.resolve()}),c.$destroy(),d&&d())}var h,i=null,j=function(){return h||(h=f.defer(),i=h.promise),function(){h.resolve()}};return c.$broadcast(x.NOW_CLOSING_EVENT,j),f.when(i).then(g)}function p(a){if(a.isDefaultPrevented())return a;var b=v.top();if(b)switch(a.which){case 27:b.value.keyboard&&(a.preventDefault(),e.$apply(function(){x.dismiss(b.key,"escape key press")}));break;case 9:var c=x.loadFocusElementList(b),d=!1;a.shiftKey?(x.isFocusInFirstItem(a,c)||x.isModalFocused(a,b))&&(d=x.focusLastFocusableElement(c)):x.isFocusInLastItem(a,c)&&(d=x.focusFirstFocusableElement(c)),d&&(a.preventDefault(),a.stopPropagation())}}function q(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var r,s,t,u="modal-open",v=h.createNew(),w=g.createNew(),x={NOW_CLOSING_EVENT:"modal.stack.now-closing"},y=0,z=null,A="a[href], area[href], input:not([disabled]), button:not([disabled]),select:not([disabled]), textarea:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable=true]";return e.$watch(k,function(a){s&&(s.index=a)}),c.on("keydown",p),e.$on("$destroy",function(){c.off("keydown",p)}),x.open=function(b,f){var g=c[0].activeElement,h=f.openedClass||u;m(!1),z=v.top(),v.add(b,{deferred:f.deferred,renderDeferred:f.renderDeferred,closedDeferred:f.closedDeferred,modalScope:f.scope,backdrop:f.backdrop,keyboard:f.keyboard,openedClass:f.openedClass,windowTopClass:f.windowTopClass,animation:f.animation,appendTo:f.appendTo}),w.put(h,b);var j=f.appendTo,l=k();if(!j.length)throw new Error("appendTo element not found. Make sure that the element passed is in DOM.");l>=0&&!r&&(s=e.$new(!0),s.modalOptions=f,s.index=l,r=angular.element('<div uib-modal-backdrop="modal-backdrop"></div>'),r.attr("backdrop-class",f.backdropClass),f.animation&&r.attr("modal-animation","true"),d(r)(s),a.enter(r,j),t=i.scrollbarPadding(j),t.heightOverflow&&t.scrollbarWidth&&j.css({paddingRight:t.right+"px"})),y=z?parseInt(z.value.modalDomEl.attr("index"),10)+1:0;var n=angular.element('<div uib-modal-window="modal-window"></div>');n.attr({"template-url":f.windowTemplateUrl,"window-class":f.windowClass,"window-top-class":f.windowTopClass,size:f.size,index:y,animate:"animate"}).html(f.content),f.animation&&n.attr("modal-animation","true"),j.addClass(h),a.enter(d(n)(f.scope),j),v.top().value.modalDomEl=n,v.top().value.modalOpener=g},x.close=function(a,b){var c=v.get(a);return c&&q(c,b,!0)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.resolve(b),l(a,c.value.modalOpener),!0):!c},x.dismiss=function(a,b){var c=v.get(a);return c&&q(c,b,!1)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.reject(b),l(a,c.value.modalOpener),!0):!c},x.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},x.getTop=function(){return v.top()},x.modalRendered=function(a){var b=v.get(a);b&&b.value.renderDeferred.resolve()},x.focusFirstFocusableElement=function(a){return a.length>0?(a[0].focus(),!0):!1},x.focusLastFocusableElement=function(a){return a.length>0?(a[a.length-1].focus(),!0):!1},x.isModalFocused=function(a,b){if(a&&b){var c=b.value.modalDomEl;if(c&&c.length)return(a.target||a.srcElement)===c[0]}return!1},x.isFocusInFirstItem=function(a,b){return b.length>0?(a.target||a.srcElement)===b[0]:!1},x.isFocusInLastItem=function(a,b){return b.length>0?(a.target||a.srcElement)===b[b.length-1]:!1},x.loadFocusElementList=function(a){if(a){var b=a.value.modalDomEl;if(b&&b.length){var c=b[0].querySelectorAll(A);return c?Array.prototype.filter.call(c,function(a){return j(a)}):c}}},x}]).provider("$uibModal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$rootScope","$q","$document","$templateRequest","$controller","$uibResolve","$uibModalStack",function(b,c,d,e,f,g,h){function i(a){return a.template?c.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}var j={},k=null;return j.getPromiseChain=function(){return k},j.open=function(e){function j(){return r}var l=c.defer(),m=c.defer(),n=c.defer(),o=c.defer(),p={result:l.promise,opened:m.promise,closed:n.promise,rendered:o.promise,close:function(a){return h.close(p,a)},dismiss:function(a){return h.dismiss(p,a)}};if(e=angular.extend({},a.options,e),e.resolve=e.resolve||{},e.appendTo=e.appendTo||d.find("body").eq(0),!e.template&&!e.templateUrl)throw new Error("One of template or templateUrl options is required.");var q,r=c.all([i(e),g.resolve(e.resolve,{},null,null)]);return q=k=c.all([k]).then(j,j).then(function(a){var c=e.scope||b,d=c.$new();d.$close=p.close,d.$dismiss=p.dismiss,d.$on("$destroy",function(){d.$$uibDestructionScheduled||d.$dismiss("$uibUnscheduledDestruction")});var g,i,j={};e.controller&&(j.$scope=d,j.$uibModalInstance=p,angular.forEach(a[1],function(a,b){j[b]=a}),i=f(e.controller,j,!0),e.controllerAs?(g=i.instance,e.bindToController&&(g.$close=d.$close,g.$dismiss=d.$dismiss,angular.extend(g,c)),g=i(),d[e.controllerAs]=g):g=i(),angular.isFunction(g.$onInit)&&g.$onInit()),h.open(p,{scope:d,deferred:l,renderDeferred:o,closedDeferred:n,content:a[0],animation:e.animation,backdrop:e.backdrop,keyboard:e.keyboard,backdropClass:e.backdropClass,windowTopClass:e.windowTopClass,windowClass:e.windowClass,windowTemplateUrl:e.windowTemplateUrl,size:e.size,openedClass:e.openedClass,appendTo:e.appendTo}),m.resolve(!0)},function(a){m.reject(a),l.reject(a)})["finally"](function(){k===q&&(k=null)}),p},j}]};return a}),angular.module("ui.bootstrap.paging",[]).factory("uibPaging",["$parse",function(a){return{create:function(b,c,d){b.setNumPages=d.numPages?a(d.numPages).assign:angular.noop,b.ngModelCtrl={$setViewValue:angular.noop},b._watchers=[],b.init=function(a,e){b.ngModelCtrl=a,b.config=e,a.$render=function(){b.render()},d.itemsPerPage?b._watchers.push(c.$parent.$watch(d.itemsPerPage,function(a){b.itemsPerPage=parseInt(a,10),c.totalPages=b.calculateTotalPages(),b.updatePage()})):b.itemsPerPage=e.itemsPerPage,c.$watch("totalItems",function(a,d){(angular.isDefined(a)||a!==d)&&(c.totalPages=b.calculateTotalPages(),b.updatePage())})},b.calculateTotalPages=function(){var a=b.itemsPerPage<1?1:Math.ceil(c.totalItems/b.itemsPerPage);return Math.max(a||0,1)},b.render=function(){c.page=parseInt(b.ngModelCtrl.$viewValue,10)||1},c.selectPage=function(a,d){d&&d.preventDefault();var e=!c.ngDisabled||!d;e&&c.page!==a&&a>0&&a<=c.totalPages&&(d&&d.target&&d.target.blur(),b.ngModelCtrl.$setViewValue(a),b.ngModelCtrl.$render())},c.getText=function(a){return c[a+"Text"]||b.config[a+"Text"]},c.noPrevious=function(){return 1===c.page},c.noNext=function(){return c.page===c.totalPages},b.updatePage=function(){b.setNumPages(c.$parent,c.totalPages),c.page>c.totalPages?c.selectPage(c.totalPages):b.ngModelCtrl.$render()},c.$on("$destroy",function(){for(;b._watchers.length;)b._watchers.shift()()})}}}]),angular.module("ui.bootstrap.pager",["ui.bootstrap.paging"]).controller("UibPagerController",["$scope","$attrs","uibPaging","uibPagerConfig",function(a,b,c,d){a.align=angular.isDefined(b.align)?a.$parent.$eval(b.align):d.align,c.create(this,a,b)}]).constant("uibPagerConfig",{itemsPerPage:10,previousText:"Β« Previous",nextText:"Next Β»",align:!0}).directive("uibPager",["uibPagerConfig",function(a){return{scope:{totalItems:"=",previousText:"@",nextText:"@",ngDisabled:"="},require:["uibPager","?ngModel"],controller:"UibPagerController",controllerAs:"pager",templateUrl:function(a,b){return b.templateUrl||"uib/template/pager/pager.html"},replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&f.init(g,a)}}}]),angular.module("ui.bootstrap.pagination",["ui.bootstrap.paging"]).controller("UibPaginationController",["$scope","$attrs","$parse","uibPaging","uibPaginationConfig",function(a,b,c,d,e){function f(a,b,c){return{number:a,text:b,active:c}}function g(a,b){var c=[],d=1,e=b,g=angular.isDefined(i)&&b>i;g&&(j?(d=Math.max(a-Math.floor(i/2),1),e=d+i-1,e>b&&(e=b,d=e-i+1)):(d=(Math.ceil(a/i)-1)*i+1,e=Math.min(d+i-1,b)));for(var h=d;e>=h;h++){var n=f(h,m(h),h===a);c.push(n)}if(g&&i>0&&(!j||k||l)){if(d>1){if(!l||d>3){var o=f(d-1,"...",!1);c.unshift(o)}if(l){if(3===d){var p=f(2,"2",!1);c.unshift(p)}var q=f(1,"1",!1);c.unshift(q)}}if(b>e){if(!l||b-2>e){var r=f(e+1,"...",!1);c.push(r)}if(l){if(e===b-2){var s=f(b-1,b-1,!1);c.push(s)}var t=f(b,b,!1);c.push(t)}}}return c}var h=this,i=angular.isDefined(b.maxSize)?a.$parent.$eval(b.maxSize):e.maxSize,j=angular.isDefined(b.rotate)?a.$parent.$eval(b.rotate):e.rotate,k=angular.isDefined(b.forceEllipses)?a.$parent.$eval(b.forceEllipses):e.forceEllipses,l=angular.isDefined(b.boundaryLinkNumbers)?a.$parent.$eval(b.boundaryLinkNumbers):e.boundaryLinkNumbers,m=angular.isDefined(b.pageLabel)?function(c){return a.$parent.$eval(b.pageLabel,{$page:c})}:angular.identity;a.boundaryLinks=angular.isDefined(b.boundaryLinks)?a.$parent.$eval(b.boundaryLinks):e.boundaryLinks,a.directionLinks=angular.isDefined(b.directionLinks)?a.$parent.$eval(b.directionLinks):e.directionLinks,d.create(this,a,b),b.maxSize&&h._watchers.push(a.$parent.$watch(c(b.maxSize),function(a){i=parseInt(a,10),h.render()}));var n=this.render;this.render=function(){n(),a.page>0&&a.page<=a.totalPages&&(a.pages=g(a.page,a.totalPages))}}]).constant("uibPaginationConfig",{itemsPerPage:10,boundaryLinks:!1,boundaryLinkNumbers:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0,forceEllipses:!1}).directive("uibPagination",["$parse","uibPaginationConfig",function(a,b){return{scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@",ngDisabled:"="},require:["uibPagination","?ngModel"],controller:"UibPaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"uib/template/pagination/pagination.html"},replace:!0,link:function(a,c,d,e){var f=e[0],g=e[1];g&&f.init(g,b)}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.stackedMap"]).provider("$uibTooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",placementClassPrefix:"",animation:!0,popupDelay:0,popupCloseDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",outsideClick:"outsideClick",focus:"blur",none:""},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$uibPosition","$interpolate","$rootScope","$parse","$$stackedMap",function(e,f,g,h,i,j,k,l,m){function n(a){if(27===a.which){var b=o.top();b&&(b.value.close(),o.removeTop(),b=null)}}var o=m.createNew();return h.on("keypress",n),k.$on("$destroy",function(){h.off("keypress",n)}),function(e,k,m,n){function p(a){var b=(a||n.trigger||m).split(" "),d=b.map(function(a){return c[a]||a});return{show:b,hide:d}}n=angular.extend({},b,d,n);var q=a(e),r=j.startSymbol(),s=j.endSymbol(),t="<div "+q+'-popup uib-title="'+r+"title"+s+'" '+(n.useContentExp?'content-exp="contentExp()" ':'content="'+r+"content"+s+'" ')+'placement="'+r+"placement"+s+'" popup-class="'+r+"popupClass"+s+'" animation="animation" is-open="isOpen" origin-scope="origScope" class="uib-position-measure"></div>';
1767 1767 return{compile:function(a,b){var c=f(t);return function(a,b,d,f){function j(){N.isOpen?q():m()}function m(){M&&!a.$eval(d[k+"Enable"])||(u(),x(),N.popupDelay?G||(G=g(r,N.popupDelay,!1)):r())}function q(){s(),N.popupCloseDelay?H||(H=g(t,N.popupCloseDelay,!1)):t()}function r(){return s(),u(),N.content?(v(),void N.$evalAsync(function(){N.isOpen=!0,y(!0),S()})):angular.noop}function s(){G&&(g.cancel(G),G=null),I&&(g.cancel(I),I=null)}function t(){N&&N.$evalAsync(function(){N&&(N.isOpen=!1,y(!1),N.animation?F||(F=g(w,150,!1)):w())})}function u(){H&&(g.cancel(H),H=null),F&&(g.cancel(F),F=null)}function v(){D||(E=N.$new(),D=c(E,function(a){K?h.find("body").append(a):b.after(a)}),z())}function w(){s(),u(),A(),D&&(D.remove(),D=null),E&&(E.$destroy(),E=null)}function x(){N.title=d[k+"Title"],Q?N.content=Q(a):N.content=d[e],N.popupClass=d[k+"Class"],N.placement=angular.isDefined(d[k+"Placement"])?d[k+"Placement"]:n.placement;var b=i.parsePlacement(N.placement);J=b[1]?b[0]+"-"+b[1]:b[0];var c=parseInt(d[k+"PopupDelay"],10),f=parseInt(d[k+"PopupCloseDelay"],10);N.popupDelay=isNaN(c)?n.popupDelay:c,N.popupCloseDelay=isNaN(f)?n.popupCloseDelay:f}function y(b){P&&angular.isFunction(P.assign)&&P.assign(a,b)}function z(){R.length=0,Q?(R.push(a.$watch(Q,function(a){N.content=a,!a&&N.isOpen&&t()})),R.push(E.$watch(function(){O||(O=!0,E.$$postDigest(function(){O=!1,N&&N.isOpen&&S()}))}))):R.push(d.$observe(e,function(a){N.content=a,!a&&N.isOpen?t():S()})),R.push(d.$observe(k+"Title",function(a){N.title=a,N.isOpen&&S()})),R.push(d.$observe(k+"Placement",function(a){N.placement=a?a:n.placement,N.isOpen&&S()}))}function A(){R.length&&(angular.forEach(R,function(a){a()}),R.length=0)}function B(a){N&&N.isOpen&&D&&(b[0].contains(a.target)||D[0].contains(a.target)||q())}function C(){var a=d[k+"Trigger"];T(),L=p(a),"none"!==L.show&&L.show.forEach(function(a,c){"outsideClick"===a?(b.on("click",j),h.on("click",B)):a===L.hide[c]?b.on(a,j):a&&(b.on(a,m),b.on(L.hide[c],q)),b.on("keypress",function(a){27===a.which&&q()})})}var D,E,F,G,H,I,J,K=angular.isDefined(n.appendToBody)?n.appendToBody:!1,L=p(void 0),M=angular.isDefined(d[k+"Enable"]),N=a.$new(!0),O=!1,P=angular.isDefined(d[k+"IsOpen"])?l(d[k+"IsOpen"]):!1,Q=n.useContentExp?l(d[e]):!1,R=[],S=function(){D&&D.html()&&(I||(I=g(function(){var a=i.positionElements(b,D,N.placement,K);D.css({top:a.top+"px",left:a.left+"px"}),D.hasClass(a.placement.split("-")[0])||(D.removeClass(J.split("-")[0]),D.addClass(a.placement.split("-")[0])),D.hasClass(n.placementClassPrefix+a.placement)||(D.removeClass(n.placementClassPrefix+J),D.addClass(n.placementClassPrefix+a.placement)),D.hasClass("uib-position-measure")?(i.positionArrow(D,a.placement),D.removeClass("uib-position-measure")):J!==a.placement&&i.positionArrow(D,a.placement),J=a.placement,I=null},0,!1)))};N.origScope=a,N.isOpen=!1,o.add(N,{close:t}),N.contentExp=function(){return N.content},d.$observe("disabled",function(a){a&&s(),a&&N.isOpen&&t()}),P&&a.$watch(P,function(a){N&&!a===N.isOpen&&j()});var T=function(){L.show.forEach(function(a){"outsideClick"===a?b.off("click",j):(b.off(a,m),b.off(a,j))}),L.hide.forEach(function(a){"outsideClick"===a?h.off("click",B):b.off(a,q)})};C();var U=a.$eval(d[k+"Animation"]);N.animation=angular.isDefined(U)?!!U:n.animation;var V,W=k+"AppendToBody";V=W in d&&void 0===d[W]?!0:a.$eval(d[W]),K=angular.isDefined(V)?V:K,a.$on("$destroy",function(){T(),w(),o.remove(N),N=null})}}}}}]}).directive("uibTooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.uibTooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("uibTooltipClasses",["$uibPosition",function(a){return{restrict:"A",link:function(b,c,d){if(b.placement){var e=a.parsePlacement(b.placement);c.addClass(e[0])}b.popupClass&&c.addClass(b.popupClass),b.animation()&&c.addClass(d.tooltipAnimationClass)}}}]).directive("uibTooltipPopup",function(){return{replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"uib/template/tooltip/tooltip-popup.html"}}).directive("uibTooltip",["$uibTooltip",function(a){return a("uibTooltip","tooltip","mouseenter")}]).directive("uibTooltipTemplatePopup",function(){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"uib/template/tooltip/tooltip-template-popup.html"}}).directive("uibTooltipTemplate",["$uibTooltip",function(a){return a("uibTooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("uibTooltipHtmlPopup",function(){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"uib/template/tooltip/tooltip-html-popup.html"}}).directive("uibTooltipHtml",["$uibTooltip",function(a){return a("uibTooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("uibPopoverTemplatePopup",function(){return{replace:!0,scope:{uibTitle:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"uib/template/popover/popover-template.html"}}).directive("uibPopoverTemplate",["$uibTooltip",function(a){return a("uibPopoverTemplate","popover","click",{useContentExp:!0})}]).directive("uibPopoverHtmlPopup",function(){return{replace:!0,scope:{contentExp:"&",uibTitle:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"uib/template/popover/popover-html.html"}}).directive("uibPopoverHtml",["$uibTooltip",function(a){return a("uibPopoverHtml","popover","click",{useContentExp:!0})}]).directive("uibPopoverPopup",function(){return{replace:!0,scope:{uibTitle:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"uib/template/popover/popover.html"}}).directive("uibPopover",["$uibTooltip",function(a){return a("uibPopover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("uibProgressConfig",{animate:!0,max:100}).controller("UibProgressController",["$scope","$attrs","uibProgressConfig",function(a,b,c){function d(){return angular.isDefined(a.maxParam)?a.maxParam:c.max}var e=this,f=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=d(),this.addBar=function(a,b,c){f||b.css({transition:"none"}),this.bars.push(a),a.max=d(),a.title=c&&angular.isDefined(c.title)?c.title:"progressbar",a.$watch("value",function(b){a.recalculatePercentage()}),a.recalculatePercentage=function(){var b=e.bars.reduce(function(a,b){return b.percent=+(100*b.value/b.max).toFixed(2),a+b.percent},0);b>100&&(a.percent-=b-100)},a.$on("$destroy",function(){b=null,e.removeBar(a)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1),this.bars.forEach(function(a){a.recalculatePercentage()})},a.$watch("maxParam",function(a){e.bars.forEach(function(a){a.max=d(),a.recalculatePercentage()})})}]).directive("uibProgress",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",require:"uibProgress",scope:{maxParam:"=?max"},templateUrl:"uib/template/progressbar/progress.html"}}).directive("uibBar",function(){return{replace:!0,transclude:!0,require:"^uibProgress",scope:{value:"=",type:"@"},templateUrl:"uib/template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b,c)}}}).directive("uibProgressbar",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",scope:{value:"=",maxParam:"=?max",type:"@"},templateUrl:"uib/template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]),{title:c.title})}}}),angular.module("ui.bootstrap.rating",[]).constant("uibRatingConfig",{max:5,stateOn:null,stateOff:null,enableReset:!0,titles:["one","two","three","four","five"]}).controller("UibRatingController",["$scope","$attrs","uibRatingConfig",function(a,b,c){var d={$setViewValue:angular.noop},e=this;this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff,this.enableReset=angular.isDefined(b.enableReset)?a.$parent.$eval(b.enableReset):c.enableReset;var f=angular.isDefined(b.titles)?a.$parent.$eval(b.titles):c.titles;this.titles=angular.isArray(f)&&f.length>0?f:c.titles;var g=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(g)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff,title:this.getTitle(b)},a[b]);return a},this.getTitle=function(a){return a>=this.titles.length?a+1:this.titles[a]},a.rate=function(b){if(!a.readonly&&b>=0&&b<=a.range.length){var c=e.enableReset&&d.$viewValue===b?0:b;d.$setViewValue(c),d.$render()}},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue,a.title=e.getTitle(a.value-1)}}]).directive("uibRating",function(){return{require:["uibRating","ngModel"],scope:{readonly:"=?readOnly",onHover:"&",onLeave:"&"},controller:"UibRatingController",templateUrl:"uib/template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("UibTabsetController",["$scope",function(a){function b(a){for(var b=0;b<d.tabs.length;b++)if(d.tabs[b].index===a)return b}var c,d=this;d.tabs=[],d.select=function(a,f){if(!e){var g=b(c),h=d.tabs[g];if(h){if(h.tab.onDeselect({$event:f}),f&&f.isDefaultPrevented())return;h.tab.active=!1}var i=d.tabs[a];i?(i.tab.onSelect({$event:f}),i.tab.active=!0,d.active=i.index,c=i.index):!i&&angular.isNumber(c)&&(d.active=null,c=null)}},d.addTab=function(a){if(d.tabs.push({tab:a,index:a.index}),d.tabs.sort(function(a,b){return a.index>b.index?1:a.index<b.index?-1:0}),a.index===d.active||!angular.isNumber(d.active)&&1===d.tabs.length){var c=b(a.index);d.select(c)}},d.removeTab=function(a){for(var b,c=0;c<d.tabs.length;c++)if(d.tabs[c].tab===a){b=c;break}if(d.tabs[b].index===d.active){var e=b===d.tabs.length-1?b-1:b+1%d.tabs.length;d.select(e)}d.tabs.splice(b,1)},a.$watch("tabset.active",function(a){angular.isNumber(a)&&a!==c&&d.select(b(a))});var e;a.$on("$destroy",function(){e=!0})}]).directive("uibTabset",function(){return{transclude:!0,replace:!0,scope:{},bindToController:{active:"=?",type:"@"},controller:"UibTabsetController",controllerAs:"tabset",templateUrl:function(a,b){return b.templateUrl||"uib/template/tabs/tabset.html"},link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1,angular.isUndefined(c.active)&&(a.active=0)}}}).directive("uibTab",["$parse",function(a){return{require:"^uibTabset",replace:!0,templateUrl:function(a,b){return b.templateUrl||"uib/template/tabs/tab.html"},transclude:!0,scope:{heading:"@",index:"=?",classes:"@?",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},controllerAs:"tab",link:function(b,c,d,e,f){b.disabled=!1,d.disable&&b.$parent.$watch(a(d.disable),function(a){b.disabled=!!a}),angular.isUndefined(d.index)&&(e.tabs&&e.tabs.length?b.index=Math.max.apply(null,e.tabs.map(function(a){return a.index}))+1:b.index=0),angular.isUndefined(d.classes)&&(b.classes=""),b.select=function(a){if(!b.disabled){for(var c,d=0;d<e.tabs.length;d++)if(e.tabs[d].tab===b){c=d;break}e.select(c,a)}},e.addTab(b),b.$on("$destroy",function(){e.removeTab(b)}),b.$transcludeFn=f}}}]).directive("uibTabHeadingTransclude",function(){return{restrict:"A",require:"^uibTab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}).directive("uibTabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("uib-tab-heading")||a.hasAttribute("data-uib-tab-heading")||a.hasAttribute("x-uib-tab-heading")||"uib-tab-heading"===a.tagName.toLowerCase()||"data-uib-tab-heading"===a.tagName.toLowerCase()||"x-uib-tab-heading"===a.tagName.toLowerCase()||"uib:tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^uibTabset",link:function(b,c,d){var e=b.$eval(d.uibTabContentTransclude).tab;e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("uibTimepickerConfig",{hourStep:1,minuteStep:1,secondStep:1,showMeridian:!0,showSeconds:!1,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0,showSpinners:!0,templateUrl:"uib/template/timepicker/timepicker.html"}).controller("UibTimepickerController",["$scope","$element","$attrs","$parse","$log","$locale","uibTimepickerConfig",function(a,b,c,d,e,f,g){function h(){var b=+a.hours,c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c&&""!==a.hours?(a.showMeridian&&(12===b&&(b=0),a.meridian===v[1]&&(b+=12)),b):void 0}function i(){var b=+a.minutes,c=b>=0&&60>b;return c&&""!==a.minutes?b:void 0}function j(){var b=+a.seconds;return b>=0&&60>b?b:void 0}function k(a,b){return null===a?"":angular.isDefined(a)&&a.toString().length<2&&!b?"0"+a:a.toString()}function l(a){m(),u.$setViewValue(new Date(s)),n(a)}function m(){u.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1,a.invalidSeconds=!1}function n(b){if(u.$modelValue){var c=s.getHours(),d=s.getMinutes(),e=s.getSeconds();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:k(c,!w),"m"!==b&&(a.minutes=k(d)),a.meridian=s.getHours()<12?v[0]:v[1],"s"!==b&&(a.seconds=k(e)),a.meridian=s.getHours()<12?v[0]:v[1]}else a.hours=null,a.minutes=null,a.seconds=null,a.meridian=v[0]}function o(a){s=q(s,a),l()}function p(a,b){return q(a,60*b)}function q(a,b){var c=new Date(a.getTime()+1e3*b),d=new Date(a);return d.setHours(c.getHours(),c.getMinutes(),c.getSeconds()),d}function r(){return(null===a.hours||""===a.hours)&&(null===a.minutes||""===a.minutes)&&(!a.showSeconds||a.showSeconds&&(null===a.seconds||""===a.seconds))}var s=new Date,t=[],u={$setViewValue:angular.noop},v=angular.isDefined(c.meridians)?a.$parent.$eval(c.meridians):g.meridians||f.DATETIME_FORMATS.AMPMS,w=angular.isDefined(c.padHours)?a.$parent.$eval(c.padHours):!0;a.tabindex=angular.isDefined(c.tabindex)?c.tabindex:0,b.removeAttr("tabindex"),this.init=function(b,d){u=b,u.$render=this.render,u.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),f=d.eq(1),h=d.eq(2),i=angular.isDefined(c.mousewheel)?a.$parent.$eval(c.mousewheel):g.mousewheel;i&&this.setupMousewheelEvents(e,f,h);var j=angular.isDefined(c.arrowkeys)?a.$parent.$eval(c.arrowkeys):g.arrowkeys;j&&this.setupArrowkeyEvents(e,f,h),a.readonlyInput=angular.isDefined(c.readonlyInput)?a.$parent.$eval(c.readonlyInput):g.readonlyInput,this.setupInputEvents(e,f,h)};var x=g.hourStep;c.hourStep&&t.push(a.$parent.$watch(d(c.hourStep),function(a){x=+a}));var y=g.minuteStep;c.minuteStep&&t.push(a.$parent.$watch(d(c.minuteStep),function(a){y=+a}));var z;t.push(a.$parent.$watch(d(c.min),function(a){var b=new Date(a);z=isNaN(b)?void 0:b}));var A;t.push(a.$parent.$watch(d(c.max),function(a){var b=new Date(a);A=isNaN(b)?void 0:b}));var B=!1;c.ngDisabled&&t.push(a.$parent.$watch(d(c.ngDisabled),function(a){B=a})),a.noIncrementHours=function(){var a=p(s,60*x);return B||a>A||s>a&&z>a},a.noDecrementHours=function(){var a=p(s,60*-x);return B||z>a||a>s&&a>A},a.noIncrementMinutes=function(){var a=p(s,y);return B||a>A||s>a&&z>a},a.noDecrementMinutes=function(){var a=p(s,-y);return B||z>a||a>s&&a>A},a.noIncrementSeconds=function(){var a=q(s,C);return B||a>A||s>a&&z>a},a.noDecrementSeconds=function(){var a=q(s,-C);return B||z>a||a>s&&a>A},a.noToggleMeridian=function(){return s.getHours()<12?B||p(s,720)>A:B||p(s,-720)<z};var C=g.secondStep;c.secondStep&&t.push(a.$parent.$watch(d(c.secondStep),function(a){C=+a})),a.showSeconds=g.showSeconds,c.showSeconds&&t.push(a.$parent.$watch(d(c.showSeconds),function(b){a.showSeconds=!!b})),a.showMeridian=g.showMeridian,c.showMeridian&&t.push(a.$parent.$watch(d(c.showMeridian),function(b){if(a.showMeridian=!!b,u.$error.time){var c=h(),d=i();angular.isDefined(c)&&angular.isDefined(d)&&(s.setHours(c),l())}else n()})),this.setupMousewheelEvents=function(b,c,d){var e=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){B||a.$apply(e(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){B||a.$apply(e(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()}),d.bind("mousewheel wheel",function(b){B||a.$apply(e(b)?a.incrementSeconds():a.decrementSeconds()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c,d){b.bind("keydown",function(b){B||(38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply()))}),c.bind("keydown",function(b){B||(38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply()))}),d.bind("keydown",function(b){B||(38===b.which?(b.preventDefault(),a.incrementSeconds(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementSeconds(),a.$apply()))})},this.setupInputEvents=function(b,c,d){if(a.readonlyInput)return a.updateHours=angular.noop,a.updateMinutes=angular.noop,void(a.updateSeconds=angular.noop);var e=function(b,c,d){u.$setViewValue(null),u.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c),angular.isDefined(d)&&(a.invalidSeconds=d)};a.updateHours=function(){var a=h(),b=i();u.$setDirty(),angular.isDefined(a)&&angular.isDefined(b)?(s.setHours(a),s.setMinutes(b),z>s||s>A?e(!0):l("h")):e(!0)},b.bind("blur",function(b){u.$setTouched(),r()?m():null===a.hours||""===a.hours?e(!0):!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=k(a.hours,!w)})}),a.updateMinutes=function(){var a=i(),b=h();u.$setDirty(),angular.isDefined(a)&&angular.isDefined(b)?(s.setHours(b),s.setMinutes(a),z>s||s>A?e(void 0,!0):l("m")):e(void 0,!0)},c.bind("blur",function(b){u.$setTouched(),r()?m():null===a.minutes?e(void 0,!0):!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=k(a.minutes)})}),a.updateSeconds=function(){var a=j();u.$setDirty(),angular.isDefined(a)?(s.setSeconds(a),l("s")):e(void 0,void 0,!0)},d.bind("blur",function(b){r()?m():!a.invalidSeconds&&a.seconds<10&&a.$apply(function(){a.seconds=k(a.seconds)})})},this.render=function(){var b=u.$viewValue;isNaN(b)?(u.$setValidity("time",!1),e.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(b&&(s=b),z>s||s>A?(u.$setValidity("time",!1),a.invalidHours=!0,a.invalidMinutes=!0):m(),n())},a.showSpinners=angular.isDefined(c.showSpinners)?a.$parent.$eval(c.showSpinners):g.showSpinners,a.incrementHours=function(){a.noIncrementHours()||o(60*x*60)},a.decrementHours=function(){a.noDecrementHours()||o(60*-x*60)},a.incrementMinutes=function(){a.noIncrementMinutes()||o(60*y)},a.decrementMinutes=function(){a.noDecrementMinutes()||o(60*-y)},a.incrementSeconds=function(){a.noIncrementSeconds()||o(C)},a.decrementSeconds=function(){a.noDecrementSeconds()||o(-C)},a.toggleMeridian=function(){var b=i(),c=h();a.noToggleMeridian()||(angular.isDefined(b)&&angular.isDefined(c)?o(720*(s.getHours()<12?60:-60)):a.meridian=a.meridian===v[0]?v[1]:v[0])},a.blur=function(){u.$setTouched()},a.$on("$destroy",function(){for(;t.length;)t.shift()()})}]).directive("uibTimepicker",["uibTimepickerConfig",function(a){return{require:["uibTimepicker","?^ngModel"],controller:"UibTimepickerController",controllerAs:"timepicker",replace:!0,scope:{},templateUrl:function(b,c){return c.templateUrl||a.templateUrl},link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.debounce","ui.bootstrap.position"]).factory("uibTypeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).controller("UibTypeaheadController",["$scope","$element","$attrs","$compile","$parse","$q","$timeout","$document","$window","$rootScope","$$debounce","$uibPosition","uibTypeaheadParser",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){N.moveInProgress||(N.moveInProgress=!0,N.$digest()),Y()}function o(){N.position=D?l.offset(b):l.position(b),N.position.top+=b.prop("offsetHeight")}var p,q,r=[9,13,27,38,40],s=200,t=a.$eval(c.typeaheadMinLength);t||0===t||(t=1),a.$watch(c.typeaheadMinLength,function(a){t=a||0===a?a:1});var u=a.$eval(c.typeaheadWaitMs)||0,v=a.$eval(c.typeaheadEditable)!==!1;a.$watch(c.typeaheadEditable,function(a){v=a!==!1});var w,x,y=e(c.typeaheadLoading).assign||angular.noop,z=e(c.typeaheadOnSelect),A=angular.isDefined(c.typeaheadSelectOnBlur)?a.$eval(c.typeaheadSelectOnBlur):!1,B=e(c.typeaheadNoResults).assign||angular.noop,C=c.typeaheadInputFormatter?e(c.typeaheadInputFormatter):void 0,D=c.typeaheadAppendToBody?a.$eval(c.typeaheadAppendToBody):!1,E=c.typeaheadAppendTo?a.$eval(c.typeaheadAppendTo):null,F=a.$eval(c.typeaheadFocusFirst)!==!1,G=c.typeaheadSelectOnExact?a.$eval(c.typeaheadSelectOnExact):!1,H=e(c.typeaheadIsOpen).assign||angular.noop,I=a.$eval(c.typeaheadShowHint)||!1,J=e(c.ngModel),K=e(c.ngModel+"($$$p)"),L=function(b,c){return angular.isFunction(J(a))&&q&&q.$options&&q.$options.getterSetter?K(b,{$$$p:c}):J.assign(b,c)},M=m.parse(c.uibTypeahead),N=a.$new(),O=a.$on("$destroy",function(){N.$destroy()});N.$on("$destroy",O);var P="typeahead-"+N.$id+"-"+Math.floor(1e4*Math.random());b.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":P});var Q,R;I&&(Q=angular.element("<div></div>"),Q.css("position","relative"),b.after(Q),R=b.clone(),R.attr("placeholder",""),R.attr("tabindex","-1"),R.val(""),R.css({position:"absolute",top:"0px",left:"0px","border-color":"transparent","box-shadow":"none",opacity:1,background:"none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)",color:"#999"}),b.css({position:"relative","vertical-align":"top","background-color":"transparent"}),Q.append(R),R.after(b));var S=angular.element("<div uib-typeahead-popup></div>");S.attr({id:P,matches:"matches",active:"activeIdx",select:"select(activeIdx, evt)","move-in-progress":"moveInProgress",query:"query",position:"position","assign-is-open":"assignIsOpen(isOpen)",debounce:"debounceUpdate"}),angular.isDefined(c.typeaheadTemplateUrl)&&S.attr("template-url",c.typeaheadTemplateUrl),angular.isDefined(c.typeaheadPopupTemplateUrl)&&S.attr("popup-template-url",c.typeaheadPopupTemplateUrl);var T=function(){I&&R.val("")},U=function(){N.matches=[],N.activeIdx=-1,b.attr("aria-expanded",!1),T()},V=function(a){return P+"-option-"+a};N.$watch("activeIdx",function(a){0>a?b.removeAttr("aria-activedescendant"):b.attr("aria-activedescendant",V(a))});var W=function(a,b){return N.matches.length>b&&a?a.toUpperCase()===N.matches[b].label.toUpperCase():!1},X=function(c,d){var e={$viewValue:c};y(a,!0),B(a,!1),f.when(M.source(a,e)).then(function(f){var g=c===p.$viewValue;if(g&&w)if(f&&f.length>0){N.activeIdx=F?0:-1,B(a,!1),N.matches.length=0;for(var h=0;h<f.length;h++)e[M.itemName]=f[h],N.matches.push({id:V(h),label:M.viewMapper(N,e),model:f[h]});if(N.query=c,o(),b.attr("aria-expanded",!0),G&&1===N.matches.length&&W(c,0)&&(angular.isNumber(N.debounceUpdate)||angular.isObject(N.debounceUpdate)?k(function(){N.select(0,d)},angular.isNumber(N.debounceUpdate)?N.debounceUpdate:N.debounceUpdate["default"]):N.select(0,d)),I){var i=N.matches[0].label;angular.isString(c)&&c.length>0&&i.slice(0,c.length).toUpperCase()===c.toUpperCase()?R.val(c+i.slice(c.length)):R.val("")}}else U(),B(a,!0);g&&y(a,!1)},function(){U(),y(a,!1),B(a,!0)})};D&&(angular.element(i).on("resize",n),h.find("body").on("scroll",n));var Y=k(function(){N.matches.length&&o(),N.moveInProgress=!1},s);N.moveInProgress=!1,N.query=void 0;var Z,$=function(a){Z=g(function(){X(a)},u)},_=function(){Z&&g.cancel(Z)};U(),N.assignIsOpen=function(b){H(a,b)},N.select=function(d,e){var f,h,i={};x=!0,i[M.itemName]=h=N.matches[d].model,f=M.modelMapper(a,i),L(a,f),p.$setValidity("editable",!0),p.$setValidity("parse",!0),z(a,{$item:h,$model:f,$label:M.viewMapper(a,i),$event:e}),U(),N.$eval(c.typeaheadFocusOnSelect)!==!1&&g(function(){b[0].focus()},0,!1)},b.on("keydown",function(b){if(0!==N.matches.length&&-1!==r.indexOf(b.which)){if(-1===N.activeIdx&&(9===b.which||13===b.which)||9===b.which&&b.shiftKey)return U(),void N.$digest();b.preventDefault();var c;switch(b.which){case 9:case 13:N.$apply(function(){angular.isNumber(N.debounceUpdate)||angular.isObject(N.debounceUpdate)?k(function(){N.select(N.activeIdx,b)},angular.isNumber(N.debounceUpdate)?N.debounceUpdate:N.debounceUpdate["default"]):N.select(N.activeIdx,b)});break;case 27:b.stopPropagation(),U(),a.$digest();break;case 38:N.activeIdx=(N.activeIdx>0?N.activeIdx:N.matches.length)-1,N.$digest(),c=S.find("li")[N.activeIdx],c.parentNode.scrollTop=c.offsetTop;break;case 40:N.activeIdx=(N.activeIdx+1)%N.matches.length,N.$digest(),c=S.find("li")[N.activeIdx],c.parentNode.scrollTop=c.offsetTop}}}),b.bind("focus",function(a){w=!0,0!==t||p.$viewValue||g(function(){X(p.$viewValue,a)},0)}),b.bind("blur",function(a){A&&N.matches.length&&-1!==N.activeIdx&&!x&&(x=!0,N.$apply(function(){angular.isObject(N.debounceUpdate)&&angular.isNumber(N.debounceUpdate.blur)?k(function(){N.select(N.activeIdx,a)},N.debounceUpdate.blur):N.select(N.activeIdx,a)})),!v&&p.$error.editable&&(p.$setViewValue(),p.$setValidity("editable",!0),p.$setValidity("parse",!0),b.val("")),w=!1,x=!1});var aa=function(c){b[0]!==c.target&&3!==c.which&&0!==N.matches.length&&(U(),j.$$phase||a.$digest())};h.on("click",aa),a.$on("$destroy",function(){h.off("click",aa),(D||E)&&ba.remove(),D&&(angular.element(i).off("resize",n),h.find("body").off("scroll",n)),S.remove(),I&&Q.remove()});var ba=d(S)(N);D?h.find("body").append(ba):E?angular.element(E).eq(0).append(ba):b.after(ba),this.init=function(b,c){p=b,q=c,N.debounceUpdate=p.$options&&e(p.$options.debounce)(a),p.$parsers.unshift(function(b){return w=!0,0===t||b&&b.length>=t?u>0?(_(),$(b)):X(b):(y(a,!1),_(),U()),v?b:b?void p.$setValidity("editable",!1):(p.$setValidity("editable",!0),null)}),p.$formatters.push(function(b){var c,d,e={};return v||p.$setValidity("editable",!0),C?(e.$model=b,C(a,e)):(e[M.itemName]=b,c=M.viewMapper(a,e),e[M.itemName]=void 0,d=M.viewMapper(a,e),c!==d?c:b)})}}]).directive("uibTypeahead",function(){return{controller:"UibTypeaheadController",require:["ngModel","^?ngModelOptions","uibTypeahead"],link:function(a,b,c,d){d[2].init(d[0],d[1])}}}).directive("uibTypeaheadPopup",["$$debounce",function(a){return{scope:{matches:"=",query:"=",active:"=",position:"&",moveInProgress:"=",select:"&",assignIsOpen:"&",debounce:"&"},replace:!0,templateUrl:function(a,b){return b.popupTemplateUrl||"uib/template/typeahead/typeahead-popup.html"},link:function(b,c,d){b.templateUrl=d.templateUrl,b.isOpen=function(){var a=b.matches.length>0;return b.assignIsOpen({isOpen:a}),a},b.isActive=function(a){return b.active===a},b.selectActive=function(a){b.active=a},b.selectMatch=function(c,d){var e=b.debounce();angular.isNumber(e)||angular.isObject(e)?a(function(){b.select({activeIdx:c,evt:d})},angular.isNumber(e)?e:e["default"]):b.select({activeIdx:c,evt:d})}}}}]).directive("uibTypeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"uib/template/typeahead/typeahead-match.html";a(g).then(function(a){var c=angular.element(a.trim());e.replaceWith(c),b(c)(d)})}}}]).filter("uibTypeaheadHighlight",["$sce","$injector","$log",function(a,b,c){function d(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function e(a){return/<.*>/g.test(a)}var f;return f=b.has("$sanitize"),function(b,g){return!f&&e(b)&&c.warn("Unsafe use of typeahead please use ngSanitize"),b=g?(""+b).replace(new RegExp(d(g),"gi"),"<strong>$&</strong>"):b,f||(b=a.trustAsHtml(b)),b}}]),angular.module("uib/template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("uib/template/accordion/accordion-group.html",'<div class="panel" ng-class="panelClass || \'panel-default\'">\n <div role="tab" id="{{::headingId}}" aria-selected="{{isOpen}}" class="panel-heading" ng-keypress="toggleOpen($event)">\n <h4 class="panel-title">\n <a role="button" data-toggle="collapse" href aria-expanded="{{isOpen}}" aria-controls="{{::panelId}}" tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><span uib-accordion-header ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n </h4>\n </div>\n <div id="{{::panelId}}" aria-labelledby="{{::headingId}}" aria-hidden="{{!isOpen}}" role="tabpanel" class="panel-collapse collapse" uib-collapse="!isOpen">\n <div class="panel-body" ng-transclude></div>\n </div>\n</div>\n')}]),angular.module("uib/template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("uib/template/accordion/accordion.html",'<div role="tablist" class="panel-group" ng-transclude></div>')}]),angular.module("uib/template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("uib/template/alert/alert.html",'<div class="alert" ng-class="[\'alert-\' + (type || \'warning\'), closeable ? \'alert-dismissible\' : null]" role="alert">\n <button ng-show="closeable" type="button" class="close" ng-click="close({$event: $event})">\n <span aria-hidden="true">&times;</span>\n <span class="sr-only">Close</span>\n </button>\n <div ng-transclude></div>\n</div>\n')}]),angular.module("uib/template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("uib/template/carousel/carousel.html",'<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n <div class="carousel-inner" ng-transclude></div>\n <a role="button" href class="left carousel-control" ng-click="prev()" ng-class="{ disabled: isPrevDisabled() }" ng-show="slides.length > 1">\n <span aria-hidden="true" class="glyphicon glyphicon-chevron-left"></span>\n <span class="sr-only">previous</span>\n </a>\n <a role="button" href class="right carousel-control" ng-click="next()" ng-class="{ disabled: isNextDisabled() }" ng-show="slides.length > 1">\n <span aria-hidden="true" class="glyphicon glyphicon-chevron-right"></span>\n <span class="sr-only">next</span>\n </a>\n <ol class="carousel-indicators" ng-show="slides.length > 1">\n <li ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{ active: isActive(slide) }" ng-click="select(slide)">\n <span class="sr-only">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if="isActive(slide)">, currently active</span></span>\n </li>\n </ol>\n</div>\n');
1768 1768 }]),angular.module("uib/template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("uib/template/carousel/slide.html",'<div ng-class="{\n \'active\': active\n }" class="item text-center" ng-transclude></div>\n')}]),angular.module("uib/template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("uib/template/datepicker/datepicker.html",'<div class="uib-datepicker" ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)">\n <uib-daypicker ng-switch-when="day" tabindex="0"></uib-daypicker>\n <uib-monthpicker ng-switch-when="month" tabindex="0"></uib-monthpicker>\n <uib-yearpicker ng-switch-when="year" tabindex="0"></uib-yearpicker>\n</div>\n')}]),angular.module("uib/template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("uib/template/datepicker/day.html",'<table class="uib-daypicker" role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th colspan="{{::5 + showWeeks}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n <tr>\n <th ng-if="showWeeks" class="text-center"></th>\n <th ng-repeat="label in ::labels track by $index" class="text-center"><small aria-label="{{::label.full}}">{{::label.abbr}}</small></th>\n </tr>\n </thead>\n <tbody>\n <tr class="uib-weeks" ng-repeat="row in rows track by $index">\n <td ng-if="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>\n <td ng-repeat="dt in row" class="uib-day text-center" role="gridcell"\n id="{{::dt.uid}}"\n ng-class="::dt.customClass">\n <button type="button" class="btn btn-default btn-sm"\n uib-is-class="\n \'btn-info\' for selectedDt,\n \'active\' for activeDt\n on dt"\n ng-click="select(dt.date)"\n ng-disabled="::dt.disabled"\n tabindex="-1"><span ng-class="::{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("uib/template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("uib/template/datepicker/month.html",'<table class="uib-monthpicker" role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n </thead>\n <tbody>\n <tr class="uib-months" ng-repeat="row in rows track by $index">\n <td ng-repeat="dt in row" class="uib-month text-center" role="gridcell"\n id="{{::dt.uid}}"\n ng-class="::dt.customClass">\n <button type="button" class="btn btn-default"\n uib-is-class="\n \'btn-info\' for selectedDt,\n \'active\' for activeDt\n on dt"\n ng-click="select(dt.date)"\n ng-disabled="::dt.disabled"\n tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("uib/template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("uib/template/datepicker/year.html",'<table class="uib-yearpicker" role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n <thead>\n <tr>\n <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n <th colspan="{{::columns - 2}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n </tr>\n </thead>\n <tbody>\n <tr class="uib-years" ng-repeat="row in rows track by $index">\n <td ng-repeat="dt in row" class="uib-year text-center" role="gridcell"\n id="{{::dt.uid}}"\n ng-class="::dt.customClass">\n <button type="button" class="btn btn-default"\n uib-is-class="\n \'btn-info\' for selectedDt,\n \'active\' for activeDt\n on dt"\n ng-click="select(dt.date)"\n ng-disabled="::dt.disabled"\n tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n </td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("uib/template/datepickerPopup/popup.html",[]).run(["$templateCache",function(a){a.put("uib/template/datepickerPopup/popup.html",'<div>\n <ul class="uib-datepicker-popup dropdown-menu uib-position-measure" dropdown-nested ng-if="isOpen" ng-keydown="keydown($event)" ng-click="$event.stopPropagation()">\n <li ng-transclude></li>\n <li ng-if="showButtonBar" class="uib-button-bar">\n <span class="btn-group pull-left">\n <button type="button" class="btn btn-sm btn-info uib-datepicker-current" ng-click="select(\'today\', $event)" ng-disabled="isDisabled(\'today\')">{{ getText(\'current\') }}</button>\n <button type="button" class="btn btn-sm btn-danger uib-clear" ng-click="select(null, $event)">{{ getText(\'clear\') }}</button>\n </span>\n <button type="button" class="btn btn-sm btn-success pull-right uib-close" ng-click="close($event)">{{ getText(\'close\') }}</button>\n </li>\n </ul>\n</div>\n')}]),angular.module("uib/template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("uib/template/modal/backdrop.html",'<div class="modal-backdrop"\n uib-modal-animation-class="fade"\n modal-in-class="in"\n ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n></div>\n')}]),angular.module("uib/template/modal/window.html",[]).run(["$templateCache",function(a){a.put("uib/template/modal/window.html",'<div modal-render="{{$isRendered}}" tabindex="-1" role="dialog" class="modal"\n uib-modal-animation-class="fade"\n modal-in-class="in"\n ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}">\n <div class="modal-dialog {{size ? \'modal-\' + size : \'\'}}"><div class="modal-content" uib-modal-transclude></div></div>\n</div>\n')}]),angular.module("uib/template/pager/pager.html",[]).run(["$templateCache",function(a){a.put("uib/template/pager/pager.html",'<ul class="pager">\n <li ng-class="{disabled: noPrevious()||ngDisabled, previous: align}"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n <li ng-class="{disabled: noNext()||ngDisabled, next: align}"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n</ul>\n')}]),angular.module("uib/template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("uib/template/pagination/pagination.html",'<ul class="pagination">\n <li ng-if="::boundaryLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-first"><a href ng-click="selectPage(1, $event)">{{::getText(\'first\')}}</a></li>\n <li ng-if="::directionLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-prev"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n <li ng-repeat="page in pages track by $index" ng-class="{active: page.active,disabled: ngDisabled&&!page.active}" class="pagination-page"><a href ng-click="selectPage(page.number, $event)">{{page.text}}</a></li>\n <li ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n <li ng-if="::boundaryLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-last"><a href ng-click="selectPage(totalPages, $event)">{{::getText(\'last\')}}</a></li>\n</ul>\n')}]),angular.module("uib/template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(a){a.put("uib/template/tooltip/tooltip-html-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner" ng-bind-html="contentExp()"></div>\n</div>\n')}]),angular.module("uib/template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("uib/template/tooltip/tooltip-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner" ng-bind="content"></div>\n</div>\n')}]),angular.module("uib/template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(a){a.put("uib/template/tooltip/tooltip-template-popup.html",'<div class="tooltip"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="tooltip-arrow"></div>\n <div class="tooltip-inner"\n uib-tooltip-template-transclude="contentExp()"\n tooltip-template-transclude-scope="originScope()"></div>\n</div>\n')}]),angular.module("uib/template/popover/popover-html.html",[]).run(["$templateCache",function(a){a.put("uib/template/popover/popover-html.html",'<div class="popover"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n <div class="popover-content" ng-bind-html="contentExp()"></div>\n </div>\n</div>\n')}]),angular.module("uib/template/popover/popover-template.html",[]).run(["$templateCache",function(a){a.put("uib/template/popover/popover-template.html",'<div class="popover"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n <div class="popover-content"\n uib-tooltip-template-transclude="contentExp()"\n tooltip-template-transclude-scope="originScope()"></div>\n </div>\n</div>\n')}]),angular.module("uib/template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("uib/template/popover/popover.html",'<div class="popover"\n tooltip-animation-class="fade"\n uib-tooltip-classes\n ng-class="{ in: isOpen() }">\n <div class="arrow"></div>\n\n <div class="popover-inner">\n <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n <div class="popover-content" ng-bind="content"></div>\n </div>\n</div>\n')}]),angular.module("uib/template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("uib/template/progressbar/bar.html",'<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" ng-transclude></div>\n')}]),angular.module("uib/template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("uib/template/progressbar/progress.html",'<div class="progress" ng-transclude aria-labelledby="{{::title}}"></div>')}]),angular.module("uib/template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("uib/template/progressbar/progressbar.html",'<div class="progress">\n <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" ng-transclude></div>\n</div>\n')}]),angular.module("uib/template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("uib/template/rating/rating.html",'<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}" aria-valuetext="{{title}}">\n <span ng-repeat-start="r in range track by $index" class="sr-only">({{ $index < value ? \'*\' : \' \' }})</span>\n <i ng-repeat-end ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')" ng-attr-title="{{r.title}}"></i>\n</span>\n')}]),angular.module("uib/template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("uib/template/tabs/tab.html",'<li ng-class="[{active: active, disabled: disabled}, classes]" class="uib-tab nav-item">\n <a href ng-click="select($event)" class="nav-link" uib-tab-heading-transclude>{{heading}}</a>\n</li>\n')}]),angular.module("uib/template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("uib/template/tabs/tabset.html",'<div>\n <ul class="nav nav-{{tabset.type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n <div class="tab-content">\n <div class="tab-pane"\n ng-repeat="tab in tabset.tabs"\n ng-class="{active: tabset.active === tab.index}"\n uib-tab-content-transclude="tab">\n </div>\n </div>\n</div>\n')}]),angular.module("uib/template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("uib/template/timepicker/timepicker.html",'<table class="uib-timepicker">\n <tbody>\n <tr class="text-center" ng-show="::showSpinners">\n <td class="uib-increment hours"><a ng-click="incrementHours()" ng-class="{disabled: noIncrementHours()}" class="btn btn-link" ng-disabled="noIncrementHours()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n <td>&nbsp;</td>\n <td class="uib-increment minutes"><a ng-click="incrementMinutes()" ng-class="{disabled: noIncrementMinutes()}" class="btn btn-link" ng-disabled="noIncrementMinutes()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n <td ng-show="showSeconds">&nbsp;</td>\n <td ng-show="showSeconds" class="uib-increment seconds"><a ng-click="incrementSeconds()" ng-class="{disabled: noIncrementSeconds()}" class="btn btn-link" ng-disabled="noIncrementSeconds()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n <td ng-show="showMeridian"></td>\n </tr>\n <tr>\n <td class="form-group uib-time hours" ng-class="{\'has-error\': invalidHours}">\n <input type="text" placeholder="HH" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementHours()" ng-blur="blur()">\n </td>\n <td class="uib-separator">:</td>\n <td class="form-group uib-time minutes" ng-class="{\'has-error\': invalidMinutes}">\n <input type="text" placeholder="MM" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementMinutes()" ng-blur="blur()">\n </td>\n <td ng-show="showSeconds" class="uib-separator">:</td>\n <td class="form-group uib-time seconds" ng-class="{\'has-error\': invalidSeconds}" ng-show="showSeconds">\n <input type="text" placeholder="SS" ng-model="seconds" ng-change="updateSeconds()" class="form-control text-center" ng-readonly="readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementSeconds()" ng-blur="blur()">\n </td>\n <td ng-show="showMeridian" class="uib-time am-pm"><button type="button" ng-class="{disabled: noToggleMeridian()}" class="btn btn-default text-center" ng-click="toggleMeridian()" ng-disabled="noToggleMeridian()" tabindex="{{::tabindex}}">{{meridian}}</button></td>\n </tr>\n <tr class="text-center" ng-show="::showSpinners">\n <td class="uib-decrement hours"><a ng-click="decrementHours()" ng-class="{disabled: noDecrementHours()}" class="btn btn-link" ng-disabled="noDecrementHours()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n <td>&nbsp;</td>\n <td class="uib-decrement minutes"><a ng-click="decrementMinutes()" ng-class="{disabled: noDecrementMinutes()}" class="btn btn-link" ng-disabled="noDecrementMinutes()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n <td ng-show="showSeconds">&nbsp;</td>\n <td ng-show="showSeconds" class="uib-decrement seconds"><a ng-click="decrementSeconds()" ng-class="{disabled: noDecrementSeconds()}" class="btn btn-link" ng-disabled="noDecrementSeconds()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n <td ng-show="showMeridian"></td>\n </tr>\n </tbody>\n</table>\n')}]),angular.module("uib/template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("uib/template/typeahead/typeahead-match.html",'<a href\n tabindex="-1"\n ng-bind-html="match.label | uibTypeaheadHighlight:query"\n ng-attr-title="{{match.label}}"></a>\n')}]),angular.module("uib/template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("uib/template/typeahead/typeahead-popup.html",'<ul class="dropdown-menu" ng-show="isOpen() && !moveInProgress" ng-style="{top: position().top+\'px\', left: position().left+\'px\'}" role="listbox" aria-hidden="{{!isOpen()}}">\n <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index, $event)" role="option" id="{{::match.id}}">\n <div uib-typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n </li>\n</ul>\n')}]),angular.module("ui.bootstrap.carousel").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibCarouselCss&&angular.element(document).find("head").prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'),angular.$$uibCarouselCss=!0}),angular.module("ui.bootstrap.datepicker").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibDatepickerCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-datepicker .uib-title{width:100%;}.uib-day button,.uib-month button,.uib-year button{min-width:100%;}.uib-left,.uib-right{width:100%}</style>'),angular.$$uibDatepickerCss=!0}),angular.module("ui.bootstrap.position").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibPositionCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-position-measure{display:block !important;visibility:hidden !important;position:absolute !important;top:-9999px !important;left:-9999px !important;}.uib-position-scrollbar-measure{position:absolute !important;top:-9999px !important;width:50px !important;height:50px !important;overflow:scroll !important;}.uib-position-body-scrollbar-measure{overflow:scroll !important;}</style>'),angular.$$uibPositionCss=!0}),angular.module("ui.bootstrap.datepickerPopup").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibDatepickerpopupCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-datepicker-popup.dropdown-menu{display:block;float:none;margin:0;}.uib-button-bar{padding:10px 9px 2px;}</style>'),angular.$$uibDatepickerpopupCss=!0}),angular.module("ui.bootstrap.tooltip").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTooltipCss&&angular.element(document).find("head").prepend('<style type="text/css">[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,[uib-popover-popup].popover.top-left > .arrow,[uib-popover-popup].popover.top-right > .arrow,[uib-popover-popup].popover.bottom-left > .arrow,[uib-popover-popup].popover.bottom-right > .arrow,[uib-popover-popup].popover.left-top > .arrow,[uib-popover-popup].popover.left-bottom > .arrow,[uib-popover-popup].popover.right-top > .arrow,[uib-popover-popup].popover.right-bottom > .arrow,[uib-popover-html-popup].popover.top-left > .arrow,[uib-popover-html-popup].popover.top-right > .arrow,[uib-popover-html-popup].popover.bottom-left > .arrow,[uib-popover-html-popup].popover.bottom-right > .arrow,[uib-popover-html-popup].popover.left-top > .arrow,[uib-popover-html-popup].popover.left-bottom > .arrow,[uib-popover-html-popup].popover.right-top > .arrow,[uib-popover-html-popup].popover.right-bottom > .arrow,[uib-popover-template-popup].popover.top-left > .arrow,[uib-popover-template-popup].popover.top-right > .arrow,[uib-popover-template-popup].popover.bottom-left > .arrow,[uib-popover-template-popup].popover.bottom-right > .arrow,[uib-popover-template-popup].popover.left-top > .arrow,[uib-popover-template-popup].popover.left-bottom > .arrow,[uib-popover-template-popup].popover.right-top > .arrow,[uib-popover-template-popup].popover.right-bottom > .arrow{top:auto;bottom:auto;left:auto;right:auto;margin:0;}[uib-popover-popup].popover,[uib-popover-html-popup].popover,[uib-popover-template-popup].popover{display:block !important;}</style>'),angular.$$uibTooltipCss=!0}),angular.module("ui.bootstrap.timepicker").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTimepickerCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-time input{width:50px;}</style>'),angular.$$uibTimepickerCss=!0}),angular.module("ui.bootstrap.typeahead").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTypeaheadCss&&angular.element(document).find("head").prepend('<style type="text/css">[uib-typeahead-popup].dropdown-menu{display:block;}</style>'),angular.$$uibTypeaheadCss=!0});
1769 1769 ;/*!
1770 1770 * State-based routing for AngularJS
1771 1771 * @version v1.0.0-beta.3
1772 1772 * @link https://ui-router.github.io
1773 1773 * @license MIT License, http://www.opensource.org/licenses/MIT
1774 1774 */
1775 1775 !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("angular")):"function"==typeof define&&define.amd?define("angular-ui-router",["angular"],e):"object"==typeof exports?exports["angular-ui-router"]=e(require("angular")):t["angular-ui-router"]=e(t.angular)}(this,function(t){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(1)),n(r(53)),n(r(55)),n(r(58)),r(60),r(61),r(62),r(63),Object.defineProperty(e,"__esModule",{value:!0}),e["default"]="ui.router"},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(2)),n(r(46)),n(r(47)),n(r(48)),n(r(49)),n(r(50)),n(r(51)),n(r(52)),n(r(44));var i=r(25);e.UIRouter=i.UIRouter},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(3)),n(r(6)),n(r(7)),n(r(5)),n(r(4)),n(r(8)),n(r(9)),n(r(12))},function(t,e,r){"use strict";function n(t,e,r,n){return void 0===n&&(n=Object.keys(t)),n.filter(function(e){return"function"==typeof t[e]}).forEach(function(n){return e[n]=t[n].bind(r)})}function i(t){void 0===t&&(t={});for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=o.apply(null,[{}].concat(r));return e.extend({},i,c(t||{},Object.keys(i)))}function o(t){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return e.forEach(r,function(r){e.forEach(r,function(e,r){t.hasOwnProperty(r)||(t[r]=e)})}),t}function a(t,e){var r=[];for(var n in t.path){if(t.path[n]!==e.path[n])break;r.push(t.path[n])}return r}function s(t,e,r){void 0===r&&(r=Object.keys(t));for(var n=0;n<r.length;n++){var i=r[n];if(t[i]!=e[i])return!1}return!0}function u(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var i={};for(var o in e)t(r,o)&&(i[o]=e[o]);return i}function c(t){return u.apply(null,[e.inArray].concat(T(arguments)))}function f(t){var r=function(t,r){return!e.inArray(t,r)};return u.apply(null,[r].concat(T(arguments)))}function l(t,e){return v(t,P.prop(e))}function p(t,r){var n=k.isArray(t),i=n?[]:{},o=n?function(t){return i.push(t)}:function(t,e){return i[e]=t};return e.forEach(t,function(t,e){r(t,e)&&o(t,e)}),i}function h(t,r){var n;return e.forEach(t,function(t,e){n||r(t,e)&&(n=t)}),n}function v(t,r){var n=k.isArray(t)?[]:{};return e.forEach(t,function(t,e){return n[e]=r(t,e)}),n}function d(t,e){return t.push(e),t}function m(t,e){return void 0===e&&(e="assert failure"),function(r){if(!t(r))throw new Error(k.isFunction(e)?e(r):e);return!0}}function g(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];if(0===t.length)return[];var r=t.reduce(function(t,e){return Math.min(e.length,t)},9007199254740991);return Array.apply(null,Array(r)).map(function(e,r){return t.map(function(t){return t[r]})})}function y(t,e){var r,n;if(k.isArray(e)&&(r=e[0],n=e[1]),!k.isString(r))throw new Error("invalid parameters to applyPairs");return t[r]=n,t}function w(t){return t.length&&t[t.length-1]||void 0}function b(t,r){return r&&Object.keys(r).forEach(function(t){return delete r[t]}),r||(r={}),e.extend(r,t)}function $(t,e,r){return k.isArray(t)?t.forEach(e,r):void Object.keys(t).forEach(function(r){return e(t[r],r)})}function R(t,e){return Object.keys(e).forEach(function(r){return t[r]=e[r]}),t}function S(t){return T(arguments,1).filter(e.identity).reduce(R,t)}function E(t,e){if(t===e)return!0;if(null===t||null===e)return!1;if(t!==t&&e!==e)return!0;var r=typeof t,n=typeof e;if(r!==n||"object"!==r)return!1;var i=[t,e];if(P.all(k.isArray)(i))return x(t,e);if(P.all(k.isDate)(i))return t.getTime()===e.getTime();if(P.all(k.isRegExp)(i))return t.toString()===e.toString();if(P.all(k.isFunction)(i))return!0;var o=[k.isFunction,k.isArray,k.isDate,k.isRegExp];if(o.map(P.any).reduce(function(t,e){return t||!!e(i)},!1))return!1;var a,s={};for(a in t){if(!E(t[a],e[a]))return!1;s[a]=!0}for(a in e)if(!s[a])return!1;return!0}function x(t,e){return t.length===e.length&&g(t,e).reduce(function(t,e){return t&&E(e[0],e[1])},!0)}var k=r(4),P=r(5),_=r(6),C="undefined"==typeof window?{}:window,O=C.angular||{};e.fromJson=O.fromJson||JSON.parse.bind(JSON),e.toJson=O.toJson||JSON.stringify.bind(JSON),e.copy=O.copy||b,e.forEach=O.forEach||$,e.extend=O.extend||S,e.equals=O.equals||E,e.identity=function(t){return t},e.noop=function(){},e.bindFunctions=n,e.inherit=function(t,r){return e.extend(new(e.extend(function(){},{prototype:t})),r)};var T=function(t,e){return void 0===e&&(e=0),Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(t,e))};e.inArray=function(t,e){return t.indexOf(e)!==-1},e.removeFrom=P.curry(function(t,e){var r=t.indexOf(e);return r>=0&&t.splice(r,1),t}),e.defaults=i,e.merge=o,e.mergeR=function(t,r){return e.extend(t,r)},e.ancestors=a,e.equalForKeys=s,e.pick=c,e.omit=f,e.pluck=l,e.filter=p,e.find=h,e.mapObj=v,e.map=v,e.values=function(t){return Object.keys(t).map(function(e){return t[e]})},e.allTrueR=function(t,e){return t&&e},e.anyTrueR=function(t,e){return t||e},e.unnestR=function(t,e){return t.concat(e)},e.flattenR=function(t,r){return k.isArray(r)?t.concat(r.reduce(e.flattenR,[])):d(t,r)},e.pushR=d,e.uniqR=function(t,r){return e.inArray(t,r)?t:d(t,r)},e.unnest=function(t){return t.reduce(e.unnestR,[])},e.flatten=function(t){return t.reduce(e.flattenR,[])},e.assertPredicate=m,e.pairs=function(t){return Object.keys(t).map(function(e){return[e,t[e]]})},e.arrayTuples=g,e.applyPairs=y,e.tail=w,e.silenceUncaughtInPromise=function(t){return t["catch"](function(t){return 0})&&t},e.silentRejection=function(t){return e.silenceUncaughtInPromise(_.services.$q.reject(t))}},function(t,e,r){"use strict";function n(t){if(e.isArray(t)&&t.length){var r=t.slice(0,-1),n=t.slice(-1);return!(r.filter(i.not(e.isString)).length||n.filter(i.not(e.isFunction)).length)}return e.isFunction(t)}var i=r(5),o=Object.prototype.toString,a=function(t){return function(e){return typeof e===t}};e.isUndefined=a("undefined"),e.isDefined=i.not(e.isUndefined),e.isNull=function(t){return null===t},e.isFunction=a("function"),e.isNumber=a("number"),e.isString=a("string"),e.isObject=function(t){return null!==t&&"object"==typeof t},e.isArray=Array.isArray,e.isDate=function(t){return"[object Date]"===o.call(t)},e.isRegExp=function(t){return"[object RegExp]"===o.call(t)},e.isInjectable=n,e.isPromise=i.and(e.isObject,i.pipe(i.prop("then"),e.isFunction))},function(t,e){"use strict";function r(t){function e(r){return r.length>=n?t.apply(null,r):function(){return e(r.concat([].slice.apply(arguments)))}}var r=[].slice.apply(arguments,[1]),n=t.length;return e(r)}function n(){var t=arguments,e=t.length-1;return function(){for(var r=e,n=t[e].apply(this,arguments);r--;)n=t[r].call(this,n);return n}}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return n.apply(null,[].slice.call(arguments).reverse())}function o(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n-0]=arguments[n];return t.apply(null,r)&&e.apply(null,r)}}function a(t,e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n-0]=arguments[n];return t.apply(null,r)||e.apply(null,r)}}function s(t,e){return function(r){return r[t].apply(r,e)}}function u(t){return function(e){for(var r=0;r<t.length;r++)if(t[r][0](e))return t[r][1](e)}}e.curry=r,e.compose=n,e.pipe=i,e.prop=function(t){return function(e){return e&&e[t]}},e.propEq=r(function(t,e,r){return r&&r[t]===e}),e.parse=function(t){return i.apply(null,t.split(".").map(e.prop))},e.not=function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r-0]=arguments[r];return!t.apply(null,e)}},e.and=o,e.or=a,e.all=function(t){return function(e){return e.reduce(function(e,r){return e&&!!t(r)},!0)}},e.any=function(t){return function(e){return e.reduce(function(e,r){return e||!!t(r)},!1)}},e.is=function(t){return function(e){return null!=e&&e.constructor===t||e instanceof t}},e.eq=function(t){return function(e){return t===e}},e.val=function(t){return function(){return t}},e.invoke=s,e.pattern=u},function(t,e){"use strict";var r=function(t){return function(){throw new Error(t+"(): No coreservices implementation for UI-Router is loaded. You should include one of: ['angular1.js']")}},n={$q:void 0,$injector:void 0,location:{},locationConfig:{},template:{}};e.services=n,["setUrl","path","search","hash","onChange"].forEach(function(t){return n.location[t]=r(t)}),["port","protocol","host","baseHref","html5Mode","hashPrefix"].forEach(function(t){return n.locationConfig[t]=r(t)})},function(t,e){"use strict";var r=function(){function t(t){this.text=t,this.glob=t.split(".");var e=this.text.split(".").map(function(t){return"**"===t?"(?:|(?:\\.[^.]*)*)":"*"===t?"\\.[^.]*":"\\."+t}).join("");this.regexp=new RegExp("^"+e+"$")}return t.prototype.matches=function(t){return this.regexp.test("."+t)},t.is=function(t){return t.indexOf("*")>-1},t.fromString=function(e){return this.is(e)?new t(e):null},t}();e.Glob=r},function(t,e){"use strict";var r=function(){function t(t,e){void 0===t&&(t=[]),void 0===e&&(e=null),this._items=t,this._limit=e}return t.prototype.enqueue=function(t){var e=this._items;return e.push(t),this._limit&&e.length>this._limit&&e.shift(),t},t.prototype.dequeue=function(){if(this.size())return this._items.splice(0,1)[0]},t.prototype.clear=function(){var t=this._items;return this._items=[],t},t.prototype.size=function(){return this._items.length},t.prototype.remove=function(t){var e=this._items.indexOf(t);return e>-1&&this._items.splice(e,1)[0]},t.prototype.peekTail=function(){return this._items[this._items.length-1]},t.prototype.peekHead=function(){if(this.size())return this._items[0]},t}();e.Queue=r},function(t,e,r){"use strict";function n(t,e){return e.length<=t?e:e.substr(0,t-3)+"..."}function i(t,e){for(;e.length<t;)e+=" ";return e}function o(t){return t.replace(/^([A-Z])/,function(t){return t.toLowerCase()}).replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}function a(t){var e=s(t),r=e.match(/^(function [^ ]+\([^)]*\))/),n=r?r[1]:e,i=t.name||"";return i&&n.match(/function \(/)?"function "+i+n.substr(9):n}function s(t){var e=c.isArray(t)?t.slice(-1)[0]:t;return e&&e.toString()||"undefined"}function u(t){function e(t){if(c.isObject(t)){if(r.indexOf(t)!==-1)return"[circular ref]";r.push(t)}return m(t)}var r=[];return JSON.stringify(t,function(t,r){return e(r)}).replace(/\\"/g,'"')}var c=r(4),f=r(10),l=r(3),p=r(5),h=r(11),v=r(19);e.maxLength=n,e.padString=i,e.kebobString=o,e.functionToString=a,e.fnToString=s;var d=null,m=function(t){var e=f.Rejection.isTransitionRejectionPromise;return(d=d||p.pattern([[p.not(c.isDefined),p.val("undefined")],[c.isNull,p.val("null")],[c.isPromise,p.val("[Promise]")],[e,function(t){return t._transitionRejection.toString()}],[p.is(f.Rejection),p.invoke("toString")],[p.is(h.Transition),p.invoke("toString")],[p.is(v.Resolvable),p.invoke("toString")],[c.isInjectable,a],[p.val(!0),l.identity]]))(t)};e.stringify=u,e.beforeAfterSubstr=function(t){return function(e){if(!e)return["",""];var r=e.indexOf(t);return r===-1?[e,""]:[e.substr(0,r),e.substr(r+1)]}}},function(t,e,r){"use strict";var n=r(3),i=r(9);!function(t){t[t.SUPERSEDED=2]="SUPERSEDED",t[t.ABORTED=3]="ABORTED",t[t.INVALID=4]="INVALID",t[t.IGNORED=5]="IGNORED",t[t.ERROR=6]="ERROR"}(e.RejectType||(e.RejectType={}));var o=e.RejectType,a=function(){function t(t,e,r){this.type=t,this.message=e,this.detail=r}return t.prototype.toString=function(){var t=function(t){return t&&t.toString!==Object.prototype.toString?t.toString():i.stringify(t)},e=this.type,r=this.message,n=t(this.detail);return"TransitionRejection(type: "+e+", message: "+r+", detail: "+n+")"},t.prototype.toPromise=function(){return n.extend(n.silentRejection(this),{_transitionRejection:this})},t.isTransitionRejectionPromise=function(e){return e&&"function"==typeof e.then&&e._transitionRejection instanceof t},t.superseded=function(e,r){var n="The transition has been superseded by a different transition",i=new t(o.SUPERSEDED,n,e);return r&&r.redirected&&(i.redirected=!0),i},t.redirected=function(e){return t.superseded(e,{redirected:!0})},t.invalid=function(e){var r="This transition is invalid";return new t(o.INVALID,r,e)},t.ignored=function(e){var r="The transition was ignored";return new t(o.IGNORED,r,e)},t.aborted=function(e){var r="The transition has been aborted";return new t(o.ABORTED,r,e)},t.errored=function(e){var r="The transition errored";return new t(o.ERROR,r,e)},t}();e.Rejection=a},function(t,e,r){"use strict";var n=r(9),i=r(12),o=r(6),a=r(3),s=r(4),u=r(5),c=r(13),f=r(15),l=r(16),p=r(21),h=r(20),v=r(14),d=r(22),m=r(19),g=r(10),y=r(17),w=r(25),b=0,$=u.prop("self"),R=function(){function t(e,r,n){var i=this;if(this._deferred=o.services.$q.defer(),this.promise=this._deferred.promise,this.treeChanges=function(){return i._treeChanges},this.isActive=function(){return i===i._options.current()},this.router=n,this._targetState=r,!r.valid())throw new Error(r.error());f.HookRegistry.mixin(new f.HookRegistry,this),this._options=a.extend({current:u.val(this)},r.options()),this.$id=b++;var s=h.PathFactory.buildToPath(e,r);this._treeChanges=h.PathFactory.treeChanges(e,s,this._options.reloadState);var c=this._treeChanges.entering.map(function(t){return t.state});h.PathFactory.applyViewConfigs(n.transitionService.$view,this._treeChanges.to,c);var l=[new m.Resolvable(w.UIRouter,function(){return n},[],(void 0),n),new m.Resolvable(t,function(){return i},[],(void 0),this),new m.Resolvable("$transition$",function(){return i},[],(void 0),this),new m.Resolvable("$stateParams",function(){return i.params()},[],(void 0),this.params())],p=this._treeChanges.to[0],v=new y.ResolveContext(this._treeChanges.to);v.addResolvables(l,p.state)}return t.prototype.onBefore=function(t,e,r){throw""},t.prototype.onStart=function(t,e,r){throw""},t.prototype.onExit=function(t,e,r){throw""},t.prototype.onRetain=function(t,e,r){throw""},t.prototype.onEnter=function(t,e,r){throw""},t.prototype.onFinish=function(t,e,r){throw""},t.prototype.onSuccess=function(t,e,r){throw""},t.prototype.onError=function(t,e,r){throw""},t.prototype.$from=function(){return a.tail(this._treeChanges.from).state},t.prototype.$to=function(){return a.tail(this._treeChanges.to).state},t.prototype.from=function(){return this.$from().self},t.prototype.to=function(){return this.$to().self},t.prototype.targetState=function(){return this._targetState},t.prototype.is=function(e){return e instanceof t?this.is({to:e.$to().name,from:e.$from().name}):!(e.to&&!f.matchState(this.$to(),e.to)||e.from&&!f.matchState(this.$from(),e.from))},t.prototype.params=function(t){return void 0===t&&(t="to"),this._treeChanges[t].map(u.prop("paramValues")).reduce(a.mergeR,{})},t.prototype.injector=function(t){var e=this.treeChanges().to;return t&&(e=h.PathFactory.subPath(e,function(e){return e.state===t||e.state.name===t})),new y.ResolveContext(e).injector()},t.prototype.getResolveTokens=function(){return new y.ResolveContext(this._treeChanges.to).getTokens()},t.prototype.getResolveValue=function(t){var e=new y.ResolveContext(this._treeChanges.to),r=function(t){var r=e.getResolvable(t);if(void 0===r)throw new Error("Dependency Injection token not found: "+n.stringify(t));return r.data};return s.isArray(t)?t.map(r):r(t)},t.prototype.getResolvable=function(t){return new y.ResolveContext(this._treeChanges.to).getResolvable(t)},t.prototype.addResolvable=function(t,e){void 0===e&&(e="");var r="string"==typeof e?e:e.name,n=this._treeChanges.to,i=a.find(n,function(t){return t.state.name===r}),o=new y.ResolveContext(n);o.addResolvables([t],i.state)},t.prototype.redirectedFrom=function(){return this._options.redirectedFrom||null},t.prototype.options=function(){return this._options},t.prototype.entering=function(){return a.map(this._treeChanges.entering,u.prop("state")).map($)},t.prototype.exiting=function(){return a.map(this._treeChanges.exiting,u.prop("state")).map($).reverse()},t.prototype.retained=function(){return a.map(this._treeChanges.retained,u.prop("state")).map($)},t.prototype.views=function(t,e){void 0===t&&(t="entering");var r=this._treeChanges[t];return r=e?r.filter(u.propEq("state",e)):r,r.map(u.prop("views")).filter(a.identity).reduce(a.unnestR,[])},t.prototype.redirect=function(t){var e=a.extend({},this.options(),t.options(),{redirectedFrom:this,source:"redirect"});t=new v.TargetState(t.identifier(),t.$state(),t.params(),e);var r=this.router.transitionService.create(this._treeChanges.from,t),n=this.treeChanges().entering,i=r.treeChanges().entering,o=function(t){return function(e){return t&&e.state.includes[t.name]}},s=p.PathNode.matching(i,n).filter(u.not(o(t.options().reloadState)));return s.forEach(function(t,e){t.resolvables=n[e].resolvables}),r},t.prototype._changedParams=function(){var t=this._treeChanges,e=t.to,r=t.from;if(!this._options.reload&&a.tail(e).state===a.tail(r).state){var n=e.map(function(t){return t.paramSchema}),i=[e,r].map(function(t){return t.map(function(t){return t.paramValues})}),o=i[0],s=i[1],u=a.arrayTuples(n,o,s);return u.map(function(t){var e=t[0],r=t[1],n=t[2];return d.Param.changed(e,r,n)}).reduce(a.unnestR,[])}},t.prototype.dynamic=function(){var t=this._changedParams();return!!t&&t.map(function(t){return t.dynamic}).reduce(a.anyTrueR,!1)},t.prototype.ignored=function(){var t=this._changedParams();return!!t&&0===t.length},t.prototype.hookBuilder=function(){return new l.HookBuilder(this.router.transitionService,this,{transition:this,current:this._options.current})},t.prototype.run=function(){var t=this,e=c.TransitionHook.runSynchronousHooks,r=this.hookBuilder(),n=this.router.globals;n.transitionHistory.enqueue(this);var o=e(r.getOnBeforeHooks());if(g.Rejection.isTransitionRejectionPromise(o)){o["catch"](function(){return 0});var a=o._transitionRejection;return this._deferred.reject(a),this.promise}if(!this.valid()){var s=new Error(this.error());return this._deferred.reject(s),this.promise}if(this.ignored())return i.trace.traceTransitionIgnored(this),this._deferred.reject(g.Rejection.ignored()),this.promise;var u=function(){i.trace.traceSuccess(t.$to(),t),t.success=!0,t._deferred.resolve(t.to()),e(r.getOnSuccessHooks(),!0)},f=function(n){i.trace.traceError(n,t),t.success=!1,t._deferred.reject(n),t._error=n,e(r.getOnErrorHooks(),!0)};i.trace.traceTransitionStart(this);var l=function(t,e){return t.then(function(){return e.invokeHook()})};return r.asyncHooks().reduce(l,o).then(u,f),this.promise},t.prototype.valid=function(){return!this.error()||void 0!==this.success},t.prototype.error=function(){for(var t=this.$to(),e=0,r=this;null!=(r=r.redirectedFrom());)if(++e>20)return"Too many Transition redirects (20+)";return t.self["abstract"]?"Cannot transition to abstract state '"+t.name+"'":d.Param.validates(t.parameters(),this.params())?this.success===!1?this._error:void 0:"Param values not valid for state '"+t.name+"'"},t.prototype.toString=function(){var t=this.from(),e=this.to(),r=function(t){return null!==t["#"]&&void 0!==t["#"]?t:a.omit(t,"#")},n=this.$id,i=s.isObject(t)?t.name:t,o=a.toJson(r(this._treeChanges.from.map(u.prop("paramValues")).reduce(a.mergeR,{}))),c=this.valid()?"":"(X) ",f=s.isObject(e)?e.name:e,l=a.toJson(r(this.params()));return"Transition#"+n+"( '"+i+"'"+o+" -> "+c+"'"+f+"'"+l+" )"},t.diToken=t,t}();e.Transition=R},function(t,e,r){"use strict";function n(t){return t?"[ui-view#"+t.id+" tag "+("in template from '"+(t.creationContext&&t.creationContext.name||"(root)")+"' state]: ")+("fqn: '"+t.fqn+"', ")+("name: '"+t.name+"@"+t.creationContext+"')"):"ui-view (defunct)"}function i(t){return a.isNumber(t)?c[t]:c[c[t]]}var o=r(5),a=r(4),s=r(9),u=function(t){return"[ViewConfig#"+t.$id+" from '"+(t.viewDecl.$context.name||"(root)")+"' state]: target ui-view: '"+t.viewDecl.$uiViewName+"@"+t.viewDecl.$uiViewContextAnchor+"'"};!function(t){t[t.RESOLVE=0]="RESOLVE",t[t.TRANSITION=1]="TRANSITION",t[t.HOOK=2]="HOOK",t[t.UIVIEW=3]="UIVIEW",t[t.VIEWCONFIG=4]="VIEWCONFIG"}(e.Category||(e.Category={}));var c=e.Category,f=function(){function t(){this._enabled={},this.approximateDigests=0}return t.prototype._set=function(t,e){var r=this;e.length||(e=Object.keys(c).map(function(t){return parseInt(t,10)}).filter(function(t){return!isNaN(t)}).map(function(t){return c[t]})),e.map(i).forEach(function(e){return r._enabled[e]=t})},t.prototype.enable=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];this._set(!0,t)},t.prototype.disable=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];this._set(!1,t)},t.prototype.enabled=function(t){return!!this._enabled[i(t)]},t.prototype.traceTransitionStart=function(t){if(this.enabled(c.TRANSITION)){var e=t.$id,r=this.approximateDigests,n=s.stringify(t);console.log("Transition #"+e+" Digest #"+r+": Started -> "+n)}},t.prototype.traceTransitionIgnored=function(t){if(this.enabled(c.TRANSITION)){var e=t&&t.$id,r=this.approximateDigests,n=s.stringify(t);console.log("Transition #"+e+" Digest #"+r+": Ignored <> "+n)}},t.prototype.traceHookInvocation=function(t,e){if(this.enabled(c.HOOK)){var r=o.parse("transition.$id")(e),n=this.approximateDigests,i=o.parse("traceData.hookType")(e)||"internal",a=o.parse("traceData.context.state.name")(e)||o.parse("traceData.context")(e)||"unknown",u=s.functionToString(t.eventHook.callback);console.log("Transition #"+r+" Digest #"+n+": Hook -> "+i+" context: "+a+", "+s.maxLength(200,u))}},t.prototype.traceHookResult=function(t,e){if(this.enabled(c.HOOK)){var r=o.parse("transition.$id")(e),n=this.approximateDigests,i=s.stringify(t);console.log("Transition #"+r+" Digest #"+n+": <- Hook returned: "+s.maxLength(200,i))}},t.prototype.traceResolvePath=function(t,e,r){if(this.enabled(c.RESOLVE)){var n=r&&r.$id,i=this.approximateDigests,o=t&&t.toString();console.log("Transition #"+n+" Digest #"+i+": Resolving "+o+" ("+e+")")}},t.prototype.traceResolvableResolved=function(t,e){if(this.enabled(c.RESOLVE)){var r=e&&e.$id,n=this.approximateDigests,i=t&&t.toString(),o=s.stringify(t.data);console.log("Transition #"+r+" Digest #"+n+": <- Resolved "+i+" to: "+s.maxLength(200,o))}},t.prototype.traceError=function(t,e){if(this.enabled(c.TRANSITION)){var r=e&&e.$id,n=this.approximateDigests,i=s.stringify(e);console.log("Transition #"+r+" Digest #"+n+": <- Rejected "+i+", reason: "+t)}},t.prototype.traceSuccess=function(t,e){if(this.enabled(c.TRANSITION)){var r=e&&e.$id,n=this.approximateDigests,i=t.name,o=s.stringify(e);console.log("Transition #"+r+" Digest #"+n+": <- Success "+o+", final state: "+i)}},t.prototype.traceUIViewEvent=function(t,e,r){void 0===r&&(r=""),this.enabled(c.UIVIEW)&&console.log("ui-view: "+s.padString(30,t)+" "+n(e)+r)},t.prototype.traceUIViewConfigUpdated=function(t,e){this.enabled(c.UIVIEW)&&this.traceUIViewEvent("Updating",t," with ViewConfig from context='"+e+"'")},t.prototype.traceUIViewFill=function(t,e){this.enabled(c.UIVIEW)&&this.traceUIViewEvent("Fill",t," with: "+s.maxLength(200,e))},t.prototype.traceViewServiceEvent=function(t,e){this.enabled(c.VIEWCONFIG)&&console.log("VIEWCONFIG: "+t+" "+u(e))},t.prototype.traceViewServiceUIViewEvent=function(t,e){this.enabled(c.VIEWCONFIG)&&console.log("VIEWCONFIG: "+t+" "+n(e))},t}();e.Trace=f;var l=new f;e.trace=l},function(t,e,r){"use strict";var n=r(3),i=r(9),o=r(4),a=r(5),s=r(12),u=r(6),c=r(10),f=r(14),l={async:!0,rejectIfSuperseded:!0,current:n.noop,transition:null,traceData:{},bind:null},p=function(){function t(t,e,r,i){var o=this;this.transition=t,this.stateContext=e,this.eventHook=r,this.options=i,this.isSuperseded=function(){return o.options.current()!==o.options.transition},this.options=n.defaults(i,l)}return t.prototype.invokeHook=function(){var t=this,e=t.options,r=t.eventHook;if(s.trace.traceHookInvocation(this,e),e.rejectIfSuperseded&&this.isSuperseded())return c.Rejection.superseded(e.current()).toPromise();var n=r._deregistered?void 0:r.callback.call(e.bind,this.transition,this.stateContext);return this.handleHookResult(n)},t.prototype.handleHookResult=function(t){if(this.isSuperseded())return c.Rejection.superseded(this.options.current()).toPromise();if(o.isPromise(t))return t.then(this.handleHookResult.bind(this));if(s.trace.traceHookResult(t,this.options),t===!1)return c.Rejection.aborted("Hook aborted transition").toPromise();var e=a.is(f.TargetState);return e(t)?c.Rejection.redirected(t).toPromise():void 0},t.prototype.toString=function(){var t=this,e=t.options,r=t.eventHook,n=a.parse("traceData.hookType")(e)||"internal",o=a.parse("traceData.context.state.name")(e)||a.parse("traceData.context")(e)||"unknown",s=i.fnToString(r.callback);return n+" context: "+o+", "+i.maxLength(200,s)},t.runSynchronousHooks=function(t,e){void 0===e&&(e=!1);for(var r=[],n=0;n<t.length;n++){var i=t[n];try{r.push(i.invokeHook())}catch(s){if(!e)return c.Rejection.errored(s).toPromise();var f=i.transition.router.stateService.defaultErrorHandler();f(s)}}var l=r.filter(c.Rejection.isTransitionRejectionPromise);return l.length?l[0]:r.filter(o.isPromise).reduce(function(t,e){return t.then(a.val(e))},u.services.$q.when())},t}();e.TransitionHook=p},function(t,e,r){"use strict";var n=r(3),i=function(){function t(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n={}),this._identifier=t,this._definition=e,this._options=n,this._params=r||{}}return t.prototype.name=function(){return this._definition&&this._definition.name||this._identifier},t.prototype.identifier=function(){return this._identifier},t.prototype.params=function(){return this._params},t.prototype.$state=function(){return this._definition},t.prototype.state=function(){return this._definition&&this._definition.self},t.prototype.options=function(){return this._options},t.prototype.exists=function(){return!(!this._definition||!this._definition.self)},t.prototype.valid=function(){return!this.error()},t.prototype.error=function(){var t=this.options().relative;if(!this._definition&&t){var e=t.name?t.name:t;return"Could not resolve '"+this.name()+"' from state '"+e+"'"}return this._definition?this._definition.self?void 0:"State '"+this.name()+"' has an invalid definition":"No such state '"+this.name()+"'"},t.prototype.toString=function(){return"'"+this.name()+"'"+n.toJson(this.params())},t}();e.TargetState=i},function(t,e,r){"use strict";function n(t,e){function r(t){for(var e=n,r=0;r<e.length;r++){var i=s.Glob.fromString(e[r]);if(i&&i.matches(t.name)||!i&&e[r]===t.name)return!0}return!1}var n=a.isString(e)?[e]:e,i=a.isFunction(n)?n:r;return!!i(t)}function i(t,e){return function(r,n,i){void 0===i&&(i={});var a=new u(r,n,i);return t[e].push(a),function(){a._deregistered=!0,o.removeFrom(t[e])(a)}}}var o=r(3),a=r(4),s=r(7);e.matchState=n;var u=function(){function t(t,e,r){void 0===r&&(r={}),this.callback=e,this.matchCriteria=o.extend({to:!0,from:!0,exiting:!0,retained:!0,entering:!0},t),this.priority=r.priority||0,this.bind=r.bind||null,this._deregistered=!1}return t._matchingNodes=function(t,e){if(e===!0)return t;var r=t.filter(function(t){return n(t.state,e)});return r.length?r:null},t.prototype.matches=function(e){var r=this.matchCriteria,n=t._matchingNodes,i={to:n([o.tail(e.to)],r.to),from:n([o.tail(e.from)],r.from),exiting:n(e.exiting,r.exiting),retained:n(e.retained,r.retained),entering:n(e.entering,r.entering)},a=["to","from","exiting","retained","entering"].map(function(t){return i[t]}).reduce(o.allTrueR,!0);return a?i:null},t}();e.EventHook=u;var c=function(){function t(){var t=this;this._transitionEvents={onBefore:[],onStart:[],onEnter:[],onRetain:[],onExit:[],onFinish:[],onSuccess:[],onError:[]},this.getHooks=function(e){return t._transitionEvents[e]},this.onBefore=i(this._transitionEvents,"onBefore"),this.onStart=i(this._transitionEvents,"onStart"),this.onEnter=i(this._transitionEvents,"onEnter"),this.onRetain=i(this._transitionEvents,"onRetain"),this.onExit=i(this._transitionEvents,"onExit"),this.onFinish=i(this._transitionEvents,"onFinish"),this.onSuccess=i(this._transitionEvents,"onSuccess"),this.onError=i(this._transitionEvents,"onError")}return t.mixin=function(t,e){Object.keys(t._transitionEvents).concat(["getHooks"]).forEach(function(r){return e[r]=t[r]})},t}();e.HookRegistry=c},function(t,e,r){"use strict";function n(t){return void 0===t&&(t=!1),function(e,r){var n=t?-1:1,i=(e.node.state.path.length-r.node.state.path.length)*n;return 0!==i?i:r.hook.priority-e.hook.priority}}var i=r(3),o=r(4),a=r(13),s=r(17),u=function(){function t(t,e,r){var o=this;this.$transitions=t,this.transition=e,this.baseHookOptions=r,this.getOnBeforeHooks=function(){return o._buildNodeHooks("onBefore","to",n(),{async:!1})},this.getOnStartHooks=function(){return o._buildNodeHooks("onStart","to",n())},this.getOnExitHooks=function(){return o._buildNodeHooks("onExit","exiting",n(!0),{stateHook:!0})},this.getOnRetainHooks=function(){return o._buildNodeHooks("onRetain","retained",n(!1),{stateHook:!0})},this.getOnEnterHooks=function(){return o._buildNodeHooks("onEnter","entering",n(!1),{stateHook:!0})},this.getOnFinishHooks=function(){return o._buildNodeHooks("onFinish","to",n())},this.getOnSuccessHooks=function(){return o._buildNodeHooks("onSuccess","to",n(),{async:!1,rejectIfSuperseded:!1})},this.getOnErrorHooks=function(){return o._buildNodeHooks("onError","to",n(),{async:!1,rejectIfSuperseded:!1})},this.treeChanges=e.treeChanges(),this.toState=i.tail(this.treeChanges.to).state,this.fromState=i.tail(this.treeChanges.from).state,this.transitionOptions=e.options()}return t.prototype.asyncHooks=function(){var t=this.getOnStartHooks(),e=this.getOnExitHooks(),r=this.getOnRetainHooks(),n=this.getOnEnterHooks(),o=this.getOnFinishHooks(),a=[t,e,r,n,o];return a.reduce(i.unnestR,[]).filter(i.identity)},t.prototype._buildNodeHooks=function(t,e,r,n){var o=this,u=this._matchingHooks(t,this.treeChanges);if(!u)return[];var c=function(r){var u=r.matches(o.treeChanges),c=u[e],f="exiting"===e?o.treeChanges.from:o.treeChanges.to;new s.ResolveContext(f);return c.map(function(e){var s=i.extend({bind:r.bind,traceData:{hookType:t,context:e}},o.baseHookOptions,n),u=s.stateHook?e.state:null,c=new a.TransitionHook(o.transition,u,r,s);return{hook:r,node:e,transitionHook:c}})};return u.map(c).reduce(i.unnestR,[]).sort(r).map(function(t){return t.transitionHook})},t.prototype._matchingHooks=function(t,e){return[this.transition,this.$transitions].map(function(e){return e.getHooks(t)}).filter(i.assertPredicate(o.isArray,"broken event named: "+t)).reduce(i.unnestR,[]).filter(function(t){return t.matches(e)})},t}();e.HookBuilder=u},function(t,e,r){"use strict";var n=r(3),i=r(5),o=r(12),a=r(6),s=r(18),u=r(19),c=r(20),f=r(9),l=s.resolvePolicies.when,p=[l.EAGER,l.LAZY],h=[l.EAGER];e.NATIVE_INJECTOR_TOKEN="Native Injector";var v=function(){function t(t){this._path=t}return t.prototype.getTokens=function(){return this._path.reduce(function(t,e){return t.concat(e.resolvables.map(function(t){return t.token}))},[]).reduce(n.uniqR,[])},t.prototype.getResolvable=function(t){var e=this._path.map(function(t){return t.resolvables}).reduce(n.unnestR,[]).filter(function(e){return e.token===t});return n.tail(e)},t.prototype.subContext=function(e){return new t(c.PathFactory.subPath(this._path,function(t){return t.state===e}))},t.prototype.addResolvables=function(t,e){var r=n.find(this._path,i.propEq("state",e)),o=t.map(function(t){return t.token});r.resolvables=r.resolvables.filter(function(t){return o.indexOf(t.token)===-1}).concat(t)},t.prototype.resolvePath=function(t,e){var r=this;void 0===t&&(t="LAZY");var i=n.inArray(p,t)?t:"LAZY",u=i===s.resolvePolicies.when.EAGER?h:p;o.trace.traceResolvePath(this._path,t,e);var c=this._path.reduce(function(t,i){var o=function(t){return n.inArray(u,t.getPolicy(i.state).when)},a=i.resolvables.filter(o),s=r.subContext(i.state),c=function(t){return t.get(s,e).then(function(e){return{token:t.token,value:e}})};return t.concat(a.map(c))},[]);return a.services.$q.all(c)},t.prototype.injector=function(){
1776 1776 return this._injector||(this._injector=new d(this))},t.prototype.findNode=function(t){return n.find(this._path,function(e){return n.inArray(e.resolvables,t)})},t.prototype.getDependencies=function(t){var e=this,r=this.findNode(t),i=c.PathFactory.subPath(this._path,function(t){return t===r})||this._path,o=i.reduce(function(t,e){return t.concat(e.resolvables)},[]).filter(function(e){return e!==t}),a=function(t){var r=o.filter(function(e){return e.token===t});if(r.length)return n.tail(r);var i=e.injector().getNative(t);if(!i)throw new Error("Could not find Dependency Injection token: "+f.stringify(t));return new u.Resolvable(t,function(){return i},[],i)};return t.deps.map(a)},t}();e.ResolveContext=v;var d=function(){function t(t){this.context=t,this["native"]=this.get(e.NATIVE_INJECTOR_TOKEN)||a.services.$injector}return t.prototype.get=function(t){var e=this.context.getResolvable(t);if(e){if(!e.resolved)throw new Error("Resolvable async .get() not complete:"+f.stringify(e.token));return e.data}return this["native"]&&this["native"].get(t)},t.prototype.getAsync=function(t){var e=this.context.getResolvable(t);return e?e.get(this.context):a.services.$q.when(this["native"].get(t))},t.prototype.getNative=function(t){return this["native"].get(t)},t}()},function(t,e){"use strict";e.resolvePolicies={when:{LAZY:"LAZY",EAGER:"EAGER"},async:{WAIT:"WAIT",NOWAIT:"NOWAIT",RXWAIT:"RXWAIT"}}},function(t,e,r){"use strict";var n=r(3),i=r(6),o=r(12),a=r(9),s=r(4);e.defaultResolvePolicy={when:"LAZY",async:"WAIT"};var u=function(){function t(e,r,o,a,u){if(this.resolved=!1,this.promise=void 0,e instanceof t)n.extend(this,e);else if(s.isFunction(r)){if(null==e||void 0==e)throw new Error("new Resolvable(): token argument is required");if(!s.isFunction(r))throw new Error("new Resolvable(): resolveFn argument must be a function");this.token=e,this.policy=a,this.resolveFn=r,this.deps=o||[],this.data=u,this.resolved=void 0!==u,this.promise=this.resolved?i.services.$q.when(this.data):void 0}else if(s.isObject(e)&&e.token&&s.isFunction(e.resolveFn)){var c=e;return new t(c.token,c.resolveFn,c.deps,c.policy,c.data)}}return t.prototype.getPolicy=function(t){var r=this.policy||{},n=t&&t.resolvePolicy||{};return{when:r.when||n.when||e.defaultResolvePolicy.when,async:r.async||n.async||e.defaultResolvePolicy.async}},t.prototype.resolve=function(t,e){var r=this,a=i.services.$q,s=function(){return a.all(t.getDependencies(r).map(function(r){return r.get(t,e)}))},u=function(t){return r.resolveFn.apply(null,t)},c=function(t){var e=t.cache(1);return e.take(1).toPromise().then(function(){return e})},f=t.findNode(this),l=f&&f.state,p="RXWAIT"===this.getPolicy(l).async?c:n.identity,h=function(t){return r.data=t,r.resolved=!0,o.trace.traceResolvableResolved(r,e),r.data};return this.promise=a.when().then(s).then(u).then(p).then(h)},t.prototype.get=function(t,e){return this.promise||this.resolve(t,e)},t.prototype.toString=function(){return"Resolvable(token: "+a.stringify(this.token)+", requires: ["+this.deps.map(a.stringify)+"])"},t.prototype.clone=function(){return new t(this)},t.fromData=function(e,r){return new t(e,function(){return r},null,null,r)},t}();e.Resolvable=u},function(t,e,r){"use strict";var n=r(3),i=r(5),o=r(14),a=r(21),s=function(){function t(){}return t.makeTargetState=function(t){var e=n.tail(t).state;return new o.TargetState(e,e,t.map(i.prop("paramValues")).reduce(n.mergeR,{}))},t.buildPath=function(t){var e=t.params();return t.$state().path.map(function(t){return new a.PathNode(t).applyRawParams(e)})},t.buildToPath=function(e,r){var n=t.buildPath(r);return r.options().inherit?t.inheritParams(e,n,Object.keys(r.params())):n},t.applyViewConfigs=function(e,r,i){r.filter(function(t){return n.inArray(i,t.state)}).forEach(function(i){var o=n.values(i.state.views||{}),a=t.subPath(r,function(t){return t===i}),s=o.map(function(t){return e.createViewConfig(a,t)});i.views=s.reduce(n.unnestR,[])})},t.inheritParams=function(t,e,r){function o(t,e){var r=n.find(t,i.propEq("state",e));return n.extend({},r&&r.paramValues)}function s(e){var i=n.extend({},e&&e.paramValues),s=n.pick(i,r);i=n.omit(i,r);var u=o(t,e.state)||{},c=n.extend(i,u,s);return new a.PathNode(e.state).applyRawParams(c)}return void 0===r&&(r=[]),e.map(s)},t.treeChanges=function(t,e,r){function n(t,r){var n=a.PathNode.clone(t);return n.paramValues=e[r].paramValues,n}for(var o=0,s=Math.min(t.length,e.length),u=function(t){return t.parameters({inherit:!1}).filter(i.not(i.prop("dynamic"))).map(i.prop("id"))},c=function(t,e){return t.equals(e,u(t.state))};o<s&&t[o].state!==r&&c(t[o],e[o]);)o++;var f,l,p,h,v;f=t,l=f.slice(0,o),p=f.slice(o);var d=l.map(n);return h=e.slice(o),v=d.concat(h),{from:f,to:v,retained:l,exiting:p,entering:h}},t.subPath=function(t,e){var r=n.find(t,e),i=t.indexOf(r);return i===-1?void 0:t.slice(0,i+1)},t.paramValues=function(t){return t.reduce(function(t,e){return n.extend(t,e.paramValues)},{})},t}();e.PathFactory=s},function(t,e,r){"use strict";var n=r(3),i=r(5),o=r(22),a=function(){function t(e){if(e instanceof t){var r=e;this.state=r.state,this.paramSchema=r.paramSchema.slice(),this.paramValues=n.extend({},r.paramValues),this.resolvables=r.resolvables.slice(),this.views=r.views&&r.views.slice()}else{var i=e;this.state=i,this.paramSchema=i.parameters({inherit:!1}),this.paramValues={},this.resolvables=i.resolvables.map(function(t){return t.clone()})}}return t.prototype.applyRawParams=function(t){var e=function(e){return[e.id,e.value(t[e.id])]};return this.paramValues=this.paramSchema.reduce(function(t,r){return n.applyPairs(t,e(r))},{}),this},t.prototype.parameter=function(t){return n.find(this.paramSchema,i.propEq("id",t))},t.prototype.equals=function(t,e){var r=this;void 0===e&&(e=this.paramSchema.map(function(t){return t.id}));var i=function(e){return r.parameter(e).type.equals(r.paramValues[e],t.paramValues[e])};return this.state===t.state&&e.map(i).reduce(n.allTrueR,!0)},t.clone=function(e){return new t(e)},t.matching=function(t,e,r){void 0===r&&(r=!0);for(var n=[],i=0;i<t.length&&i<e.length;i++){var a=t[i],s=e[i];if(a.state!==s.state)break;var u=o.Param.changed(a.paramSchema,a.paramValues,s.paramValues).filter(function(t){return!(r&&t.dynamic)});if(u.length)break;n.push(a)}return n},t}();e.PathNode=a},function(t,e,r){"use strict";function n(t){return t=v(t)&&{value:t}||t,s.extend(t,{$$fn:c.isInjectable(t.value)?t.value:function(){return t.value}})}function i(t,e,r,n,i){if(t.type&&e&&"string"!==e.name)throw new Error("Param '"+n+"' has two type configurations.");return t.type&&e&&"string"===e.name&&i.type(t.type)?i.type(t.type):e?e:t.type?t.type instanceof p.ParamType?t.type:i.type(t.type):r===d.CONFIG?i.type("any"):i.type("string")}function o(t,e){var r=t.squash;if(!e||r===!1)return!1;if(!c.isDefined(r)||null==r)return l.matcherConfig.defaultSquashPolicy();if(r===!0||c.isString(r))return r;throw new Error("Invalid squash policy: '"+r+"'. Valid policies: false, true, or arbitrary string")}function a(t,e,r,n){var i,o,a=[{from:"",to:r||e?void 0:""},{from:null,to:r||e?void 0:""}];return i=c.isArray(t.replace)?t.replace:[],c.isString(n)&&i.push({from:n,to:void 0}),o=s.map(i,u.prop("from")),s.filter(a,function(t){return o.indexOf(t.from)===-1}).concat(i)}var s=r(3),u=r(5),c=r(4),f=r(6),l=r(23),p=r(24),h=Object.prototype.hasOwnProperty,v=function(t){return 0===["value","type","squash","array","dynamic"].filter(h.bind(t||{})).length};!function(t){t[t.PATH=0]="PATH",t[t.SEARCH=1]="SEARCH",t[t.CONFIG=2]="CONFIG"}(e.DefType||(e.DefType={}));var d=e.DefType,m=function(){function t(t,e,r,u,f){function l(){var e={array:u===d.SEARCH&&"auto"},n=t.match(/\[\]$/)?{array:!0}:{};return s.extend(e,n,r).array}r=n(r),e=i(r,e,u,t,f);var p=l();e=p?e.$asArray(p,u===d.SEARCH):e;var h=void 0!==r.value,v=c.isDefined(r.dynamic)?!!r.dynamic:!!e.dynamic,m=o(r,h),g=a(r,p,h,m);s.extend(this,{id:t,type:e,location:u,squash:m,replace:g,isOptional:h,dynamic:v,config:r,array:p})}return t.prototype.isDefaultValue=function(t){return this.isOptional&&this.type.equals(this.value(),t)},t.prototype.value=function(t){var e=this,r=function(){if(!f.services.$injector)throw new Error("Injectable functions cannot be called at configuration time");var t=f.services.$injector.invoke(e.config.$$fn);if(null!==t&&void 0!==t&&!e.type.is(t))throw new Error("Default value ("+t+") for parameter '"+e.id+"' is not an instance of ParamType ("+e.type.name+")");return t},n=function(t){var r=s.map(s.filter(e.replace,u.propEq("from",t)),u.prop("to"));return r.length?r[0]:t};return t=n(t),c.isDefined(t)?this.type.$normalize(t):r()},t.prototype.isSearch=function(){return this.location===d.SEARCH},t.prototype.validates=function(t){if((!c.isDefined(t)||null===t)&&this.isOptional)return!0;var e=this.type.$normalize(t);if(!this.type.is(e))return!1;var r=this.type.encode(e);return!(c.isString(r)&&!this.type.pattern.exec(r))},t.prototype.toString=function(){return"{Param:"+this.id+" "+this.type+" squash: '"+this.squash+"' optional: "+this.isOptional+"}"},t.fromConfig=function(e,r,n,i){return new t(e,r,n,d.CONFIG,i)},t.fromPath=function(e,r,n,i){return new t(e,r,n,d.PATH,i)},t.fromSearch=function(e,r,n,i){return new t(e,r,n,d.SEARCH,i)},t.values=function(t,e){return void 0===e&&(e={}),t.map(function(t){return[t.id,t.value(e[t.id])]}).reduce(s.applyPairs,{})},t.changed=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r={}),t.filter(function(t){return!t.type.equals(e[t.id],r[t.id])})},t.equals=function(e,r,n){return void 0===r&&(r={}),void 0===n&&(n={}),0===t.changed(e,r,n).length},t.validates=function(t,e){return void 0===e&&(e={}),t.map(function(t){return t.validates(e[t.id])}).reduce(s.allTrueR,!0)},t}();e.Param=m},function(t,e,r){"use strict";var n=r(4),i=function(){function t(){this._isCaseInsensitive=!1,this._isStrictMode=!0,this._defaultSquashPolicy=!1}return t.prototype.caseInsensitive=function(t){return this._isCaseInsensitive=n.isDefined(t)?t:this._isCaseInsensitive},t.prototype.strictMode=function(t){return this._isStrictMode=n.isDefined(t)?t:this._isStrictMode},t.prototype.defaultSquashPolicy=function(t){if(n.isDefined(t)&&t!==!0&&t!==!1&&!n.isString(t))throw new Error("Invalid squash policy: "+t+". Valid policies: false, true, arbitrary-string");return this._defaultSquashPolicy=n.isDefined(t)?t:this._defaultSquashPolicy},t}();e.MatcherConfig=i,e.matcherConfig=new i},function(t,e,r){"use strict";function n(t,e){function r(t){return o.isArray(t)?t:o.isDefined(t)?[t]:[]}function n(t){switch(t.length){case 0:return;case 1:return"auto"===e?t[0]:t;default:return t}}function a(t,e){return function(a){if(o.isArray(a)&&0===a.length)return a;var s=r(a),u=i.map(s,t);return e===!0?0===i.filter(u,function(t){return!t}).length:n(u)}}function s(t){return function(e,n){var i=r(e),o=r(n);if(i.length!==o.length)return!1;for(var a=0;a<i.length;a++)if(!t(i[a],o[a]))return!1;return!0}}var u=this;["encode","decode","equals","$normalize"].forEach(function(e){var r=t[e].bind(t),n="equals"===e?s:a;u[e]=n(r)}),i.extend(this,{dynamic:t.dynamic,name:t.name,pattern:t.pattern,is:a(t.is.bind(t),!0),$arrayMode:e})}var i=r(3),o=r(4),a=function(){function t(t){this.pattern=/.*/,i.extend(this,t)}return t.prototype.is=function(t,e){return!0},t.prototype.encode=function(t,e){return t},t.prototype.decode=function(t,e){return t},t.prototype.equals=function(t,e){return t==e},t.prototype.$subPattern=function(){var t=this.pattern.toString();return t.substr(1,t.length-2)},t.prototype.toString=function(){return"{ParamType:"+this.name+"}"},t.prototype.$normalize=function(t){return this.is(t)?t:this.decode(t)},t.prototype.$asArray=function(t,e){if(!t)return this;if("auto"===t&&!e)throw new Error("'auto' array mode is for query parameters only");return new n(this,t)},t}();e.ParamType=a},function(t,e,r){"use strict";var n=r(26),i=r(29),o=r(29),a=r(30),s=r(37),u=r(38),c=r(43),f=r(44),l=function(){function t(){this.viewService=new s.ViewService,this.transitionService=new a.TransitionService(this),this.globals=new f.Globals(this.transitionService),this.urlMatcherFactory=new n.UrlMatcherFactory,this.urlRouterProvider=new i.UrlRouterProvider(this.urlMatcherFactory,this.globals.params),this.urlRouter=new o.UrlRouter(this.urlRouterProvider),this.stateRegistry=new u.StateRegistry(this.urlMatcherFactory,this.urlRouterProvider),this.stateService=new c.StateService(this),this.viewService.rootContext(this.stateRegistry.root()),this.globals.$current=this.stateRegistry.root(),this.globals.current=this.globals.$current.self}return t}();e.UIRouter=l},function(t,e,r){"use strict";function n(){return{strict:s.matcherConfig.strictMode(),caseInsensitive:s.matcherConfig.caseInsensitive()}}var i=r(3),o=r(4),a=r(27),s=r(23),u=r(22),c=r(28),f=function(){function t(){this.paramTypes=new c.ParamTypes,i.extend(this,{UrlMatcher:a.UrlMatcher,Param:u.Param})}return t.prototype.caseInsensitive=function(t){return s.matcherConfig.caseInsensitive(t)},t.prototype.strictMode=function(t){return s.matcherConfig.strictMode(t)},t.prototype.defaultSquashPolicy=function(t){return s.matcherConfig.defaultSquashPolicy(t)},t.prototype.compile=function(t,e){return new a.UrlMatcher(t,this.paramTypes,i.extend(n(),e))},t.prototype.isMatcher=function(t){if(!o.isObject(t))return!1;var e=!0;return i.forEach(a.UrlMatcher.prototype,function(r,n){o.isFunction(r)&&(e=e&&o.isDefined(t[n])&&o.isFunction(t[n]))}),e},t.prototype.type=function(t,e,r){var n=this.paramTypes.type(t,e,r);return o.isDefined(e)?this:n},t.prototype.$get=function(){return this.paramTypes.enqueue=!1,this.paramTypes._flushTypeQueue(),this},t}();e.UrlMatcherFactory=f},function(t,e,r){"use strict";function n(t,e){var r=["",""],n=t.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!e)return n;switch(e.squash){case!1:r=["(",")"+(e.isOptional?"?":"")];break;case!0:n=n.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+e.squash+"|",")?"]}return n+r[0]+e.type.pattern.source+r[1]}var i=r(3),o=r(5),a=r(4),s=r(22),u=r(4),c=r(22),f=r(3),l=r(3),p=function(t,e,r){return t[e]=t[e]||r()},h=function(){function t(e,r,a){var u=this;this.config=a,this._cache={path:[],pattern:null},this._children=[],this._params=[],this._segments=[],this._compiled=[],this.pattern=e,this.config=i.defaults(this.config,{params:{},strict:!0,caseInsensitive:!1,paramMap:i.identity});for(var c,f,l,p=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,h=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,v=0,d=[],m=function(r){if(!t.nameValidator.test(r))throw new Error("Invalid parameter name '"+r+"' in pattern '"+e+"'");if(i.find(u._params,o.propEq("id",r)))throw new Error("Duplicate parameter name '"+r+"' in pattern '"+e+"'")},g=function(t,n){var o=t[2]||t[3],a=n?t[4]:t[4]||("*"===t[1]?".*":null);return{id:o,regexp:a,cfg:u.config.params[o],segment:e.substring(v,t.index),type:a?r.type(a||"string")||i.inherit(r.type("string"),{pattern:new RegExp(a,u.config.caseInsensitive?"i":void 0)}):null}};(c=p.exec(e))&&(f=g(c,!1),!(f.segment.indexOf("?")>=0));)m(f.id),this._params.push(s.Param.fromPath(f.id,f.type,this.config.paramMap(f.cfg,!1),r)),this._segments.push(f.segment),d.push([f.segment,i.tail(this._params)]),v=p.lastIndex;l=e.substring(v);var y=l.indexOf("?");if(y>=0){var w=l.substring(y);if(l=l.substring(0,y),w.length>0)for(v=0;c=h.exec(w);)f=g(c,!0),m(f.id),this._params.push(s.Param.fromSearch(f.id,f.type,this.config.paramMap(f.cfg,!0),r)),v=p.lastIndex}this._segments.push(l),i.extend(this,{_compiled:d.map(function(t){return n.apply(null,t)}).concat(n(l)),prefix:this._segments[0]}),Object.freeze(this)}return t.prototype.append=function(t){return this._children.push(t),i.forEach(t._cache,function(e,r){return t._cache[r]=a.isArray(e)?[]:null}),t._cache.path=this._cache.path.concat(this),t},t.prototype.isRoot=function(){return 0===this._cache.path.length},t.prototype.toString=function(){return this.pattern},t.prototype.exec=function(t,e,r,n){function a(t){var e=function(t){return t.split("").reverse().join("")},r=function(t){return t.replace(/\\-/g,"-")},n=e(t).split(/-(?!\\)/),o=i.map(n,e);return i.map(o,r).reverse()}var s=this;void 0===e&&(e={}),void 0===n&&(n={});var c=p(this._cache,"pattern",function(){return new RegExp(["^",i.unnest(s._cache.path.concat(s).map(o.prop("_compiled"))).join(""),s.config.strict===!1?"/?":"","$"].join(""),s.config.caseInsensitive?"i":void 0)}).exec(t);if(!c)return null;var f=this.parameters(),l=f.filter(function(t){return!t.isSearch()}),h=f.filter(function(t){return t.isSearch()}),v=this._cache.path.concat(this).map(function(t){return t._segments.length-1}).reduce(function(t,e){return t+e}),d={};if(v!==c.length-1)throw new Error("Unbalanced capture group in route '"+this.pattern+"'");for(var m=0;m<v;m++){for(var g=l[m],y=c[m+1],w=0;w<g.replace.length;w++)g.replace[w].from===y&&(y=g.replace[w].to);y&&g.array===!0&&(y=a(y)),u.isDefined(y)&&(y=g.type.decode(y)),d[g.id]=g.value(y)}return h.forEach(function(t){for(var r=e[t.id],n=0;n<t.replace.length;n++)t.replace[n].from===r&&(r=t.replace[n].to);u.isDefined(r)&&(r=t.type.decode(r)),d[t.id]=t.value(r)}),r&&(d["#"]=r),d},t.prototype.parameters=function(t){return void 0===t&&(t={}),t.inherit===!1?this._params:i.unnest(this._cache.path.concat(this).map(o.prop("_params")))},t.prototype.parameter=function(t,e){void 0===e&&(e={});var r=i.tail(this._cache.path);return i.find(this._params,o.propEq("id",t))||e.inherit!==!1&&r&&r.parameter(t)||null},t.prototype.validates=function(t){var e=this,r=function(t,e){return!t||t.validates(e)};return i.pairs(t||{}).map(function(t){var n=t[0],i=t[1];return r(e.parameter(n),i)}).reduce(i.allTrueR,!0)},t.prototype.format=function(e){function r(t){var r=t.value(e[t.id]),n=t.isDefaultValue(r),i=!!n&&t.squash,o=t.type.encode(r);return{param:t,value:r,isDefaultValue:n,squash:i,encoded:o}}if(void 0===e&&(e={}),!this.validates(e))return null;var n=this._cache.path.slice().concat(this),o=n.map(t.pathSegmentsAndParams).reduce(f.unnestR,[]),s=n.map(t.queryParams).reduce(f.unnestR,[]),u=o.reduce(function(e,n){if(a.isString(n))return e+n;var o=r(n),s=o.squash,u=o.encoded,c=o.param;return s===!0?e.match(/\/$/)?e.slice(0,-1):e:a.isString(s)?e+s:s!==!1?e:null==u?e:a.isArray(u)?e+i.map(u,t.encodeDashes).join("-"):c.type.raw?e+u:e+encodeURIComponent(u)},""),c=s.map(function(t){var e=r(t),n=e.squash,o=e.encoded,s=e.isDefaultValue;if(!(null==o||s&&n!==!1)&&(a.isArray(o)||(o=[o]),0!==o.length))return t.type.raw||(o=i.map(o,encodeURIComponent)),o.map(function(e){return t.id+"="+e})}).filter(i.identity).reduce(f.unnestR,[]).join("&");return u+(c?"?"+c:"")+(e["#"]?"#"+e["#"]:"")},t.encodeDashes=function(t){return encodeURIComponent(t).replace(/-/g,function(t){return"%5C%"+t.charCodeAt(0).toString(16).toUpperCase()})},t.pathSegmentsAndParams=function(t){var e=t._segments,r=t._params.filter(function(t){return t.location===c.DefType.PATH});return l.arrayTuples(e,r.concat(void 0)).reduce(f.unnestR,[]).filter(function(t){return""!==t&&u.isDefined(t)})},t.queryParams=function(t){return t._params.filter(function(t){return t.location===c.DefType.SEARCH})},t.nameValidator=/^\w+([-.]+\w+)*(?:\[\])?$/,t}();e.UrlMatcher=h},function(t,e,r){"use strict";function n(t){return null!=t?t.toString().replace(/(~|\/)/g,function(t){return{"~":"~~","/":"~2F"}[t]}):t}function i(t){return null!=t?t.toString().replace(/(~~|~2F)/g,function(t){return{"~~":"~","~2F":"/"}[t]}):t}var o=r(3),a=r(4),s=r(5),u=r(6),c=r(24),f=function(){function t(){this.enqueue=!0,this.typeQueue=[],this.defaultTypes={hash:{encode:n,decode:i,is:s.is(String),pattern:/.*/,equals:function(t,e){return t==e}},string:{encode:n,decode:i,is:s.is(String),pattern:/[^\/]*/},"int":{encode:n,decode:function(t){return parseInt(t,10)},is:function(t){return a.isDefined(t)&&this.decode(t.toString())===t},pattern:/-?\d+/},bool:{encode:function(t){return t&&1||0},decode:function(t){return 0!==parseInt(t,10)},is:s.is(Boolean),pattern:/0|1/},date:{encode:function(t){return this.is(t)?[t.getFullYear(),("0"+(t.getMonth()+1)).slice(-2),("0"+t.getDate()).slice(-2)].join("-"):void 0},decode:function(t){if(this.is(t))return t;var e=this.capture.exec(t);return e?new Date(e[1],e[2]-1,e[3]):void 0},is:function(t){return t instanceof Date&&!isNaN(t.valueOf())},equals:function(t,e){return["getFullYear","getMonth","getDate"].reduce(function(r,n){return r&&t[n]()===e[n]()},!0)},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:o.toJson,decode:o.fromJson,is:s.is(Object),equals:o.equals,pattern:/[^\/]*/},any:{encode:o.identity,decode:o.identity,equals:o.equals,pattern:/.*/}};var t=function(t,e){return new c.ParamType(o.extend({name:e},t))};this.types=o.inherit(o.map(this.defaultTypes,t),{})}return t.prototype.type=function(t,e,r){if(!a.isDefined(e))return this.types[t];if(this.types.hasOwnProperty(t))throw new Error("A type named '"+t+"' has already been defined.");return this.types[t]=new c.ParamType(o.extend({name:t},e)),r&&(this.typeQueue.push({name:t,def:r}),this.enqueue||this._flushTypeQueue()),this},t.prototype._flushTypeQueue=function(){for(;this.typeQueue.length;){var t=this.typeQueue.shift();if(t.pattern)throw new Error("You cannot override a type's .pattern at runtime.");o.extend(this.types[t.name],u.services.$injector.invoke(t.def))}},t}();e.ParamTypes=f},function(t,e,r){"use strict";function n(t){var e=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(t.source);return null!=e?e[1].replace(/\\(.)/g,"$1"):""}function i(t,e){return t.replace(/\$(\$|\d{1,2})/,function(t,r){return e["$"===r?0:Number(r)]})}function o(t,e,r,n){if(!n)return!1;var i=t.invoke(r,r,{$match:n,$stateParams:e});return!c.isDefined(i)||i}function a(t,e,r){var n=f.services.locationConfig.baseHref();return"/"===n?t:e?n.slice(0,-1)+t:r?n.slice(1)+t:t}function s(t,e,r){function n(t){var e=t(f.services.$injector,l);return!!e&&(c.isString(e)&&l.setUrl(e,!0),!0)}if(!r||!r.defaultPrevented){for(var i=t.length,o=0;o<i;o++)if(n(t[o]))return;e&&n(e)}}var u=r(3),c=r(4),f=r(6),l=f.services.location,p=function(){function t(t,e){this.rules=[],this.interceptDeferred=!1,this.$urlMatcherFactory=t,this.$stateParams=e}return t.prototype.rule=function(t){if(!c.isFunction(t))throw new Error("'rule' must be a function");return this.rules.push(t),this},t.prototype.removeRule=function(t){return this.rules.length!==u.removeFrom(this.rules,t).length},t.prototype.otherwise=function(t){if(!c.isFunction(t)&&!c.isString(t))throw new Error("'rule' must be a string or function");return this.otherwiseFn=c.isString(t)?function(){return t}:t,this},t.prototype.when=function(t,e,r){void 0===r&&(r=function(t){});var a,s=this,p=s.$urlMatcherFactory,h=s.$stateParams,v=c.isString(e);if(c.isString(t)&&(t=p.compile(t)),!v&&!c.isFunction(e)&&!c.isArray(e))throw new Error("invalid 'handler' in when()");var d={matcher:function(t,e){return v&&(a=p.compile(e),e=["$match",a.format.bind(a)]),u.extend(function(){return o(f.services.$injector,h,e,t.exec(l.path(),l.search(),l.hash()))},{prefix:c.isString(t.prefix)?t.prefix:""})},regex:function(t,e){if(t.global||t.sticky)throw new Error("when() RegExp must not be global or sticky");return v&&(a=e,e=["$match",function(t){return i(a,t)}]),u.extend(function(){return o(f.services.$injector,h,e,t.exec(l.path()))},{prefix:n(t)})}},m={matcher:p.isMatcher(t),regex:t instanceof RegExp};for(var g in m)if(m[g]){var y=d[g](t,e);return r(y),this.rule(y)}throw new Error("invalid 'what' in when()")},t.prototype.deferIntercept=function(t){void 0===t&&(t=!0),this.interceptDeferred=t},t}();e.UrlRouterProvider=p;var h=function(){function t(e){this.urlRouterProvider=e,u.bindFunctions(t.prototype,this,this)}return t.prototype.sync=function(){s(this.urlRouterProvider.rules,this.urlRouterProvider.otherwiseFn)},t.prototype.listen=function(){var t=this;return this.listener=this.listener||l.onChange(function(e){return s(t.urlRouterProvider.rules,t.urlRouterProvider.otherwiseFn,e)})},t.prototype.update=function(t){return t?void(this.location=l.path()):void(l.path()!==this.location&&l.setUrl(this.location,!0))},t.prototype.push=function(t,e,r){var n=r&&!!r.replace;l.setUrl(t.format(e||{}),n)},t.prototype.href=function(t,e,r){if(!t.validates(e))return null;var n=t.format(e);r=r||{absolute:!1};var i=f.services.locationConfig,o=i.html5Mode();if(o||null===n||(n="#"+i.hashPrefix()+n),n=a(n,o,r.absolute),!r.absolute||!n)return n;var s=!o&&n?"/":"",u=i.port();return u=80===u||443===u?"":":"+u,[i.protocol(),"://",i.host(),u,s,n].join("")},t}();e.UrlRouter=h},function(t,e,r){"use strict";var n=r(11),i=r(15),o=r(31),a=r(32),s=r(33),u=r(34),c=r(35),f=r(36);e.defaultTransOpts={location:!0,relative:null,inherit:!1,notify:!0,reload:!1,custom:{},current:function(){return null},source:"unknown"};var l=function(){function t(t){this._router=t,this.$view=t.viewService,i.HookRegistry.mixin(new i.HookRegistry,this),this._deregisterHookFns={},this.registerTransitionHooks()}return t.prototype.registerTransitionHooks=function(){var t=this._deregisterHookFns;t.redirectTo=u.registerRedirectToHook(this),t.onExit=c.registerOnExitHook(this),t.onRetain=c.registerOnRetainHook(this),t.onEnter=c.registerOnEnterHook(this),t.eagerResolve=o.registerEagerResolvePath(this),t.lazyResolve=o.registerLazyResolveState(this),t.loadViews=a.registerLoadEnteringViews(this),t.activateViews=a.registerActivateViews(this),t.updateUrl=s.registerUpdateUrl(this),t.lazyLoad=f.registerLazyLoadHook(this)},t.prototype.onBefore=function(t,e,r){throw""},t.prototype.onStart=function(t,e,r){throw""},t.prototype.onExit=function(t,e,r){throw""},t.prototype.onRetain=function(t,e,r){throw""},t.prototype.onEnter=function(t,e,r){throw""},t.prototype.onFinish=function(t,e,r){throw""},t.prototype.onSuccess=function(t,e,r){throw""},t.prototype.onError=function(t,e,r){throw""},t.prototype.create=function(t,e){return new n.Transition(t,e,this._router)},t}();e.TransitionService=l},function(t,e,r){"use strict";var n=r(3),i=r(17),o=r(5),a=function(t){return new i.ResolveContext(t.treeChanges().to).resolvePath("EAGER",t).then(n.noop)};e.registerEagerResolvePath=function(t){return t.onStart({},a,{priority:1e3})};var s=function(t,e){return new i.ResolveContext(t.treeChanges().to).subContext(e).resolvePath("LAZY",t).then(n.noop)};e.registerLazyResolveState=function(t){return t.onEnter({entering:o.val(!0)},s,{priority:1e3})}},function(t,e,r){"use strict";var n=r(3),i=r(6),o=function(t){var e=t.views("entering");if(e.length)return i.services.$q.all(e.map(function(t){return t.load()})).then(n.noop)};e.registerLoadEnteringViews=function(t){return t.onStart({},o)};var a=function(t){var e=t.views("entering"),r=t.views("exiting");if(e.length||r.length){var n=t.router.viewService;r.forEach(function(t){return n.deactivateViewConfig(t)}),e.forEach(function(t){return n.activateViewConfig(t)}),n.sync()}};e.registerActivateViews=function(t){return t.onSuccess({},a)}},function(t,e){"use strict";var r=function(t){var e=t.options(),r=t.router.stateService,n=t.router.urlRouter;if("url"!==e.source&&e.location&&r.$current.navigable){var i={replace:"replace"===e.location};n.push(r.$current.navigable.url,r.params,i)}n.update(!0)};e.registerUpdateUrl=function(t){return t.onSuccess({},r,{priority:9999})}},function(t,e,r){"use strict";var n=r(4),i=r(6),o=r(14),a=function(t){function e(e){var r=t.router.stateService;return e instanceof o.TargetState?e:n.isString(e)?r.target(e,t.params(),t.options()):e.state||e.params?r.target(e.state||t.to(),e.params||t.params(),t.options()):void 0}var r=t.to().redirectTo;if(r)return n.isFunction(r)?i.services.$q.when(r(t)).then(e):e(r)};e.registerRedirectToHook=function(t){return t.onStart({to:function(t){return!!t.redirectTo}},a)}},function(t,e){"use strict";function r(t){return function(e,r){var n=r[t];return n(e,r)}}var n=r("onExit");e.registerOnExitHook=function(t){return t.onExit({exiting:function(t){return!!t.onExit}},n)};var i=r("onRetain");e.registerOnRetainHook=function(t){return t.onRetain({retained:function(t){return!!t.onRetain}},i)};var o=r("onEnter");e.registerOnEnterHook=function(t){return t.onEnter({entering:function(t){return!!t.onEnter}},o)}},function(t,e,r){"use strict";var n=r(6),i=function(t){function e(){if("url"===t.options().source){var e=n.services.location,r=e.path(),i=e.search(),a=e.hash(),s=function(t){return[t,t.url&&t.url.exec(r,i,a)]},u=o.get().map(function(t){return t.$$state()}).map(s).filter(function(t){var e=(t[0],t[1]);return!!e});if(u.length){var c=u[0],f=c[0],l=c[1];return t.router.stateService.target(f,l,t.options())}t.router.urlRouter.sync()}var p=t.targetState();return t.router.stateService.target(p.identifier(),p.params(),p.options())}function r(e){o.deregister(t.$to()),e&&Array.isArray(e.states)&&e.states.forEach(function(t){return o.register(t)})}var i=t.to(),o=t.router.stateRegistry,a=i.lazyLoad,s=a._promise;if(!s){s=a._promise=a(t).then(r);var u=function(){return delete a._promise};s.then(u,u)}return s.then(e)};e.registerLazyLoadHook=function(t){return t.onBefore({to:function(t){return!!t.lazyLoad}},i)}},function(t,e,r){"use strict";var n=r(3),i=r(5),o=r(4),a=r(12),s=function(){function t(){var t=this;this.uiViews=[],this.viewConfigs=[],this._viewConfigFactories={},this.sync=function(){function e(t){return t.fqn.split(".").length}function r(t){for(var e=t.viewDecl.$context,r=0;++r&&e.parent;)e=e.parent;return r}var o=t.uiViews.map(function(t){return[t.fqn,t]}).reduce(n.applyPairs,{}),a=function(t){return function(e){if(t.$type!==e.viewDecl.$type)return!1;var r=e.viewDecl,i=r.$uiViewName.split("."),a=t.fqn.split(".");if(!n.equals(i,a.slice(0-i.length)))return!1;var s=1-i.length||void 0,u=a.slice(0,s).join("."),c=o[u].creationContext;return r.$uiViewContextAnchor===(c&&c.name)}},s=i.curry(function(t,e,r,n){return e*(t(r)-t(n))}),u=function(e){var n=t.viewConfigs.filter(a(e));return n.length>1&&n.sort(s(r,-1)),[e,n[0]]},c=function(e){var r=e[0],n=e[1];t.uiViews.indexOf(r)!==-1&&r.configUpdated(n)};t.uiViews.sort(s(e,1)).map(u).forEach(c)}}return t.prototype.rootContext=function(t){return this._rootContext=t||this._rootContext},t.prototype.viewConfigFactory=function(t,e){this._viewConfigFactories[t]=e},t.prototype.createViewConfig=function(t,e){var r=this._viewConfigFactories[e.$type];if(!r)throw new Error("ViewService: No view config factory registered for type "+e.$type);var n=r(t,e);return o.isArray(n)?n:[n]},t.prototype.deactivateViewConfig=function(t){a.trace.traceViewServiceEvent("<- Removing",t),n.removeFrom(this.viewConfigs,t)},t.prototype.activateViewConfig=function(t){a.trace.traceViewServiceEvent("-> Registering",t),this.viewConfigs.push(t)},t.prototype.registerUIView=function(t){a.trace.traceViewServiceUIViewEvent("-> Registering",t);var e=this.uiViews,r=function(e){return e.fqn===t.fqn};return e.filter(r).length&&a.trace.traceViewServiceUIViewEvent("!!!! duplicate uiView named:",t),e.push(t),this.sync(),function(){var r=e.indexOf(t);return r===-1?void a.trace.traceViewServiceUIViewEvent("Tried removing non-registered uiView",t):(a.trace.traceViewServiceUIViewEvent("<- Deregistering",t),void n.removeFrom(e)(t))}},t.prototype.available=function(){return this.uiViews.map(i.prop("fqn"))},t.prototype.active=function(){return this.uiViews.filter(i.prop("$config")).map(i.prop("name"))},t.normalizeUIViewTarget=function(t,e){void 0===e&&(e="");var r=e.split("@"),n=r[0]||"$default",i=o.isString(r[1])?r[1]:"^",a=/^(\^(?:\.\^)*)\.(.*$)/.exec(n);a&&(i=a[1],n=a[2]),"!"===n.charAt(0)&&(n=n.substr(1),i="");var s=/^(\^(?:\.\^)*)$/;if(s.exec(i)){var u=i.split(".").reduce(function(t,e){return t.parent},t);i=u.name}return{uiViewName:n,uiViewContextAnchor:i}},t}();e.ViewService=s},function(t,e,r){"use strict";var n=r(39),i=r(40),o=r(41),a=r(3),s=function(){function t(t,e){this.urlRouterProvider=e,this.states={},this.listeners=[],this.matcher=new n.StateMatcher(this.states),this.builder=new i.StateBuilder(this.matcher,t),this.stateQueue=new o.StateQueueManager(this.states,this.builder,e,this.listeners);
1777 1777 var r={name:"",url:"^",views:null,params:{"#":{value:null,type:"hash",dynamic:!0}},"abstract":!0},a=this._root=this.stateQueue.register(r);a.navigable=null}return t.prototype.onStatesChanged=function(t){return this.listeners.push(t),function(){a.removeFrom(this.listeners)(t)}.bind(this)},t.prototype.root=function(){return this._root},t.prototype.register=function(t){return this.stateQueue.register(t)},t.prototype._deregisterTree=function(t){var e=this,r=this.get().map(function(t){return t.$$state()}),n=function(t){var e=r.filter(function(e){return t.indexOf(e.parent)!==-1});return 0===e.length?e:e.concat(n(e))},i=n([t]),o=[t].concat(i).reverse();return o.forEach(function(t){e.urlRouterProvider.removeRule(t._urlRule),delete e.states[t.name]}),o},t.prototype.deregister=function(t){var e=this.get(t);if(!e)throw new Error("Can't deregister state; not found: "+t);var r=this._deregisterTree(e.$$state());return this.listeners.forEach(function(t){return t("deregistered",r.map(function(t){return t.self}))}),r},t.prototype.get=function(t,e){var r=this;if(0===arguments.length)return Object.keys(this.states).map(function(t){return r.states[t].self});var n=this.matcher.find(t,e);return n&&n.self||null},t.prototype.decorator=function(t,e){return this.builder.builder(t,e)},t}();e.StateRegistry=s},function(t,e,r){"use strict";var n=r(4),i=r(7),o=r(3),a=function(){function t(t){this._states=t}return t.prototype.isRelative=function(t){return t=t||"",0===t.indexOf(".")||0===t.indexOf("^")},t.prototype.find=function(t,e){if(t||""===t){var r=n.isString(t),a=r?t:t.name;this.isRelative(a)&&(a=this.resolvePath(a,e));var s=this._states[a];if(s&&(r||!(r||s!==t&&s.self!==t)))return s;if(r){var u=o.values(this._states).filter(function(t){return new i.Glob(t.name).matches(a)});return u.length>1&&console.log("stateMatcher.find: Found multiple matches for "+a+" using glob: ",u.map(function(t){return t.name})),u[0]}}},t.prototype.resolvePath=function(t,e){if(!e)throw new Error("No reference point given for path '"+t+"'");for(var r=this.find(e),n=t.split("."),i=0,o=n.length,a=r;i<o;i++)if(""!==n[i]||0!==i){if("^"!==n[i])break;if(!a.parent)throw new Error("Path '"+t+"' not valid for state '"+r.name+"'");a=a.parent}else a=r;var s=n.slice(i).join(".");return a.name+(a.name&&s?".":"")+s},t}();e.StateMatcher=a},function(t,e,r){"use strict";function n(t){return t.lazyLoad&&(t.name=t.self.name+".**"),t.name}function i(t){return t.self.$$state=function(){return t},t.self}function o(t){return t.parent&&t.parent.data&&(t.data=t.self.data=c.inherit(t.parent.data,t.data)),t.data}function a(t){return t.parent?t.parent.path.concat(t):[t]}function s(t){var e=t.parent?c.extend({},t.parent.includes):{};return e[t.name]=!0,e}function u(t){var e=function(t,e){return Object.keys(t||{}).map(function(r){return{token:r,val:t[r],deps:void 0,policy:e[r]}})},r=function(t){return t.$inject||d.services.$injector.annotate(t,d.services.$injector.strictDi)},n=function(t){return!(!t.token||!t.resolveFn)},i=function(t){return!(!t.provide&&!t.token||!(t.useValue||t.useFactory||t.useExisting||t.useClass))},o=function(t){return!!(t&&t.val&&(f.isString(t.val)||f.isArray(t.val)||f.isFunction(t.val)))},a=function(t){return t.provide||t.token},s=p.pattern([[p.prop("resolveFn"),function(t){return new v.Resolvable(a(t),t.resolveFn,t.deps,t.policy)}],[p.prop("useFactory"),function(t){return new v.Resolvable(a(t),t.useFactory,t.deps||t.dependencies,t.policy)}],[p.prop("useClass"),function(t){return new v.Resolvable(a(t),function(){return new t.useClass},[],t.policy)}],[p.prop("useValue"),function(t){return new v.Resolvable(a(t),function(){return t.useValue},[],t.policy,t.useValue)}],[p.prop("useExisting"),function(t){return new v.Resolvable(a(t),c.identity,[t.useExisting],t.policy)}]]),u=p.pattern([[p.pipe(p.prop("val"),f.isString),function(t){return new v.Resolvable(t.token,c.identity,[t.val],t.policy)}],[p.pipe(p.prop("val"),f.isArray),function(t){return new v.Resolvable(t.token,c.tail(t.val),t.val.slice(0,-1),t.policy)}],[p.pipe(p.prop("val"),f.isFunction),function(t){return new v.Resolvable(t.token,t.val,r(t.val),t.policy)}]]),h=p.pattern([[p.is(v.Resolvable),function(t){return t}],[n,s],[i,s],[o,u],[p.val(!0),function(t){throw new Error("Invalid resolve value: "+l.stringify(t))}]]),m=t.resolve,g=f.isArray(m)?m:e(m,t.resolvePolicy||{});return g.map(h)}var c=r(3),f=r(4),l=r(9),p=r(5),h=r(22),v=r(19),d=r(6),m=function(t){if(!f.isString(t))return!1;var e="^"===t.charAt(0);return{val:e?t.substring(1):t,root:e}},g=function(t,e){return function(r){var n=r;n&&n.url&&n.lazyLoad&&(n.url+="{remainder:any}");var i=m(n.url),o=r.parent,a=i?t.compile(i.val,{params:r.params||{},paramMap:function(t,e){return n.reloadOnSearch===!1&&e&&(t=c.extend(t||{},{dynamic:!0})),t}}):n.url;if(!a)return null;if(!t.isMatcher(a))throw new Error("Invalid url '"+a+"' in state '"+r+"'");return i&&i.root?a:(o&&o.navigable||e()).url.append(a)}},y=function(t){return function(e){return!t(e)&&e.url?e:e.parent?e.parent.navigable:null}},w=function(t){return function(e){var r=function(e,r){return h.Param.fromConfig(r,null,e,t)},n=e.url&&e.url.parameters({inherit:!1})||[],i=c.values(c.mapObj(c.omit(e.params||{},n.map(p.prop("id"))),r));return n.concat(i).map(function(t){return[t.id,t]}).reduce(c.applyPairs,{})}};e.resolvablesBuilder=u;var b=function(){function t(t,e){function r(e){return l(e)?null:t.find(c.parentName(e))||f()}this.matcher=t;var c=this,f=function(){return t.find("")},l=function(t){return""===t.name};this.builders={name:[n],self:[i],parent:[r],data:[o],url:[g(e,f)],navigable:[y(l)],params:[w(e.paramTypes)],views:[],path:[a],includes:[s],resolvables:[u]}}return t.prototype.builder=function(t,e){var r=this.builders,n=r[t]||[];return f.isString(t)&&!f.isDefined(e)?n.length>1?n:n[0]:f.isString(t)&&f.isFunction(e)?(r[t]=n,r[t].push(e),function(){return r[t].splice(r[t].indexOf(e,1))&&null}):void 0},t.prototype.build=function(t){var e=this,r=e.matcher,n=e.builders,i=this.parentName(t);if(i&&!r.find(i))return null;for(var o in n)if(n.hasOwnProperty(o)){var a=n[o].reduce(function(t,e){return function(r){return e(r,t)}},c.noop);t[o]=a(t)}return t},t.prototype.parentName=function(t){var e=t.name||"",r=e.split(".");if(r.length>1){if(t.parent)throw new Error("States that specify the 'parent:' property should not have a '.' in their name ("+e+")");var n=r.pop();return"**"===n&&r.pop(),r.join(".")}return t.parent?f.isString(t.parent)?t.parent:t.parent.name:""},t.prototype.name=function(t){var e=t.name;if(e.indexOf(".")!==-1||!t.parent)return e;var r=f.isString(t.parent)?t.parent:t.parent.name;return r?r+"."+e:e},t}();e.StateBuilder=b},function(t,e,r){"use strict";var n=r(3),i=r(4),o=r(42),a=function(){function t(t,e,r,n){this.states=t,this.builder=e,this.$urlRouterProvider=r,this.listeners=n,this.queue=[]}return t.prototype.register=function(t){var e=this,r=e.states,a=e.queue,s=e.$state,u=n.inherit(new o.State,n.extend({},t,{self:t,resolve:t.resolve||[],toString:function(){return t.name}}));if(!i.isString(u.name))throw new Error("State must have a valid name");if(r.hasOwnProperty(u.name)||n.pluck(a,"name").indexOf(u.name)!==-1)throw new Error("State '"+u.name+"' is already defined");return a.push(u),this.$state&&this.flush(s),u},t.prototype.flush=function(t){for(var e=this,r=e.queue,n=e.states,i=e.builder,o=[],a=[],s={};r.length>0;){var u=r.shift(),c=i.build(u),f=a.indexOf(u);if(c){if(n.hasOwnProperty(u.name))throw new Error("State '"+name+"' is already defined");n[u.name]=u,this.attachRoute(t,u),f>=0&&a.splice(f,1),o.push(u)}else{var l=s[u.name];if(s[u.name]=r.length,f>=0&&l===r.length)return r.push(u),n;f<0&&a.push(u),r.push(u)}}return o.length&&this.listeners.forEach(function(t){return t("registered",o.map(function(t){return t.self}))}),n},t.prototype.autoFlush=function(t){this.$state=t,this.flush(t)},t.prototype.attachRoute=function(t,e){var r=this.$urlRouterProvider;!e["abstract"]&&e.url&&r.when(e.url,["$match","$stateParams",function(r,i){t.$current.navigable===e&&n.equalForKeys(r,i)||t.transitionTo(e,r,{inherit:!0,source:"url"})}],function(t){return e._urlRule=t})},t}();e.StateQueueManager=a},function(t,e,r){"use strict";var n=r(3),i=r(5),o=function(){function t(t){n.extend(this,t)}return t.prototype.is=function(t){return this===t||this.self===t||this.fqn()===t},t.prototype.fqn=function(){if(!(this.parent&&this.parent instanceof this.constructor))return this.name;var t=this.parent.fqn();return t?t+"."+this.name:this.name},t.prototype.root=function(){return this.parent&&this.parent.root()||this},t.prototype.parameters=function(t){t=n.defaults(t,{inherit:!0});var e=t.inherit&&this.parent&&this.parent.parameters()||[];return e.concat(n.values(this.params))},t.prototype.parameter=function(t,e){return void 0===e&&(e={}),this.url&&this.url.parameter(t,e)||n.find(n.values(this.params),i.propEq("id",t))||e.inherit&&this.parent&&this.parent.parameter(t)},t.prototype.toString=function(){return this.fqn()},t}();e.State=o},function(t,e,r){"use strict";var n=r(3),i=r(4),o=r(8),a=r(6),s=r(20),u=r(21),c=r(30),f=r(10),l=r(14),p=r(22),h=r(7),v=r(3),d=r(3),m=r(17),g=function(){function t(e){this.router=e,this.invalidCallbacks=[],this._defaultErrorHandler=function(t){t instanceof Error&&t.stack?(console.error(t),console.error(t.stack)):t instanceof f.Rejection?(console.error(t.toString()),t.detail&&t.detail.stack&&console.error(t.detail.stack)):console.error(t)};var r=["current","$current","params","transition"],n=Object.keys(t.prototype).filter(function(t){return r.indexOf(t)===-1});d.bindFunctions(t.prototype,this,this,n)}return Object.defineProperty(t.prototype,"transition",{get:function(){return this.router.globals.transition},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"params",{get:function(){return this.router.globals.params},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"current",{get:function(){return this.router.globals.current},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"$current",{get:function(){return this.router.globals.$current},enumerable:!0,configurable:!0}),t.prototype._handleInvalidTargetState=function(t,e){function r(){var t=h.dequeue();if(void 0===t)return f.Rejection.invalid(e.error()).toPromise();var n=a.services.$q.when(t(e,i,v));return n.then(d).then(function(t){return t||r()})}var n=this,i=s.PathFactory.makeTargetState(t),u=this.router.globals,c=function(){return u.transitionHistory.peekTail()},p=c(),h=new o.Queue(this.invalidCallbacks.slice()),v=new m.ResolveContext(t).injector(),d=function(t){if(t instanceof l.TargetState){var e=t;return e=n.target(e.identifier(),e.params(),e.options()),e.valid()?c()!==p?f.Rejection.superseded().toPromise():n.transitionTo(e.identifier(),e.params(),e.options()):f.Rejection.invalid(e.error()).toPromise()}};return r()},t.prototype.onInvalid=function(t){return this.invalidCallbacks.push(t),function(){n.removeFrom(this.invalidCallbacks)(t)}.bind(this)},t.prototype.reload=function(t){return this.transitionTo(this.current,this.params,{reload:!i.isDefined(t)||t,inherit:!1,notify:!1})},t.prototype.go=function(t,e,r){var i={relative:this.$current,inherit:!0},o=n.defaults(r,i,c.defaultTransOpts);return this.transitionTo(t,e,o)},t.prototype.target=function(t,e,r){if(void 0===r&&(r={}),i.isObject(r.reload)&&!r.reload.name)throw new Error("Invalid reload state object");var n=this.router.stateRegistry;if(r.reloadState=r.reload===!0?n.root():n.matcher.find(r.reload,r.relative),r.reload&&!r.reloadState)throw new Error("No such reload state '"+(i.isString(r.reload)?r.reload:r.reload.name)+"'");var o=n.matcher.find(t,r.relative);return new l.TargetState(t,o,e,r)},t.prototype.transitionTo=function(t,e,r){var i=this;void 0===e&&(e={}),void 0===r&&(r={});var o=this.router,s=o.globals,p=s.transitionHistory;r=n.defaults(r,c.defaultTransOpts),r=n.extend(r,{current:p.peekTail.bind(p)});var h=this.target(t,e,r),v=s.successfulTransitions.peekTail(),d=function(){return[new u.PathNode(i.router.stateRegistry.root())]},m=v?v.treeChanges().to:d();if(!h.exists())return this._handleInvalidTargetState(m,h);if(!h.valid())return n.silentRejection(h.error());var g=function(t){return function(e){if(e instanceof f.Rejection){if(e.type===f.RejectType.IGNORED)return o.urlRouter.update(),a.services.$q.when(s.current);var r=e.detail;if(e.type===f.RejectType.SUPERSEDED&&e.redirected&&r instanceof l.TargetState){var n=t.redirect(r);return n.run()["catch"](g(n))}e.type===f.RejectType.ABORTED&&o.urlRouter.update()}var u=i.defaultErrorHandler();return u(e),a.services.$q.reject(e)}},y=this.router.transitionService.create(m,h),w=y.run()["catch"](g(y));return n.silenceUncaughtInPromise(w),n.extend(w,{transition:y})},t.prototype.is=function(t,e,r){r=n.defaults(r,{relative:this.$current});var o=this.router.stateRegistry.matcher.find(t,r.relative);if(i.isDefined(o))return this.$current===o&&(!i.isDefined(e)||null===e||p.Param.equals(o.parameters(),this.params,e))},t.prototype.includes=function(t,e,r){r=n.defaults(r,{relative:this.$current});var o=i.isString(t)&&h.Glob.fromString(t);if(o){if(!o.matches(this.$current.name))return!1;t=this.$current.name}var a=this.router.stateRegistry.matcher.find(t,r.relative),s=this.$current.includes;if(i.isDefined(a))return!!i.isDefined(s[a.name])&&(!e||v.equalForKeys(p.Param.values(a.parameters(),e),this.params,Object.keys(e)))},t.prototype.href=function(t,e,r){var o={lossy:!0,inherit:!0,absolute:!1,relative:this.$current};r=n.defaults(r,o),e=e||{};var a=this.router.stateRegistry.matcher.find(t,r.relative);if(!i.isDefined(a))return null;r.inherit&&(e=this.params.$inherit(e,this.$current,a));var s=a&&r.lossy?a.navigable:a;return s&&void 0!==s.url&&null!==s.url?this.router.urlRouter.href(s.url,p.Param.values(a.parameters(),e),{absolute:r.absolute}):null},t.prototype.defaultErrorHandler=function(t){return this._defaultErrorHandler=t||this._defaultErrorHandler},t.prototype.get=function(t,e){var r=this.router.stateRegistry;return 0===arguments.length?r.get():r.get(t,e||this.$current)},t}();e.StateService=g},function(t,e,r){"use strict";var n=r(45),i=r(8),o=r(3),a=function(){function t(t){var e=this;this.params=new n.StateParams,this.transitionHistory=new i.Queue([],1),this.successfulTransitions=new i.Queue([],1);var r=function(t){e.transition=t,e.transitionHistory.enqueue(t);var r=function(){e.successfulTransitions.enqueue(t),e.$current=t.$to(),e.current=e.$current.self,o.copy(t.params(),e.params)};t.onSuccess({},r,{priority:1e4});var n=function(){e.transition===t&&(e.transition=null)};t.promise.then(n,n)};t.onBefore({},r)}return t}();e.Globals=a},function(t,e,r){"use strict";var n=r(3),i=function(){function t(t){void 0===t&&(t={}),n.extend(this,t)}return t.prototype.$inherit=function(t,e,r){var i,o=n.ancestors(e,r),a={},s=[];for(var u in o)if(o[u]&&o[u].params&&(i=Object.keys(o[u].params),i.length))for(var c in i)s.indexOf(i[c])>=0||(s.push(i[c]),a[i[c]]=this[i[c]]);return n.extend({},a,t)},t}();e.StateParams=i},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(22)),n(r(28)),n(r(45)),n(r(24))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(21)),n(r(20))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(18)),n(r(19)),n(r(17))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(40)),n(r(42)),n(r(39)),n(r(41)),n(r(38)),n(r(43)),n(r(14))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(16)),n(r(15)),n(r(10)),n(r(11)),n(r(13)),n(r(30))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(27)),n(r(23)),n(r(26)),n(r(29))},function(t,e,r){"use strict";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}n(r(37))},function(t,e,r){"use strict";function n(t){var e=l.services.$injector,r=e.get("$controller"),n=e.instantiate;try{var i;return e.instantiate=function(t){e.instantiate=n,i=e.annotate(t)},r(t,{$scope:{}}),i}finally{e.instantiate=n}}function i(t){function e(e,n,i,o,a,s){return o.$on("$locationChangeSuccess",function(t){return r.forEach(function(e){return e(t)})}),l.services.locationConfig.html5Mode=function(){var e=t.html5Mode();return e=v.isObject(e)?e.enabled:e,e&&i.history},l.services.location.setUrl=function(t,r){void 0===r&&(r=!1),e.url(t),r&&e.replace()},l.services.template.get=function(t){return a.get(t,{cache:s,headers:{Accept:"text/html"}}).then(h.prop("data"))},p.bindFunctions(e,l.services.location,e,["replace","url","path","search","hash"]),p.bindFunctions(e,l.services.locationConfig,e,["port","protocol","host"]),p.bindFunctions(n,l.services.locationConfig,n,["baseHref"]),R}R=new f.UIRouter,R.stateProvider=new w.StateProvider(R.stateRegistry,R.stateService),R.stateRegistry.decorator("views",g.ng1ViewsBuilder),R.stateRegistry.decorator("onExit",b.getStateHookBuilder("onExit")),R.stateRegistry.decorator("onRetain",b.getStateHookBuilder("onRetain")),R.stateRegistry.decorator("onEnter",b.getStateHookBuilder("onEnter")),R.viewService.viewConfigFactory("ng1",g.ng1ViewConfigFactory),p.bindFunctions(t,l.services.locationConfig,t,["hashPrefix"]);var r=[];l.services.location.onChange=function(t){return r.push(t),function(){return p.removeFrom(r)(t)}},this.$get=e,e.$inject=["$location","$browser","$sniffer","$rootScope","$http","$templateCache"]}function o(t,e){l.services.$injector=t,l.services.$q=e}function a(){return R.urlRouterProvider.$get=function(){return R.urlRouter.update(!0),this.interceptDeferred||R.urlRouter.listen(),R.urlRouter},R.urlRouterProvider}function s(){return R.stateProvider.$get=function(){return R.stateRegistry.stateQueue.autoFlush(R.stateService),R.stateService},R.stateProvider}function u(){return R.transitionService.$get=function(){return R.transitionService},R.transitionService}function c(t){t.$watch(function(){m.trace.approximateDigests++})}var f=r(25),l=r(6),p=r(3),h=r(5),v=r(4),d=r(54),m=r(12),g=r(55),y=r(56),w=r(58),b=r(59),$=r(57);$.module("ui.router.angular1",[]);$.module("ui.router.util",["ng","ui.router.init"]),$.module("ui.router.router",["ui.router.util"]),$.module("ui.router.state",["ui.router.router","ui.router.util","ui.router.angular1"]),$.module("ui.router",["ui.router.init","ui.router.state","ui.router.angular1"]),$.module("ui.router.compat",["ui.router"]),e.annotateController=n;var R=null;i.$inject=["$locationProvider"],$.module("ui.router.init",[]).provider("$uiRouter",i),o.$inject=["$injector","$q"],$.module("ui.router.init").run(o),$.module("ui.router.init").run(["$uiRouter",function(t){}]),$.module("ui.router.util").provider("$urlMatcherFactory",["$uiRouterProvider",function(){return R.urlMatcherFactory}]),$.module("ui.router.util").run(["$urlMatcherFactory",function(t){}]),$.module("ui.router.router").provider("$urlRouter",["$uiRouterProvider",a]),$.module("ui.router.router").run(["$urlRouter",function(t){}]),$.module("ui.router.state").provider("$state",["$uiRouterProvider",s]),$.module("ui.router.state").run(["$state",function(t){}]),$.module("ui.router.state").factory("$stateParams",["$uiRouter",function(t){return t.globals.params}]),$.module("ui.router.state").provider("$transitions",["$uiRouterProvider",u]),$.module("ui.router.util").factory("$templateFactory",["$uiRouter",function(){return new y.TemplateFactory}]),$.module("ui.router").factory("$view",function(){return R.viewService}),$.module("ui.router").factory("$resolve",d.resolveFactory),$.module("ui.router").service("$trace",function(){return m.trace}),c.$inject=["$rootScope"],e.watchDigests=c,$.module("ui.router").run(c),e.getLocals=function(t){var e=t.getTokens().filter(v.isString),r=e.map(function(e){return[e,t.getResolvable(e).data]});return r.reduce(p.applyPairs,{})}},function(t,e,r){"use strict";var n=r(42),i=r(21),o=r(17),a=r(3),s=r(40),u={resolve:function(t,e,r){void 0===e&&(e={});var u=new i.PathNode(new n.State({params:{},resolvables:[]})),c=new i.PathNode(new n.State({params:{},resolvables:[]})),f=new o.ResolveContext([u,c]);f.addResolvables(s.resolvablesBuilder({resolve:t}),c.state);var l=function(t){var r=function(t){return s.resolvablesBuilder({resolve:a.mapObj(t,function(t){return function(){return t}})})};f.addResolvables(r(t),u.state),f.addResolvables(r(e),c.state);var n=function(t,e){return t[e.token]=e.value,t};return f.resolvePath().then(function(t){return t.reduce(n,{})})};return r?r.then(l):l({})}};e.resolveFactory=function(){return u}},function(t,e,r){"use strict";function n(t){var e=["templateProvider","templateUrl","template","notify","async"],r=["controller","controllerProvider","controllerAs","resolveAs"],n=["component","bindings"],c=e.concat(r),f=n.concat(c),l={},p=t.views||{$default:o.pick(t,f)};return o.forEach(p,function(e,r){if(r=r||"$default",u.isString(e)&&(e={component:e}),Object.keys(e).length){if(e.component){if(c.map(function(t){return u.isDefined(e[t])}).reduce(o.anyTrueR,!1))throw new Error("Cannot combine: "+n.join("|")+" with: "+c.join("|")+" in stateview: 'name@"+t.name+"'");e.templateProvider=["$injector",function(t){var r=function(t){return e.bindings&&e.bindings[t]||t},n=v.version.minor>=3?"::":"",o=function(t){var e=a.kebobString(t.name),i=r(t.name);return"@"===t.type?e+"='{{"+n+"$resolve."+i+"}}'":e+"='"+n+"$resolve."+i+"'"},s=i(t,e.component).map(o).join(" "),u=a.kebobString(e.component);return"<"+u+" "+s+"></"+u+">"}]}e.resolveAs=e.resolveAs||"$resolve",e.$type="ng1",e.$context=t,e.$name=r;var f=s.ViewService.normalizeUIViewTarget(e.$context,e.$name);e.$uiViewName=f.uiViewName,e.$uiViewContextAnchor=f.uiViewContextAnchor,l[r]=e}}),l}function i(t,e){var r=t.get(e+"Directive");if(!r||!r.length)throw new Error("Unable to find component named '"+e+"'");return r.map(m).reduce(o.unnestR,[])}var o=r(3),a=r(9),s=r(37),u=r(4),c=r(6),f=r(12),l=r(56),p=r(17),h=r(19),v=r(57);e.ng1ViewConfigFactory=function(t,e){return[new y(t,e)]},e.ng1ViewsBuilder=n;var d=function(t){return Object.keys(t||{}).map(function(e){return[e,/^([=<@])[?]?(.*)/.exec(t[e])]}).filter(function(t){return u.isDefined(t)&&u.isDefined(t[1])}).map(function(t){return{name:t[1][2]||t[0],type:t[1][1]}})},m=function(t){return d(u.isObject(t.bindToController)?t.bindToController:t.scope)},g=0,y=function(){function t(t,e){this.path=t,this.viewDecl=e,this.$id=g++,this.loaded=!1}return t.prototype.load=function(){var t=this,e=c.services.$q;if(!this.hasTemplate())throw new Error("No template configuration specified for '"+this.viewDecl.$uiViewName+"@"+this.viewDecl.$uiViewContextAnchor+"'");var r=new p.ResolveContext(this.path),n=this.path.reduce(function(t,e){return o.extend(t,e.paramValues)},{}),i={template:e.when(this.getTemplate(n,new l.TemplateFactory,r)),controller:e.when(this.getController(r))};return e.all(i).then(function(e){return f.trace.traceViewServiceEvent("Loaded",t),t.controller=e.controller,t.template=e.template,t})},t.prototype.hasTemplate=function(){return!!(this.viewDecl.template||this.viewDecl.templateUrl||this.viewDecl.templateProvider)},t.prototype.getTemplate=function(t,e,r){return e.fromConfig(this.viewDecl,t,r)},t.prototype.getController=function(t){var e=this.viewDecl.controllerProvider;if(!u.isInjectable(e))return this.viewDecl.controller;var r=c.services.$injector.annotate(e),n=u.isArray(e)?o.tail(e):e,i=new h.Resolvable("",n,r);return i.get(t)},t}();e.Ng1ViewConfig=y},function(t,e,r){"use strict";var n=r(4),i=r(6),o=r(3),a=r(19),s=function(){function t(){}return t.prototype.fromConfig=function(t,e,r){return n.isDefined(t.template)?this.fromString(t.template,e):n.isDefined(t.templateUrl)?this.fromUrl(t.templateUrl,e):n.isDefined(t.templateProvider)?this.fromProvider(t.templateProvider,e,r):null},t.prototype.fromString=function(t,e){return n.isFunction(t)?t(e):t},t.prototype.fromUrl=function(t,e){return n.isFunction(t)&&(t=t(e)),null==t?null:i.services.template.get(t)},t.prototype.fromProvider=function(t,e,r){var s=i.services.$injector.annotate(t),u=n.isArray(t)?o.tail(t):t,c=new a.Resolvable("",u,s);return c.get(r)},t}();e.TemplateFactory=s},function(e,r){e.exports=t},function(t,e,r){"use strict";var n=r(4),i=r(3),o=function(){function t(e,r){this.stateRegistry=e,this.stateService=r,i.bindFunctions(t.prototype,this,this)}return t.prototype.decorator=function(t,e){return this.stateRegistry.decorator(t,e)||this},t.prototype.state=function(t,e){return n.isObject(t)?e=t:e.name=t,this.stateRegistry.register(e),this},t.prototype.onInvalid=function(t){return this.stateService.onInvalid(t)},t}();e.StateProvider=o},function(t,e,r){"use strict";var n=r(6),i=r(53),o=r(17),a=r(3);e.getStateHookBuilder=function(t){return function(e,r){function s(t,e){var r=new o.ResolveContext(t.treeChanges().to);return n.services.$injector.invoke(u,this,a.extend({$state$:e},i.getLocals(r)))}var u=e[t];return u?s:void 0}}},function(t,e,r){"use strict";function n(t,e){var r,n=t.match(/^\s*({[^}]*})\s*$/);if(n&&(t=e+"("+n[1]+")"),r=t.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!r||4!==r.length)throw new Error("Invalid state ref '"+t+"'");return{state:r[1],paramExpr:r[3]||null}}function i(t){var e=t.parent().inheritedData("$uiView"),r=l.parse("$cfg.path")(e);return r?c.tail(r).state.name:void 0}function o(t){var e="[object SVGAnimatedString]"===Object.prototype.toString.call(t.prop("href")),r="FORM"===t[0].nodeName;return{attr:r?"action":e?"xlink:href":"href",isAnchor:"A"===t.prop("tagName").toUpperCase(),clickable:!r}}function a(t,e,r,n,i){return function(o){var a=o.which||o.button,s=i();if(!(a>1||o.ctrlKey||o.metaKey||o.shiftKey||t.attr("target"))){var u=r(function(){e.go(s.state,s.params,s.options)});o.preventDefault();var c=n.isAnchor&&!s.href?1:0;o.preventDefault=function(){c--<=0&&r.cancel(u)}}}}function s(t,e){return{relative:i(t)||e.$current,inherit:!0,source:"sref"}}var u=r(57),c=r(3),f=r(4),l=r(5),p=["$state","$timeout",function(t,e){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,i,f,l){var p,h=n(f.uiSref,t.current.name),v={state:h.state,href:null,params:null,options:null},d=o(i),m=l[1]||l[0],g=null;v.options=c.extend(s(i,t),f.uiSrefOpts?r.$eval(f.uiSrefOpts):{});var y=function(e){e&&(v.params=u.copy(e)),v.href=t.href(h.state,v.params,v.options),g&&g(),m&&(g=m.$$addStateInfo(h.state,v.params)),null!==v.href&&f.$set(d.attr,v.href)};h.paramExpr&&(r.$watch(h.paramExpr,function(t){t!==v.params&&y(t)},!0),v.params=u.copy(r.$eval(h.paramExpr))),y(),d.clickable&&(p=a(i,t,e,d,function(){return v}),i.on("click",p),r.$on("$destroy",function(){i.off("click",p)}))}}}],h=["$state","$timeout",function(t,e){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,n,i,s){function u(e){v.state=e[0],v.params=e[1],v.options=e[2],v.href=t.href(v.state,v.params,v.options),d&&d(),l&&(d=l.$$addStateInfo(v.state,v.params)),v.href&&i.$set(f.attr,v.href)}var c,f=o(n),l=s[1]||s[0],p=[i.uiState,i.uiStateParams||null,i.uiStateOpts||null],h="["+p.map(function(t){return t||"null"}).join(", ")+"]",v={state:null,params:null,options:null,href:null},d=null;r.$watch(h,u,!0),u(r.$eval(h)),f.clickable&&(c=a(n,t,e,f,function(){return v}),n.on("click",c),r.$on("$destroy",function(){n.off("click",c)}))}}}],v=["$state","$stateParams","$interpolate","$transitions","$uiRouter",function(t,e,r,o,a){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(e,s,u,l){function p(t){t.promise.then(d)}function h(e,r,n){var o=t.get(e,i(s)),a=v(e,r),u={state:o||{name:e},params:r,hash:a};return R.push(u),S[a]=n,function(){var t=R.indexOf(u);t!==-1&&R.splice(t,1)}}function v(t,r){if(!f.isString(t))throw new Error("state should be a string");return f.isObject(r)?t+c.toJson(r):(r=e.$eval(r),f.isObject(r)?t+c.toJson(r):t)}function d(){for(var t=0;t<R.length;t++)y(R[t].state,R[t].params)?m(s,S[R[t].hash]):g(s,S[R[t].hash]),w(R[t].state,R[t].params)?m(s,b):g(s,b)}function m(t,e){l(function(){t.addClass(e)})}function g(t,e){t.removeClass(e)}function y(e,r){return t.includes(e.name,r)}function w(e,r){return t.is(e.name,r)}var b,$,R=[],S={};b=r(u.uiSrefActiveEq||"",!1)(e);try{$=e.$eval(u.uiSrefActive)}catch(E){}$=$||r(u.uiSrefActive||"",!1)(e),f.isObject($)&&c.forEach($,function(r,i){if(f.isString(r)){var o=n(r,t.current.name);h(o.state,e.$eval(o.paramExpr),i)}}),this.$$addStateInfo=function(t,e){if(!(f.isObject($)&&R.length>0)){var r=h(t,e,$);return d(),r}},e.$on("$stateChangeSuccess",d),e.$on("$destroy",o.onStart({},p)),a.globals.transition&&p(a.globals.transition),d()}]}}];u.module("ui.router.state").directive("uiSref",p).directive("uiSrefActive",v).directive("uiSrefActiveEq",v).directive("uiState",h)},function(t,e,r){"use strict";function n(t){var e=function(e,r,n){return t.is(e,r,n)};return e.$stateful=!0,e}function i(t){var e=function(e,r,n){return t.includes(e,r,n)};return e.$stateful=!0,e}var o=r(57);n.$inject=["$state"],e.$IsStateFilter=n,i.$inject=["$state"],e.$IncludedByStateFilter=i,o.module("ui.router.state").filter("isState",n).filter("includedByState",i)},function(t,e,r){"use strict";function n(t,e,r,n,u){var v=c.parse("viewDecl.controllerAs"),d=c.parse("viewDecl.resolveAs");return{restrict:"ECA",priority:-400,compile:function(n){var u=n.html();return function(n,c){var m=c.data("$uiView");if(m){var g=m.$cfg||{viewDecl:{}};c.html(g.template||u),s.trace.traceUIViewFill(m.$uiView,c.html());var y=t(c.contents()),w=g.controller,b=v(g),$=d(g),R=g.path&&new f.ResolveContext(g.path),S=R&&p.getLocals(R);if(n[$]=S,w){var E=e(w,o.extend({},S,{$scope:n,$element:c}));b&&(n[b]=E,n[b][$]=S),c.data("$ngControllerController",E),c.children().data("$ngControllerController",E),i(r,E,n,g)}if(a.isString(g.viewDecl.component))var x=g.viewDecl.component,k=l.kebobString(x),P=function(){var t=[].slice.call(c[0].children).filter(function(t){return t&&t.tagName&&t.tagName.toLowerCase()===k});return t&&h.element(t).data("$"+x+"Controller")},_=n.$watch(P,function(t){t&&(i(r,t,n,g),_())});y(n)}}}}}function i(t,e,r,n){!a.isFunction(e.$onInit)||n.viewDecl.component&&d||e.$onInit();var i=o.tail(n.path).state.self,s={bind:e};if(a.isFunction(e.uiOnParamsChanged)){var u=new f.ResolveContext(n.path),c=u.getResolvable("$transition$").data,l=function(t){if(t!==c&&t.exiting().indexOf(i)===-1){var r=t.params("to"),n=t.params("from"),a=t.treeChanges().to.map(function(t){return t.paramSchema}).reduce(o.unnestR,[]),s=t.treeChanges().from.map(function(t){return t.paramSchema}).reduce(o.unnestR,[]),u=a.filter(function(t){var e=s.indexOf(t);return e===-1||!s[e].type.equals(r[t.id],n[t.id])});if(u.length){var f=u.map(function(t){return t.id});e.uiOnParamsChanged(o.filter(r,function(t,e){return f.indexOf(e)!==-1}),t)}}};r.$on("$destroy",t.onSuccess({},l,s))}if(a.isFunction(e.uiCanExit)){var p={exiting:i.name};r.$on("$destroy",t.onBefore(p,e.uiCanExit,s))}}var o=r(3),a=r(4),s=r(12),u=r(55),c=r(5),f=r(17),l=r(9),p=r(53),h=r(57),v=["$view","$animate","$uiViewScroll","$interpolate","$q",function(t,e,r,n,i){function o(t,r){return{enter:function(t,r,n){h.version.minor>2?e.enter(t,null,r).then(n):e.enter(t,null,r,n)},leave:function(t,r){h.version.minor>2?e.leave(t).then(r):e.leave(t,r)}}}function f(t,e){return t===e}var l={$cfg:{viewDecl:{$context:t.rootContext()}},$uiView:{}},p={count:0,restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(e,h,v){return function(e,h,d){function m(t){(!t||t instanceof u.Ng1ViewConfig)&&(f(k,t)||(s.trace.traceUIViewConfigUpdated(C,t&&t.viewDecl&&t.viewDecl.$context),k=t,y(t)))}function g(){if(w&&(s.trace.traceUIViewEvent("Removing (previous) el",w.data("$uiView")),w.remove(),w=null),$&&(s.trace.traceUIViewEvent("Destroying scope",C),$.$destroy(),$=null),b){var t=b.data("$uiViewAnim");s.trace.traceUIViewEvent("Animate out",t),x.leave(b,function(){t.$$animLeave.resolve(),w=null}),w=b,b=null}}function y(t){var n=e.$new(),o=i.defer(),s=i.defer(),u={$cfg:t,$uiView:C},c={$animEnter:o.promise,$animLeave:s.promise,$$animLeave:s},f=v(n,function(t){t.data("$uiViewAnim",c),t.data("$uiView",u),
1778 1778 x.enter(t,h,function(){o.resolve(),$&&$.$emit("$viewContentAnimationEnded"),(a.isDefined(E)&&!E||e.$eval(E))&&r(t)}),g()});b=f,$=n,$.$emit("$viewContentLoaded",t||k),$.$eval(S)}var w,b,$,R,S=d.onload||"",E=d.autoscroll,x=o(d,e),k=void 0,P=h.inheritedData("$uiView")||l,_=n(d.uiView||d.name||"")(e)||"$default",C={$type:"ng1",id:p.count++,name:_,fqn:P.$uiView.fqn?P.$uiView.fqn+"."+_:_,config:null,configUpdated:m,get creationContext(){return c.parse("$cfg.viewDecl.$context")(P)}};s.trace.traceUIViewEvent("Linking",C),h.data("$uiView",{$uiView:C}),y(),R=t.registerUIView(C),e.$on("$destroy",function(){s.trace.traceUIViewEvent("Destroying/Unregistering",C),R()})}}};return p}];n.$inject=["$compile","$controller","$transitions","$view","$timeout"];var d="function"==typeof h.module("ui.router").component;h.module("ui.router.state").directive("uiView",v),h.module("ui.router.state").directive("uiView",n)},function(t,e,r){"use strict";function n(){var t=!1;this.useAnchorScroll=function(){t=!0},this.$get=["$anchorScroll","$timeout",function(e,r){return t?e:function(t){return r(function(){t[0].scrollIntoView()},0,!1)}}]}var i=r(57);i.module("ui.router.state").provider("$uiViewScroll",n)}])});
1779 1779 //# sourceMappingURL=angular-ui-router.min.js.map
1780 1780 ;angular.module('angular-toArrayFilter', [])
1781 1781
1782 1782 .filter('toArray', function () {
1783 1783 return function (obj, addKey) {
1784 1784 if (!angular.isObject(obj)) return obj;
1785 1785 if ( addKey === false ) {
1786 1786 return Object.keys(obj).map(function(key) {
1787 1787 return obj[key];
1788 1788 });
1789 1789 } else {
1790 1790 return Object.keys(obj).map(function (key) {
1791 1791 var value = obj[key];
1792 1792 return angular.isObject(value) ?
1793 1793 Object.defineProperty(value, '$key', { enumerable: false, value: key}) :
1794 1794 { $key: key, $value: value };
1795 1795 });
1796 1796 }
1797 1797 };
1798 1798 });
1799 1799 ;//Copyright (C) 2012 Kory Nunn
1800 1800
1801 1801 //Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
1802 1802
1803 1803 //The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
1804 1804
1805 1805 //THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1806 1806
1807 1807 /*
1808 1808
1809 1809 This code is not formatted for readability, but rather run-speed and to assist compilers.
1810 1810
1811 1811 However, the code's intention should be transparent.
1812 1812
1813 1813 *** IE SUPPORT ***
1814 1814
1815 1815 If you require this library to work in IE7, add the following after declaring crel.
1816 1816
1817 1817 var testDiv = document.createElement('div'),
1818 1818 testLabel = document.createElement('label');
1819 1819
1820 1820 testDiv.setAttribute('class', 'a');
1821 1821 testDiv['className'] !== 'a' ? crel.attrMap['class'] = 'className':undefined;
1822 1822 testDiv.setAttribute('name','a');
1823 1823 testDiv['name'] !== 'a' ? crel.attrMap['name'] = function(element, value){
1824 1824 element.id = value;
1825 1825 }:undefined;
1826 1826
1827 1827
1828 1828 testLabel.setAttribute('for', 'a');
1829 1829 testLabel['htmlFor'] !== 'a' ? crel.attrMap['for'] = 'htmlFor':undefined;
1830 1830
1831 1831
1832 1832
1833 1833 */
1834 1834
1835 1835 (function (root, factory) {
1836 1836 if (typeof exports === 'object') {
1837 1837 if (!root.window) {
1838 1838 var jsdom = require('jsdom').jsdom;
1839 1839 root.window = jsdom().parentWindow;
1840 1840 }
1841 1841 module.exports = factory(root.window);
1842 1842 } else if (typeof define === 'function' && define.amd) {
1843 1843 define(factory.bind(null, window));
1844 1844 } else {
1845 1845 root.crel = factory(root.window);
1846 1846 }
1847 1847 }(this, function (window) {
1848 1848 // based on http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
1849 1849 var isNode = typeof Node === 'object'
1850 1850 ? function (object) { return object instanceof Node }
1851 1851 : function (object) {
1852 1852 return object
1853 1853 && typeof object === 'object'
1854 1854 && typeof object.nodeType === 'number'
1855 1855 && typeof object.nodeName === 'string';
1856 1856 };
1857 1857
1858 1858 function crel(){
1859 1859 var document = window.document,
1860 1860 args = arguments, //Note: assigned to a variable to assist compilers. Saves about 40 bytes in closure compiler. Has negligable effect on performance.
1861 1861 element = document.createElement(args[0]),
1862 1862 child,
1863 1863 settings = args[1],
1864 1864 childIndex = 2,
1865 1865 argumentsLength = args.length,
1866 1866 attributeMap = crel.attrMap;
1867 1867
1868 1868 // shortcut
1869 1869 if(argumentsLength === 1){
1870 1870 return element;
1871 1871 }
1872 1872
1873 1873 if(typeof settings !== 'object' || isNode(settings)) {
1874 1874 --childIndex;
1875 1875 settings = null;
1876 1876 }
1877 1877
1878 1878 // shortcut if there is only one child that is a string
1879 1879 if((argumentsLength - childIndex) === 1 && typeof args[childIndex] === 'string' && element.textContent !== undefined){
1880 1880 element.textContent = args[childIndex];
1881 1881 }else{
1882 1882 for(; childIndex < argumentsLength; ++childIndex){
1883 1883 child = args[childIndex];
1884 1884
1885 1885 if(child == null){
1886 1886 continue;
1887 1887 }
1888 1888
1889 1889 if(!isNode(child)){
1890 1890 child = document.createTextNode(child);
1891 1891 }
1892 1892
1893 1893 element.appendChild(child);
1894 1894 }
1895 1895 }
1896 1896
1897 1897 for(var key in settings){
1898 1898 if(!attributeMap[key]){
1899 1899 element.setAttribute(key, settings[key]);
1900 1900 }else{
1901 1901 var attr = crel.attrMap[key];
1902 1902 if(typeof attr === 'function'){
1903 1903 attr(element, settings[key]);
1904 1904 }else{
1905 1905 element.setAttribute(attr, settings[key]);
1906 1906 }
1907 1907 }
1908 1908 }
1909 1909
1910 1910 return element;
1911 1911 }
1912 1912
1913 1913 // Used for mapping one kind of attribute to the supported version of that in bad browsers.
1914 1914 // String referenced so that compilers maintain the property name.
1915 1915 crel['attrMap'] = {};
1916 1916
1917 1917 // String referenced so that compilers maintain the property name.
1918 1918 crel["isNode"] = isNode;
1919 1919
1920 1920 return crel;
1921 1921 }));
1922 1922
1923 1923 ;/*globals define, module, require, document*/
1924 1924 (function (root, factory) {
1925 1925 "use strict";
1926 1926 if (typeof define === 'function' && define.amd) {
1927 1927 define([], factory);
1928 1928 } else if (typeof module !== 'undefined' && module.exports) {
1929 1929 module.exports = factory();
1930 1930 } else {
1931 1931 root.JsonHuman = factory();
1932 1932 }
1933 1933 }(this, function () {
1934 1934 "use strict";
1935 1935
1936 1936 var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
1937 1937
1938 1938 function makePrefixer(prefix) {
1939 1939 return function (name) {
1940 1940 return prefix + "-" + name;
1941 1941 };
1942 1942 }
1943 1943
1944 1944 function isArray(obj) {
1945 1945 return toString.call(obj) === '[object Array]';
1946 1946 }
1947 1947
1948 1948 function sn(tagName, className, data) {
1949 1949 var result = document.createElement(tagName);
1950 1950
1951 1951 result.className = className;
1952 1952 result.appendChild(document.createTextNode("" + data));
1953 1953
1954 1954 return result;
1955 1955 }
1956 1956
1957 1957 function scn(tagName, className, child) {
1958 1958 var result = document.createElement(tagName),
1959 1959 i, len;
1960 1960
1961 1961 result.className = className;
1962 1962
1963 1963 if (isArray(child)) {
1964 1964 for (i = 0, len = child.length; i < len; i += 1) {
1965 1965 result.appendChild(child[i]);
1966 1966 }
1967 1967 } else {
1968 1968 result.appendChild(child);
1969 1969 }
1970 1970
1971 1971 return result;
1972 1972 }
1973 1973
1974 1974 function linkNode(child, href, target){
1975 1975 var a = scn("a", HYPERLINK_CLASS_NAME, child);
1976 1976 a.setAttribute('href', href);
1977 1977 a.setAttribute('target', target);
1978 1978 return a;
1979 1979 }
1980 1980
1981 1981 var toString = Object.prototype.toString,
1982 1982 prefixer = makePrefixer("jh"),
1983 1983 p = prefixer,
1984 1984 ARRAY = 2,
1985 1985 BOOL = 4,
1986 1986 INT = 8,
1987 1987 FLOAT = 16,
1988 1988 STRING = 32,
1989 1989 OBJECT = 64,
1990 1990 SPECIAL_OBJECT = 128,
1991 1991 FUNCTION = 256,
1992 1992 UNK = 1,
1993 1993
1994 1994 STRING_CLASS_NAME = p("type-string"),
1995 1995 STRING_EMPTY_CLASS_NAME = p("type-string") + " " + p("empty"),
1996 1996
1997 1997 BOOL_TRUE_CLASS_NAME = p("type-bool-true"),
1998 1998 BOOL_FALSE_CLASS_NAME = p("type-bool-false"),
1999 1999 BOOL_IMAGE = p("type-bool-image"),
2000 2000 INT_CLASS_NAME = p("type-int") + " " + p("type-number"),
2001 2001 FLOAT_CLASS_NAME = p("type-float") + " " + p("type-number"),
2002 2002
2003 2003 OBJECT_CLASS_NAME = p("type-object"),
2004 2004 OBJ_KEY_CLASS_NAME = p("key") + " " + p("object-key"),
2005 2005 OBJ_VAL_CLASS_NAME = p("value") + " " + p("object-value"),
2006 2006 OBJ_EMPTY_CLASS_NAME = p("type-object") + " " + p("empty"),
2007 2007
2008 2008 FUNCTION_CLASS_NAME = p("type-function"),
2009 2009
2010 2010 ARRAY_KEY_CLASS_NAME = p("key") + " " + p("array-key"),
2011 2011 ARRAY_VAL_CLASS_NAME = p("value") + " " + p("array-value"),
2012 2012 ARRAY_CLASS_NAME = p("type-array"),
2013 2013 ARRAY_EMPTY_CLASS_NAME = p("type-array") + " " + p("empty"),
2014 2014
2015 2015 HYPERLINK_CLASS_NAME = p('a'),
2016 2016
2017 2017 UNKNOWN_CLASS_NAME = p("type-unk");
2018 2018
2019 2019 function getType(obj) {
2020 2020 var type = typeof obj;
2021 2021
2022 2022 switch (type) {
2023 2023 case "boolean":
2024 2024 return BOOL;
2025 2025 case "string":
2026 2026 return STRING;
2027 2027 case "number":
2028 2028 return (obj % 1 === 0) ? INT : FLOAT;
2029 2029 case "function":
2030 2030 return FUNCTION;
2031 2031 default:
2032 2032 if (isArray(obj)) {
2033 2033 return ARRAY;
2034 2034 } else if (obj === Object(obj)) {
2035 2035 if (obj.constructor === Object) {
2036 2036 return OBJECT;
2037 2037 }
2038 2038 return OBJECT | SPECIAL_OBJECT
2039 2039 } else {
2040 2040 return UNK;
2041 2041 }
2042 2042 }
2043 2043 }
2044 2044
2045 2045 function _format(data, options, parentKey) {
2046 2046
2047 2047 var result, container, key, keyNode, valNode, len, childs, tr, value,
2048 2048 isEmpty = true,
2049 2049 isSpecial = false,
2050 2050 accum = [],
2051 2051 type = getType(data);
2052 2052
2053 2053 // Initialized & used only in case of objects & arrays
2054 2054 var hyperlinksEnabled, aTarget, hyperlinkKeys ;
2055 2055
2056 2056 if (type === BOOL) {
2057 2057 var boolOpt = options.bool;
2058 2058 container = document.createElement('div');
2059 2059
2060 2060 if (boolOpt.showImage) {
2061 2061 var img = document.createElement('img');
2062 2062 img.setAttribute('class', BOOL_IMAGE);
2063 2063
2064 2064 img.setAttribute('src',
2065 2065 '' + (data ? boolOpt.img.true : boolOpt.img.false));
2066 2066
2067 2067 container.appendChild(img);
2068 2068 }
2069 2069
2070 2070 if (boolOpt.showText) {
2071 2071 container.appendChild(data ?
2072 2072 sn("span", BOOL_TRUE_CLASS_NAME, boolOpt.text.true) :
2073 2073 sn("span", BOOL_FALSE_CLASS_NAME, boolOpt.text.false));
2074 2074 }
2075 2075
2076 2076 result = container;
2077 2077
2078 2078 } else if (type === STRING) {
2079 2079 if (data === "") {
2080 2080 result = sn("span", STRING_EMPTY_CLASS_NAME, "(Empty Text)");
2081 2081 } else {
2082 2082 result = sn("span", STRING_CLASS_NAME, data);
2083 2083 }
2084 2084 } else if (type === INT) {
2085 2085 result = sn("span", INT_CLASS_NAME, data);
2086 2086 } else if (type === FLOAT) {
2087 2087 result = sn("span", FLOAT_CLASS_NAME, data);
2088 2088 } else if (type & OBJECT) {
2089 2089 if (type & SPECIAL_OBJECT) {
2090 2090 isSpecial = true;
2091 2091 }
2092 2092 childs = [];
2093 2093
2094 2094 aTarget = options.hyperlinks.target;
2095 2095 hyperlinkKeys = options.hyperlinks.keys;
2096 2096
2097 2097 // Is Hyperlink Key
2098 2098 hyperlinksEnabled =
2099 2099 options.hyperlinks.enable &&
2100 2100 hyperlinkKeys &&
2101 2101 hyperlinkKeys.length > 0;
2102 2102
2103 2103 for (key in data) {
2104 2104 isEmpty = false;
2105 2105
2106 2106 value = data[key];
2107 2107
2108 2108 valNode = _format(value, options, key);
2109 2109 keyNode = sn("th", OBJ_KEY_CLASS_NAME, key);
2110 2110
2111 2111 if( hyperlinksEnabled &&
2112 2112 typeof(value) === 'string' &&
2113 2113 indexOf.call(hyperlinkKeys, key) >= 0){
2114 2114
2115 2115 valNode = scn("td", OBJ_VAL_CLASS_NAME, linkNode(valNode, value, aTarget));
2116 2116 } else {
2117 2117 valNode = scn("td", OBJ_VAL_CLASS_NAME, valNode);
2118 2118 }
2119 2119
2120 2120 tr = document.createElement("tr");
2121 2121 tr.appendChild(keyNode);
2122 2122 tr.appendChild(valNode);
2123 2123
2124 2124 childs.push(tr);
2125 2125 }
2126 2126
2127 2127 if (isSpecial) {
2128 2128 result = sn('span', STRING_CLASS_NAME, data.toString())
2129 2129 } else if (isEmpty) {
2130 2130 result = sn("span", OBJ_EMPTY_CLASS_NAME, "(Empty Object)");
2131 2131 } else {
2132 2132 result = scn("table", OBJECT_CLASS_NAME, scn("tbody", '', childs));
2133 2133 }
2134 2134 } else if (type === FUNCTION) {
2135 2135 result = sn("span", FUNCTION_CLASS_NAME, data);
2136 2136 } else if (type === ARRAY) {
2137 2137 if (data.length > 0) {
2138 2138 childs = [];
2139 2139 var showArrayIndices = options.showArrayIndex;
2140 2140
2141 2141 aTarget = options.hyperlinks.target;
2142 2142 hyperlinkKeys = options.hyperlinks.keys;
2143 2143
2144 2144 // Hyperlink of arrays?
2145 2145 hyperlinksEnabled = parentKey && options.hyperlinks.enable &&
2146 2146 hyperlinkKeys &&
2147 2147 hyperlinkKeys.length > 0 &&
2148 2148 indexOf.call(hyperlinkKeys, parentKey) >= 0;
2149 2149
2150 2150 for (key = 0, len = data.length; key < len; key += 1) {
2151 2151
2152 2152 keyNode = sn("th", ARRAY_KEY_CLASS_NAME, key);
2153 2153 value = data[key];
2154 2154
2155 2155 if (hyperlinksEnabled && typeof(value) === "string") {
2156 2156 valNode = _format(value, options, key);
2157 2157 valNode = scn("td", ARRAY_VAL_CLASS_NAME,
2158 2158 linkNode(valNode, value, aTarget));
2159 2159 } else {
2160 2160 valNode = scn("td", ARRAY_VAL_CLASS_NAME,
2161 2161 _format(value, options, key));
2162 2162 }
2163 2163
2164 2164 tr = document.createElement("tr");
2165 2165
2166 2166 if (showArrayIndices) {
2167 2167 tr.appendChild(keyNode);
2168 2168 }
2169 2169 tr.appendChild(valNode);
2170 2170
2171 2171 childs.push(tr);
2172 2172 }
2173 2173
2174 2174 result = scn("table", ARRAY_CLASS_NAME, scn("tbody", '', childs));
2175 2175 } else {
2176 2176 result = sn("span", ARRAY_EMPTY_CLASS_NAME, "(Empty List)");
2177 2177 }
2178 2178 } else {
2179 2179 result = sn("span", UNKNOWN_CLASS_NAME, data);
2180 2180 }
2181 2181
2182 2182 return result;
2183 2183 }
2184 2184
2185 2185 function format(data, options) {
2186 2186 options = validateOptions(options || {});
2187 2187
2188 2188 var result;
2189 2189
2190 2190 result = _format(data, options);
2191 2191 result.className = result.className + " " + prefixer("root");
2192 2192
2193 2193 return result;
2194 2194 }
2195 2195
2196 2196 function validateOptions(options){
2197 2197 options = validateArrayIndexOption(options);
2198 2198 options = validateHyperlinkOptions(options);
2199 2199 options = validateBoolOptions(options);
2200 2200
2201 2201 // Add any more option validators here
2202 2202
2203 2203 return options;
2204 2204 }
2205 2205
2206 2206
2207 2207 function validateArrayIndexOption(options) {
2208 2208 if(options.showArrayIndex === undefined){
2209 2209 options.showArrayIndex = true;
2210 2210 } else {
2211 2211 // Force to boolean just in case
2212 2212 options.showArrayIndex = options.showArrayIndex ? true: false;
2213 2213 }
2214 2214
2215 2215 return options;
2216 2216 }
2217 2217
2218 2218 function validateHyperlinkOptions(options){
2219 2219 var hyperlinks = {
2220 2220 enable : false,
2221 2221 keys : null,
2222 2222 target : ''
2223 2223 };
2224 2224
2225 2225 if(options.hyperlinks && options.hyperlinks.enable) {
2226 2226 hyperlinks.enable = true;
2227 2227
2228 2228 hyperlinks.keys = isArray(options.hyperlinks.keys) ? options.hyperlinks.keys : [];
2229 2229
2230 2230 if(options.hyperlinks.target) {
2231 2231 hyperlinks.target = '' + options.hyperlinks.target;
2232 2232 } else {
2233 2233 hyperlinks.target = '_blank';
2234 2234 }
2235 2235 }
2236 2236
2237 2237 options.hyperlinks = hyperlinks;
2238 2238
2239 2239 return options;
2240 2240 }
2241 2241
2242 2242 function validateBoolOptions(options){
2243 2243 if(!options.bool){
2244 2244 options.bool = {
2245 2245 text: {
2246 2246 true : "true",
2247 2247 false : "false"
2248 2248 },
2249 2249 img : {
2250 2250 true: "",
2251 2251 false: ""
2252 2252 },
2253 2253 showImage : false,
2254 2254 showText : true
2255 2255 };
2256 2256 } else {
2257 2257 var boolOptions = options.bool;
2258 2258
2259 2259 // Show text if no option
2260 2260 if(!boolOptions.showText && !boolOptions.showImage){
2261 2261 boolOptions.showImage = false;
2262 2262 boolOptions.showText = true;
2263 2263 }
2264 2264
2265 2265 if(boolOptions.showText){
2266 2266 if(!boolOptions.text){
2267 2267 boolOptions.text = {
2268 2268 true : "true",
2269 2269 false : "false"
2270 2270 };
2271 2271 } else {
2272 2272 var t = boolOptions.text.true, f = boolOptions.text.false;
2273 2273
2274 2274 if(getType(t) != STRING || t === ''){
2275 2275 boolOptions.text.true = 'true';
2276 2276 }
2277 2277
2278 2278 if(getType(f) != STRING || f === ''){
2279 2279 boolOptions.text.false = 'false';
2280 2280 }
2281 2281 }
2282 2282 }
2283 2283
2284 2284 if(boolOptions.showImage){
2285 2285 if(!boolOptions.img.true && !boolOptions.img.false){
2286 2286 boolOptions.showImage = false;
2287 2287 }
2288 2288 }
2289 2289 }
2290 2290
2291 2291 return options;
2292 2292 }
2293 2293
2294 2294 return {
2295 2295 format: format
2296 2296 };
2297 2297 }));
2298 2298
2299 2299 ;//! moment.js
2300 2300 //! version : 2.8.4
2301 2301 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
2302 2302 //! license : MIT
2303 2303 //! momentjs.com
2304 2304 (function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(a,b){return zb.call(a,b)}function d(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function e(a){tb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function f(a,b){var c=!0;return m(function(){return c&&(e(a),c=!1),b.apply(this,arguments)},b)}function g(a,b){qc[a]||(e(b),qc[a]=!0)}function h(a,b){return function(c){return p(a.call(this,c),b)}}function i(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function j(){}function k(a,b){b!==!1&&F(a),n(this,a),this._d=new Date(+a._d)}function l(a){var b=y(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=tb.localeData(),this._bubble()}function m(a,b){for(var d in b)c(b,d)&&(a[d]=b[d]);return c(b,"toString")&&(a.toString=b.toString),c(b,"valueOf")&&(a.valueOf=b.valueOf),a}function n(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Ib.length>0)for(c in Ib)d=Ib[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function o(a){return 0>a?Math.ceil(a):Math.floor(a)}function p(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.length<b;)d="0"+d;return(e?c?"+":"":"-")+d}function q(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function r(a,b){var c;return b=K(b,a),a.isBefore(b)?c=q(a,b):(c=q(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function s(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(g(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=tb.duration(c,d),t(this,e,a),this}}function t(a,b,c,d){var e=b._milliseconds,f=b._days,g=b._months;d=null==d?!0:d,e&&a._d.setTime(+a._d+e*c),f&&nb(a,"Date",mb(a,"Date")+f*c),g&&lb(a,mb(a,"Month")+g*c),d&&tb.updateOffset(a,f||g)}function u(a){return"[object Array]"===Object.prototype.toString.call(a)}function v(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function w(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&A(a[d])!==A(b[d]))&&g++;return g+f}function x(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=jc[a]||kc[b]||b}return a}function y(a){var b,d,e={};for(d in a)c(a,d)&&(b=x(d),b&&(e[b]=a[d]));return e}function z(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}tb[b]=function(e,f){var g,h,i=tb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=tb().utc().set(d,a);return i.call(tb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function A(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function B(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function C(a,b,c){return hb(tb([a,11,31+b-c]),b,c).week}function D(a){return E(a)?366:365}function E(a){return a%4===0&&a%100!==0||a%400===0}function F(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[Bb]<0||a._a[Bb]>11?Bb:a._a[Cb]<1||a._a[Cb]>B(a._a[Ab],a._a[Bb])?Cb:a._a[Db]<0||a._a[Db]>24||24===a._a[Db]&&(0!==a._a[Eb]||0!==a._a[Fb]||0!==a._a[Gb])?Db:a._a[Eb]<0||a._a[Eb]>59?Eb:a._a[Fb]<0||a._a[Fb]>59?Fb:a._a[Gb]<0||a._a[Gb]>999?Gb:-1,a._pf._overflowDayOfYear&&(Ab>b||b>Cb)&&(b=Cb),a._pf.overflow=b)}function G(b){return null==b._isValid&&(b._isValid=!isNaN(b._d.getTime())&&b._pf.overflow<0&&!b._pf.empty&&!b._pf.invalidMonth&&!b._pf.nullInput&&!b._pf.invalidFormat&&!b._pf.userInvalidated,b._strict&&(b._isValid=b._isValid&&0===b._pf.charsLeftOver&&0===b._pf.unusedTokens.length&&b._pf.bigHour===a)),b._isValid}function H(a){return a?a.toLowerCase().replace("_","-"):a}function I(a){for(var b,c,d,e,f=0;f<a.length;){for(e=H(a[f]).split("-"),b=e.length,c=H(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=J(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&w(e,c,!0)>=b-1)break;b--}f++}return null}function J(a){var b=null;if(!Hb[a]&&Jb)try{b=tb.locale(),require("./locale/"+a),tb.locale(b)}catch(c){}return Hb[a]}function K(a,b){var c,d;return b._isUTC?(c=b.clone(),d=(tb.isMoment(a)||v(a)?+a:+tb(a))-+c,c._d.setTime(+c._d+d),tb.updateOffset(c,!1),c):tb(a).local()}function L(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function M(a){var b,c,d=a.match(Nb);for(b=0,c=d.length;c>b;b++)d[b]=pc[d[b]]?pc[d[b]]:L(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function N(a,b){return a.isValid()?(b=O(b,a.localeData()),lc[b]||(lc[b]=M(b)),lc[b](a)):a.localeData().invalidDate()}function O(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Ob.lastIndex=0;d>=0&&Ob.test(a);)a=a.replace(Ob,c),Ob.lastIndex=0,d-=1;return a}function P(a,b){var c,d=b._strict;switch(a){case"Q":return Zb;case"DDDD":return _b;case"YYYY":case"GGGG":case"gggg":return d?ac:Rb;case"Y":case"G":case"g":return cc;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?bc:Sb;case"S":if(d)return Zb;case"SS":if(d)return $b;case"SSS":if(d)return _b;case"DDD":return Qb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ub;case"a":case"A":return b._locale._meridiemParse;case"x":return Xb;case"X":return Yb;case"Z":case"ZZ":return Vb;case"T":return Wb;case"SSSS":return Tb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?$b:Pb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Pb;case"Do":return d?b._locale._ordinalParse:b._locale._ordinalParseLenient;default:return c=new RegExp(Y(X(a.replace("\\","")),"i"))}}function Q(a){a=a||"";var b=a.match(Vb)||[],c=b[b.length-1]||[],d=(c+"").match(hc)||["-",0,0],e=+(60*d[1])+A(d[2]);return"+"===d[0]?-e:e}function R(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[Bb]=3*(A(b)-1));break;case"M":case"MM":null!=b&&(e[Bb]=A(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b,a,c._strict),null!=d?e[Bb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[Cb]=A(b));break;case"Do":null!=b&&(e[Cb]=A(parseInt(b.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=A(b));break;case"YY":e[Ab]=tb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[Ab]=A(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"h":case"hh":c._pf.bigHour=!0;case"H":case"HH":e[Db]=A(b);break;case"m":case"mm":e[Eb]=A(b);break;case"s":case"ss":e[Fb]=A(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Gb]=A(1e3*("0."+b));break;case"x":c._d=new Date(A(b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=Q(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=A(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=tb.parseTwoDigitYear(b)}}function S(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[Ab],hb(tb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[Ab],hb(tb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=ib(d,e,f,h,g),a._a[Ab]=i.year,a._dayOfYear=i.dayOfYear}function T(a){var c,d,e,f,g=[];if(!a._d){for(e=V(a),a._w&&null==a._a[Cb]&&null==a._a[Bb]&&S(a),a._dayOfYear&&(f=b(a._a[Ab],e[Ab]),a._dayOfYear>D(f)&&(a._pf._overflowDayOfYear=!0),d=db(f,0,a._dayOfYear),a._a[Bb]=d.getUTCMonth(),a._a[Cb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];24===a._a[Db]&&0===a._a[Eb]&&0===a._a[Fb]&&0===a._a[Gb]&&(a._nextDay=!0,a._a[Db]=0),a._d=(a._useUTC?db:cb).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm),a._nextDay&&(a._a[Db]=24)}}function U(a){var b;a._d||(b=y(a._i),a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],T(a))}function V(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function W(b){if(b._f===tb.ISO_8601)return void $(b);b._a=[],b._pf.empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=O(b._f,b._locale).match(Nb)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(P(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&b._pf.unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),pc[f]?(d?b._pf.empty=!1:b._pf.unusedTokens.push(f),R(f,d,b)):b._strict&&!d&&b._pf.unusedTokens.push(f);b._pf.charsLeftOver=i-j,h.length>0&&b._pf.unusedInput.push(h),b._pf.bigHour===!0&&b._a[Db]<=12&&(b._pf.bigHour=a),b._isPm&&b._a[Db]<12&&(b._a[Db]+=12),b._isPm===!1&&12===b._a[Db]&&(b._a[Db]=0),T(b),F(b)}function X(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function Y(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(a){var b,c,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;f<a._f.length;f++)g=0,b=n({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._pf=d(),b._f=a._f[f],W(b),G(b)&&(g+=b._pf.charsLeftOver,g+=10*b._pf.unusedTokens.length,b._pf.score=g,(null==e||e>g)&&(e=g,c=b));m(a,c||b)}function $(a){var b,c,d=a._i,e=dc.exec(d);if(e){for(a._pf.iso=!0,b=0,c=fc.length;c>b;b++)if(fc[b][1].exec(d)){a._f=fc[b][0]+(e[6]||" ");break}for(b=0,c=gc.length;c>b;b++)if(gc[b][1].exec(d)){a._f+=gc[b][0];break}d.match(Vb)&&(a._f+="Z"),W(a)}else a._isValid=!1}function _(a){$(a),a._isValid===!1&&(delete a._isValid,tb.createFromInputFallback(a))}function ab(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function bb(b){var c,d=b._i;d===a?b._d=new Date:v(d)?b._d=new Date(+d):null!==(c=Kb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?_(b):u(d)?(b._a=ab(d.slice(0),function(a){return parseInt(a,10)}),T(b)):"object"==typeof d?U(b):"number"==typeof d?b._d=new Date(d):tb.createFromInputFallback(b)}function cb(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function db(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function eb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function fb(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function gb(a,b,c){var d=tb.duration(a).abs(),e=yb(d.as("s")),f=yb(d.as("m")),g=yb(d.as("h")),h=yb(d.as("d")),i=yb(d.as("M")),j=yb(d.as("y")),k=e<mc.s&&["s",e]||1===f&&["m"]||f<mc.m&&["mm",f]||1===g&&["h"]||g<mc.h&&["hh",g]||1===h&&["d"]||h<mc.d&&["dd",h]||1===i&&["M"]||i<mc.M&&["MM",i]||1===j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,fb.apply({},k)}function hb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=tb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ib(a,b,c,d,e){var f,g,h=db(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:D(a-1)+g}}function jb(b){var c,d=b._i,e=b._f;return b._locale=b._locale||tb.localeData(b._l),null===d||e===a&&""===d?tb.invalid({nullInput:!0}):("string"==typeof d&&(b._i=d=b._locale.preparse(d)),tb.isMoment(d)?new k(d,!0):(e?u(e)?Z(b):W(b):bb(b),c=new k(b),c._nextDay&&(c.add(1,"d"),c._nextDay=a),c))}function kb(a,b){var c,d;if(1===b.length&&u(b[0])&&(b=b[0]),!b.length)return tb();for(c=b[0],d=1;d<b.length;++d)b[d][a](c)&&(c=b[d]);return c}function lb(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),B(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function mb(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function nb(a,b,c){return"Month"===b?lb(a,c):a._d["set"+(a._isUTC?"UTC":"")+b](c)}function ob(a,b){return function(c){return null!=c?(nb(this,a,c),tb.updateOffset(this,b),this):mb(this,a)}}function pb(a){return 400*a/146097}function qb(a){return 146097*a/400}function rb(a){tb.duration.fn[a]=function(){return this._data[a]}}function sb(a){"undefined"==typeof ender&&(ub=xb.moment,xb.moment=a?f("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.",tb):tb)}for(var tb,ub,vb,wb="2.8.4",xb="undefined"!=typeof global?global:this,yb=Math.round,zb=Object.prototype.hasOwnProperty,Ab=0,Bb=1,Cb=2,Db=3,Eb=4,Fb=5,Gb=6,Hb={},Ib=[],Jb="undefined"!=typeof module&&module&&module.exports,Kb=/^\/?Date\((\-?\d+)/i,Lb=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Mb=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,Nb=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Ob=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Pb=/\d\d?/,Qb=/\d{1,3}/,Rb=/\d{1,4}/,Sb=/[+\-]?\d{1,6}/,Tb=/\d+/,Ub=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Vb=/Z|[\+\-]\d\d:?\d\d/gi,Wb=/T/i,Xb=/[\+\-]?\d+/,Yb=/[\+\-]?\d+(\.\d{1,3})?/,Zb=/\d/,$b=/\d\d/,_b=/\d{3}/,ac=/\d{4}/,bc=/[+-]?\d{6}/,cc=/[+-]?\d+/,dc=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ec="YYYY-MM-DDTHH:mm:ssZ",fc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],gc=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],hc=/([\+\-]|\d\d)/gi,ic=("Date|Hours|Minutes|Seconds|Milliseconds".split("|"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),jc={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",Q:"quarter",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},kc={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},lc={},mc={s:45,m:45,h:22,d:26,M:11},nc="DDD w W M D d".split(" "),oc="M D H h m s w W".split(" "),pc={M:function(){return this.month()+1},MMM:function(a){return this.localeData().monthsShort(this,a)},MMMM:function(a){return this.localeData().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.localeData().weekdaysMin(this,a)},ddd:function(a){return this.localeData().weekdaysShort(this,a)},dddd:function(a){return this.localeData().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return p(this.year()%100,2)},YYYY:function(){return p(this.year(),4)},YYYYY:function(){return p(this.year(),5)},YYYYYY:function(){var a=this.year(),b=a>=0?"+":"-";return b+p(Math.abs(a),6)},gg:function(){return p(this.weekYear()%100,2)},gggg:function(){return p(this.weekYear(),4)},ggggg:function(){return p(this.weekYear(),5)},GG:function(){return p(this.isoWeekYear()%100,2)},GGGG:function(){return p(this.isoWeekYear(),4)},GGGGG:function(){return p(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return A(this.milliseconds()/100)},SS:function(){return p(A(this.milliseconds()/10),2)},SSS:function(){return p(this.milliseconds(),3)},SSSS:function(){return p(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+":"+p(A(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+p(A(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},qc={},rc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];nc.length;)vb=nc.pop(),pc[vb+"o"]=i(pc[vb],vb);for(;oc.length;)vb=oc.pop(),pc[vb+vb]=h(pc[vb],2);pc.DDDD=h(pc.DDD,3),m(j.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a,b,c){var d,e,f;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=tb.utc([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=tb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.apply(b,[c]):d},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(a){return a},postformat:function(a){return a},week:function(a){return hb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tb=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=c,g._l=e,g._strict=f,g._isUTC=!1,g._pf=d(),jb(g)},tb.suppressDeprecationWarnings=!1,tb.createFromInputFallback=f("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),tb.min=function(){var a=[].slice.call(arguments,0);return kb("isBefore",a)},tb.max=function(){var a=[].slice.call(arguments,0);return kb("isAfter",a)},tb.utc=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=c,g._strict=f,g._pf=d(),jb(g).utc()},tb.unix=function(a){return tb(1e3*a)},tb.duration=function(a,b){var d,e,f,g,h=a,i=null;return tb.isDuration(a)?h={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(h={},b?h[b]=a:h.milliseconds=a):(i=Lb.exec(a))?(d="-"===i[1]?-1:1,h={y:0,d:A(i[Cb])*d,h:A(i[Db])*d,m:A(i[Eb])*d,s:A(i[Fb])*d,ms:A(i[Gb])*d}):(i=Mb.exec(a))?(d="-"===i[1]?-1:1,f=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*d},h={y:f(i[2]),M:f(i[3]),d:f(i[4]),h:f(i[5]),m:f(i[6]),s:f(i[7]),w:f(i[8])}):"object"==typeof h&&("from"in h||"to"in h)&&(g=r(tb(h.from),tb(h.to)),h={},h.ms=g.milliseconds,h.M=g.months),e=new l(h),tb.isDuration(a)&&c(a,"_locale")&&(e._locale=a._locale),e},tb.version=wb,tb.defaultFormat=ec,tb.ISO_8601=function(){},tb.momentProperties=Ib,tb.updateOffset=function(){},tb.relativeTimeThreshold=function(b,c){return mc[b]===a?!1:c===a?mc[b]:(mc[b]=c,!0)},tb.lang=f("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return tb.locale(a,b)}),tb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?tb.defineLocale(a,b):tb.localeData(a),c&&(tb.duration._locale=tb._locale=c)),tb._locale._abbr},tb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Hb[a]||(Hb[a]=new j),Hb[a].set(b),tb.locale(a),Hb[a]):(delete Hb[a],null)},tb.langData=f("moment.langData is deprecated. Use moment.localeData instead.",function(a){return tb.localeData(a)}),tb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return tb._locale;if(!u(a)){if(b=J(a))return b;a=[a]}return I(a)},tb.isMoment=function(a){return a instanceof k||null!=a&&c(a,"_isAMomentObject")},tb.isDuration=function(a){return a instanceof l};for(vb=rc.length-1;vb>=0;--vb)z(rc[vb]);tb.normalizeUnits=function(a){return x(a)},tb.invalid=function(a){var b=tb.utc(0/0);return null!=a?m(b._pf,a):b._pf.userInvalidated=!0,b},tb.parseZone=function(){return tb.apply(null,arguments).parseZone()},tb.parseTwoDigitYear=function(a){return A(a)+(A(a)>68?1900:2e3)},m(tb.fn=k.prototype,{clone:function(){return tb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=tb(this).utc();return 0<a.year()&&a.year()<=9999?"function"==typeof Date.prototype.toISOString?this.toDate().toISOString():N(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):N(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return G(this)},isDSTShifted:function(){return this._a?this.isValid()&&w(this._a,(this._isUTC?tb.utc(this._a):tb(this._a)).toArray())>0:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._dateTzOffset(),"m")),this},format:function(a){var b=N(this,a||tb.defaultFormat);return this.localeData().postformat(b)},add:s(1,"add"),subtract:s(-1,"subtract"),diff:function(a,b,c){var d,e,f,g=K(a,this),h=6e4*(this.zone()-g.zone());return b=x(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+g.daysInMonth()),e=12*(this.year()-g.year())+(this.month()-g.month()),f=this-tb(this).startOf("month")-(g-tb(g).startOf("month")),f-=6e4*(this.zone()-tb(this).startOf("month").zone()-(g.zone()-tb(g).startOf("month").zone())),e+=f/d,"year"===b&&(e/=12)):(d=this-g,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-h)/864e5:"week"===b?(d-h)/6048e5:d),c?e:o(e)},from:function(a,b){return tb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(tb(),a)},calendar:function(a){var b=a||tb(),c=K(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,tb(b)))},isLeapYear:function(){return E(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=eb(a,this.localeData()),this.add(a-b,"d")):b},month:ob("Month",!0),startOf:function(a){switch(a=x(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a?this.weekday(0):"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(b){return b=x(b),b===a||"millisecond"===b?this:this.startOf(b).add(1,"isoWeek"===b?"week":b).subtract(1,"ms")},isAfter:function(a,b){var c;return b=x("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+this>+a):(c=tb.isMoment(a)?+a:+tb(a),c<+this.clone().startOf(b))},isBefore:function(a,b){var c;return b=x("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+a>+this):(c=tb.isMoment(a)?+a:+tb(a),+this.clone().endOf(b)<c)},isSame:function(a,b){var c;return b=x(b||"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+this===+a):(c=+tb(a),+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))},min:f("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),this>a?this:a}),max:f("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._dateTzOffset():("string"==typeof a&&(a=Q(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._dateTzOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?t(this,tb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,tb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?tb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return B(this.year(),this.month())},dayOfYear:function(a){var b=yb((tb(this).startOf("day")-tb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=hb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=hb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=hb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return C(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return C(this.year(),a.dow,a.doy)},get:function(a){return a=x(a),this[a]()},set:function(a,b){return a=x(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){var c;return b===a?this._locale._abbr:(c=tb.localeData(b),null!=c&&(this._locale=c),this)},lang:f("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(b){return b===a?this.localeData():this.locale(b)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),tb.fn.millisecond=tb.fn.milliseconds=ob("Milliseconds",!1),tb.fn.second=tb.fn.seconds=ob("Seconds",!1),tb.fn.minute=tb.fn.minutes=ob("Minutes",!1),tb.fn.hour=tb.fn.hours=ob("Hours",!0),tb.fn.date=ob("Date",!0),tb.fn.dates=f("dates accessor is deprecated. Use date instead.",ob("Date",!0)),tb.fn.year=ob("FullYear",!0),tb.fn.years=f("years accessor is deprecated. Use year instead.",ob("FullYear",!0)),tb.fn.days=tb.fn.day,tb.fn.months=tb.fn.month,tb.fn.weeks=tb.fn.week,tb.fn.isoWeeks=tb.fn.isoWeek,tb.fn.quarters=tb.fn.quarter,tb.fn.toJSON=tb.fn.toISOString,m(tb.duration.fn=l.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=o(d/1e3),g.seconds=a%60,b=o(a/60),g.minutes=b%60,c=o(b/60),g.hours=c%24,e+=o(c/24),h=o(pb(e)),e-=o(qb(h)),f+=o(e/30),e%=30,h+=o(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return o(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*A(this._months/12)},humanize:function(a){var b=gb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=tb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=tb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=x(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=x(a),"month"===a||"year"===a)return b=this._days+this._milliseconds/864e5,c=this._months+12*pb(b),"month"===a?c:c/12;switch(b=this._days+Math.round(qb(this._months/12)),a){case"week":return b/7+this._milliseconds/6048e5;case"day":return b+this._milliseconds/864e5;case"hour":return 24*b+this._milliseconds/36e5;case"minute":return 24*b*60+this._milliseconds/6e4;case"second":return 24*b*60*60+this._milliseconds/1e3;
2305 2305 case"millisecond":return Math.floor(24*b*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+a)}},lang:tb.fn.lang,locale:tb.fn.locale,toIsoString:f("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}}),tb.duration.fn.toString=tb.duration.fn.toISOString;for(vb in ic)c(ic,vb)&&rb(vb.toLowerCase());tb.duration.fn.asMilliseconds=function(){return this.as("ms")},tb.duration.fn.asSeconds=function(){return this.as("s")},tb.duration.fn.asMinutes=function(){return this.as("m")},tb.duration.fn.asHours=function(){return this.as("h")},tb.duration.fn.asDays=function(){return this.as("d")},tb.duration.fn.asWeeks=function(){return this.as("weeks")},tb.duration.fn.asMonths=function(){return this.as("M")},tb.duration.fn.asYears=function(){return this.as("y")},tb.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===A(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Jb?module.exports=tb:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(xb.moment=ub),tb}),sb(!0)):sb()}).call(this);
2306 2306 ;!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===da||n[0]===ma?ma+n:n}function l(n){return(n+="")[0]===ma?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ya.length;r>e;++e){var u=ya[e]+t;if(u in n)return u}}function y(){}function M(){}function x(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new a;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function b(){ta.event.preventDefault()}function _(){for(var n,t=ta.event;n=t.sourceEvent;)t=n;return t}function w(n){for(var t=new M,e=0,r=arguments.length;++e<r;)t[arguments[e]]=x(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=ta.event;u.target=n,ta.event=u,t[u.type].apply(e,r)}finally{ta.event=i}}},t}function S(n){return xa(n,ka),n}function k(n){return"function"==typeof n?n:function(){return ba(n,this)}}function E(n){return"function"==typeof n?n:function(){return _a(n,this)}}function A(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ta.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function N(n){return n.trim().replace(/\s+/g," ")}function C(n){return new RegExp("(?:^|\\s+)"+ta.requote(n)+"(?:\\s+|$)","g")}function z(n){return(n+"").trim().split(/^|\s+/)}function q(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=z(n).map(L);var u=n.length;return"function"==typeof t?r:e}function L(n){var t=C(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",N(u+" "+n))):e.setAttribute("class",N(u.replace(t," ")))}}function T(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function R(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function D(n){return"function"==typeof n?n:(n=ta.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function P(){var n=this.parentNode;n&&n.removeChild(this)}function U(n){return{__data__:n}}function j(n){return function(){return Sa(this,n)}}function F(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function H(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function O(n){return xa(n,Aa),n}function Y(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function I(n){var t=n.__transition__;t&&++t.active}function Z(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,ra(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+ta.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=V;a>0&&(n=n.slice(0,a));var l=Ca.get(n);return l&&(n=l,c=X),a?t?u:r:t?y:i}function V(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function X(n,t){var e=V(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function $(){var n=".dragsuppress-"+ ++qa,t="click"+n,e=ta.select(oa).on("touchmove"+n,b).on("dragstart"+n,b).on("selectstart"+n,b);if(za){var r=ia.style,u=r[za];r[za]="none"}return function(i){if(e.on(n,null),za&&(r[za]=u),i){var o=function(){e.on(t,null)};e.on(t,function(){b(),o()},!0),setTimeout(o,0)}}}function B(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>La&&(oa.scrollX||oa.scrollY)){e=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();La=!(u.f||u.e),e.remove()}return La?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function W(){return ta.event.changedTouches[0].identifier}function J(){return ta.event.target}function G(){return oa}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nt(n){return n>1?0:-1>n?Da:Math.acos(n)}function tt(n){return n>1?ja:-1>n?-ja:Math.asin(n)}function et(n){return((n=Math.exp(n))-1/n)/2}function rt(n){return((n=Math.exp(n))+1/n)/2}function ut(n){return((n=Math.exp(2*n))-1)/(n+1)}function it(n){return(n=Math.sin(n/2))*n}function ot(){}function at(n,t,e){return this instanceof at?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof at?new at(n.h,n.s,n.l):bt(""+n,_t,at):new at(n,t,e)}function ct(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new mt(u(n+120),u(n),u(n-120))}function lt(n,t,e){return this instanceof lt?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof lt?new lt(n.h,n.c,n.l):n instanceof ft?gt(n.l,n.a,n.b):gt((n=wt((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new lt(n,t,e)}function st(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new ft(e,Math.cos(n*=Fa)*t,Math.sin(n)*t)}function ft(n,t,e){return this instanceof ft?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof ft?new ft(n.l,n.a,n.b):n instanceof lt?st(n.h,n.c,n.l):wt((n=mt(n)).r,n.g,n.b):new ft(n,t,e)}function ht(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=pt(u)*Ja,r=pt(r)*Ga,i=pt(i)*Ka,new mt(dt(3.2404542*u-1.5371385*r-.4985314*i),dt(-.969266*u+1.8760108*r+.041556*i),dt(.0556434*u-.2040259*r+1.0572252*i))}function gt(n,t,e){return n>0?new lt(Math.atan2(e,t)*Ha,Math.sqrt(t*t+e*e),n):new lt(0/0,0/0,n)}function pt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function vt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function dt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mt(n,t,e){return this instanceof mt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mt?new mt(n.r,n.g,n.b):bt(""+n,mt,ct):new mt(n,t,e)}function yt(n){return new mt(n>>16,255&n>>8,255&n)}function Mt(n){return yt(n)+""}function xt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function bt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(kt(u[0]),kt(u[1]),kt(u[2]))}return(i=tc.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function _t(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new at(r,u,c)}function wt(n,t,e){n=St(n),t=St(t),e=St(e);var r=vt((.4124564*n+.3575761*t+.1804375*e)/Ja),u=vt((.2126729*n+.7151522*t+.072175*e)/Ga),i=vt((.0193339*n+.119192*t+.9503041*e)/Ka);return ft(116*u-16,500*(r-u),200*(u-i))}function St(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function kt(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function Et(n){return"function"==typeof n?n:function(){return n}}function At(n){return n}function Nt(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Ct(t,e,n,r)}}function Ct(n,t,e,r){function u(){var n,t=c.status;if(!t&&qt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!oa.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(zt(r))}function zt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function qt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function Lt(){var n=Tt(),t=Rt()-n;t>24?(isFinite(t)&&(clearTimeout(ic),ic=setTimeout(Lt,t)),uc=0):(uc=1,ac(Lt))}function Tt(){var n=Date.now();for(oc=ec;oc;)n>=oc.t&&(oc.f=oc.c(n-oc.t)),oc=oc.n;return n}function Rt(){for(var n,t=ec,e=1/0;t;)t.f?t=n?n.n=t.n:ec=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return rc=n,e}function Dt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Pt(n,t){var e=Math.pow(10,3*va(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Ut(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:At;return function(n){var e=lc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=sc.get(g)||jt;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function jt(n){return n+""}function Ft(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ht(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new hc(e-1)),1),e}function i(n,e){return t(n=new hc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{hc=Ft;var r=new Ft;return r._=n,o(r,t,e)}finally{hc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ot(n);return c.floor=c,c.round=Ot(r),c.ceil=Ot(u),c.offset=Ot(i),c.range=a,n}function Ot(n){return function(t,e){try{hc=Ft;var r=new Ft;return r._=t,n(r,e)._}finally{hc=Date}}}function Yt(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(c,a)),null!=(u=pc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=N[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.slice(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&hc!==Ft,o=new(i?Ft:hc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(0|r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in pc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{hc=Ft;var t=new hc;return t._=n,r(t)}finally{hc=Date}}var r=t(n);return e.parse=function(n){try{hc=Ft;var t=r.parse(n);return t&&t._}finally{hc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ce;var M=ta.map(),x=Zt(v),b=Vt(v),_=Zt(d),w=Vt(d),S=Zt(m),k=Vt(m),E=Zt(y),A=Vt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return It(n.getDate(),t,2)},e:function(n,t){return It(n.getDate(),t,2)},H:function(n,t){return It(n.getHours(),t,2)},I:function(n,t){return It(n.getHours()%12||12,t,2)},j:function(n,t){return It(1+fc.dayOfYear(n),t,3)},L:function(n,t){return It(n.getMilliseconds(),t,3)},m:function(n,t){return It(n.getMonth()+1,t,2)},M:function(n,t){return It(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return It(n.getSeconds(),t,2)},U:function(n,t){return It(fc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return It(fc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return It(n.getFullYear()%100,t,2)},Y:function(n,t){return It(n.getFullYear()%1e4,t,4)},Z:oe,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:ne,e:ne,H:ee,I:ee,j:te,L:ie,m:Qt,M:re,p:s,S:ue,U:$t,w:Xt,W:Bt,x:c,X:l,y:Jt,Y:Wt,Z:Gt,"%":ae};return t}function It(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Zt(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Vt(n){for(var t=new a,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Xt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function $t(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Bt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Wt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Jt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.y=Kt(+r[0]),e+r[0].length):-1}function Gt(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Kt(n){return n+(n>68?1900:2e3)}function Qt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function ne(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function te(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function ee(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function re(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ue(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ie(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function oe(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|va(t)/60,u=va(t)%60;return e+It(r,"0",2)+It(u,"0",2)}function ae(n,t,e){dc.lastIndex=0;var r=dc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ce(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function le(){}function se(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function fe(n,t){n&&xc.hasOwnProperty(n.type)&&xc[n.type](n,t)}function he(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ge(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)he(n[e],t,1);t.polygonEnd()}function pe(){function n(n,t){n*=Fa,t=t*Fa/2+Da/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);_c.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;wc.point=function(o,a){wc.point=n,r=(t=o)*Fa,u=Math.cos(a=(e=a)*Fa/2+Da/4),i=Math.sin(a)},wc.lineEnd=function(){n(t,e)}}function ve(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function de(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function me(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ye(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function Me(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function xe(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function be(n){return[Math.atan2(n[1],n[0]),tt(n[2])]}function _e(n,t){return va(n[0]-t[0])<Ta&&va(n[1]-t[1])<Ta}function we(n,t){n*=Fa;var e=Math.cos(t*=Fa);Se(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Se(n,t,e){++Sc,Ec+=(n-Ec)/Sc,Ac+=(t-Ac)/Sc,Nc+=(e-Nc)/Sc}function ke(){function n(n,u){n*=Fa;var i=Math.cos(u*=Fa),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*a)*l+(l=r*o-t*c)*l+(l=t*a-e*o)*l),t*o+e*a+r*c);kc+=l,Cc+=l*(t+(t=o)),zc+=l*(e+(e=a)),qc+=l*(r+(r=c)),Se(t,e,r)}var t,e,r;Dc.point=function(u,i){u*=Fa;var o=Math.cos(i*=Fa);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),Dc.point=n,Se(t,e,r)}}function Ee(){Dc.point=we}function Ae(){function n(n,t){n*=Fa;var e=Math.cos(t*=Fa),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),l=u*c-i*a,s=i*o-r*c,f=r*a-u*o,h=Math.sqrt(l*l+s*s+f*f),g=r*o+u*a+i*c,p=h&&-nt(g)/h,v=Math.atan2(h,g);Lc+=p*l,Tc+=p*s,Rc+=p*f,kc+=v,Cc+=v*(r+(r=o)),zc+=v*(u+(u=a)),qc+=v*(i+(i=c)),Se(r,u,i)}var t,e,r,u,i;Dc.point=function(o,a){t=o,e=a,Dc.point=n,o*=Fa;var c=Math.cos(a*=Fa);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),Se(r,u,i)},Dc.lineEnd=function(){n(t,e),Dc.lineEnd=Ee,Dc.point=we}}function Ne(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function Ce(){return!0}function ze(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(_e(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Le(e,n,null,!0),l=new Le(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new Le(r,n,null,!1),l=new Le(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),qe(i),qe(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function qe(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Le(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Te(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function l(){y.point=o,d.lineEnd()}function s(n,t){v.push([n,t]);var e=u(n,t);x.point(e[0],e[1])}function f(){x.lineStart(),v=[]}function h(){s(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Re))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=He(m,p);g.length?(b||(i.polygonStart(),b=!0),ze(g,Pe,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=De(),x=t(M),b=!1;return y}}function Re(n){return n.length>1}function De(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Pe(n,t){return((n=n.x)[0]<0?n[1]-ja-Ta:ja-n[1])-((t=t.x)[0]<0?t[1]-ja-Ta:ja-t[1])}function Ue(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Da:-Da,c=va(i-e);va(c-Da)<Ta?(n.point(e,r=(r+o)/2>0?ja:-ja),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Da&&(va(e-u)<Ta&&(e-=u*Ta),va(i-a)<Ta&&(i-=a*Ta),r=je(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function je(n,t,e,r){var u,i,o=Math.sin(n-e);return va(o)>Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Fe(n,t,e,r){var u;if(null==n)u=e*ja,r.point(-Da,u),r.point(0,u),r.point(Da,u),r.point(Da,0),r.point(Da,-u),r.point(0,-u),r.point(-Da,-u),r.point(-Da,0),r.point(-Da,u);else if(va(n[0]-t[0])>Ta){var i=n[0]<t[0]?Da:-Da;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function He(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;_c.reset();for(var a=0,c=t.length;c>a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Da/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Da/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>Da,k=p*M;if(_c.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*Pa:b,S^h>=e^m>=e){var E=me(ve(f),ve(n));xe(E);var A=me(u,E);xe(A);var N=(S^b>=0?-1:1)*tt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ta>i||Ta>i&&0>_c)^1&o}function Oe(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Da:-Da),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(_e(e,g)||_e(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&_e(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=ve(n),u=ve(t),o=[1,0,0],a=me(r,u),c=de(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=me(o,a),p=Me(o,f),v=Me(a,h);ye(p,v);var d=g,m=de(p,d),y=de(d,d),M=m*m-y*(de(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=Me(d,(-m-x)/y);if(ye(b,p),b=be(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=va(A-Da)<Ta,C=N||Ta>A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(va(b[0]-w)<Ta?k:E):k<=b[1]&&b[1]<=E:A>Da^(w<=b[0]&&b[0]<=S)){var z=Me(d,(-m+x)/y);return ye(z,p),[b,be(z)]}}}function u(t,e){var r=o?n:Da-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=va(i)>Ta,c=pr(n,6*Fa);return Te(t,e,c,o?[0,-n]:[-Da,n-Da])}function Ye(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ie(n,t,e,r){function u(r,u){return va(r[0]-n)<Ta?u>0?0:3:va(r[0]-e)<Ta?u>0?2:1:va(r[1]-t)<Ta?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&Q(l,i,n)>0&&++t:i[1]<=r&&Q(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Uc,Math.min(Uc,n)),t=Math.max(-Uc,Math.min(Uc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=De(),N=Ye(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&ze(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ze(n){var t=0,e=Da/3,r=or(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Da/180,e=n[1]*Da/180):[180*(t/Da),180*(e/Da)]},u}function Ve(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,tt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Xe(){function n(n,t){Fc+=u*n-r*t,r=n,u=t}var t,e,r,u;Zc.point=function(i,o){Zc.point=n,t=r=i,e=u=o},Zc.lineEnd=function(){n(t,e)}}function $e(n,t){Hc>n&&(Hc=n),n>Yc&&(Yc=n),Oc>t&&(Oc=t),t>Ic&&(Ic=t)}function Be(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=We(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=We(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function We(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Je(n,t){Ec+=n,Ac+=t,++Nc}function Ge(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Cc+=o*(t+n)/2,zc+=o*(e+r)/2,qc+=o,Je(t=n,e=r)}var t,e;Xc.point=function(r,u){Xc.point=n,Je(t=r,e=u)}}function Ke(){Xc.point=Je}function Qe(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Cc+=o*(r+n)/2,zc+=o*(u+t)/2,qc+=o,o=u*n-r*t,Lc+=o*(r+n),Tc+=o*(u+t),Rc+=3*o,Je(r=n,u=t)}var t,e,r,u;Xc.point=function(i,o){Xc.point=n,Je(t=r=i,e=u=o)},Xc.lineEnd=function(){n(t,e)}}function nr(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Pa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function tr(n){function t(n){return(a?r:e)(n)}function e(t){return ur(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=ve([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=va(va(w)-1)<Ta||va(r-h)<Ta?(r+h)/2:Math.atan2(_,b),A=n(E,k),N=A[0],C=A[1],z=N-t,q=C-e,L=M*z-y*q;
2307 2307 (L*L/x>i||va((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Fa),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function er(n){var t=tr(function(t,e){return n([t*Ha,e*Ha])});return function(n){return ar(t(n))}}function rr(n){this.stream=n}function ur(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ir(n){return or(function(){return n})()}function or(n){function t(n){return n=a(n[0]*Fa,n[1]*Fa),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ha,n[1]*Ha]}function r(){a=Ne(o=sr(m,y,M),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=tr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,M=0,x=Pc,b=At,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=ar(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Pc):Oe((_=+n)*Fa),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?Ie(n[0][0],n[0][1],n[1][0],n[1][1]):At,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Fa,d=n[1]%360*Fa,r()):[v*Ha,d*Ha]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Fa,y=n[1]%360*Fa,M=n.length>2?n[2]%360*Fa:0,r()):[m*Ha,y*Ha,M*Ha]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function ar(n){return ur(n,function(t,e){n.point(t*Fa,e*Fa)})}function cr(n,t){return[n,t]}function lr(n,t){return[n>Da?n-Pa:-Da>n?n+Pa:n,t]}function sr(n,t,e){return n?t||e?Ne(hr(n),gr(t,e)):hr(n):t||e?gr(t,e):lr}function fr(n){return function(t,e){return t+=n,[t>Da?t-Pa:-Da>t?t+Pa:t,e]}}function hr(n){var t=fr(n);return t.invert=fr(-n),t}function gr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),tt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),tt(s*r-a*u)]},e}function pr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=vr(e,u),i=vr(e,i),(o>0?i>u:u>i)&&(u+=o*Pa)):(u=n+o*Pa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=be([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function vr(n,t){var e=ve(t);e[0]-=n,xe(e);var r=nt(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function dr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function mr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function yr(n){return n.source}function Mr(n){return n.target}function xr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(it(r-t)+u*o*it(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ha,Math.atan2(o,Math.sqrt(r*r+u*u))*Ha]}:function(){return[n*Ha,t*Ha]};return p.distance=h,p}function br(){function n(n,u){var i=Math.sin(u*=Fa),o=Math.cos(u),a=va((n*=Fa)-t),c=Math.cos(a);$c+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Bc.point=function(u,i){t=u*Fa,e=Math.sin(i*=Fa),r=Math.cos(i),Bc.point=n},Bc.lineEnd=function(){Bc.point=Bc.lineEnd=y}}function _r(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function wr(n,t){function e(n,t){o>0?-ja+Ta>t&&(t=-ja+Ta):t>ja-Ta&&(t=ja-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Da/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=K(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ja]},e):kr}function Sr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return va(u)<Ta?cr:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-K(u)*Math.sqrt(n*n+e*e)]},e)}function kr(n,t){return[n,Math.log(Math.tan(Da/4+t/2))]}function Er(n){var t,e=ir(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=Da*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ar(n,t){return[Math.log(Math.tan(Da/4+t/2)),-n]}function Nr(n){return n[0]}function Cr(n){return n[1]}function zr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function qr(n,t){return n[0]-t[0]||n[1]-t[1]}function Lr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Tr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Rr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Dr(){eu(this),this.edge=this.site=this.circle=null}function Pr(n){var t=ol.pop()||new Dr;return t.site=n,t}function Ur(n){$r(n),rl.remove(n),ol.push(n),eu(n)}function jr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Ur(n);for(var c=i;c.circle&&va(e-c.circle.x)<Ta&&va(r-c.circle.cy)<Ta;)i=c.P,a.unshift(c),Ur(c),c=i;a.unshift(c),$r(c);for(var l=o;l.circle&&va(e-l.circle.x)<Ta&&va(r-l.circle.cy)<Ta;)o=l.N,a.push(l),Ur(l),l=o;a.push(l),$r(l);var s,f=a.length;for(s=1;f>s;++s)l=a[s],c=a[s-1],Qr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Gr(c.site,l.site,null,u),Xr(c),Xr(l)}function Fr(n){for(var t,e,r,u,i=n.x,o=n.y,a=rl._;a;)if(r=Hr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Or(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Pr(n);if(rl.insert(t,c),t||e){if(t===e)return $r(t),e=Pr(t.site),rl.insert(c,e),c.edge=e.edge=Gr(t.site,c.site),Xr(t),Xr(e),void 0;if(!e)return c.edge=Gr(t.site,c.site),void 0;$r(t),$r(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Qr(e.edge,l,p,x),c.edge=Gr(l,n,null,x),e.edge=Gr(n,p,null,x),Xr(t),Xr(e)}}function Hr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Or(n,t){var e=n.N;if(e)return Hr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Yr(n){this.site=n,this.edges=[]}function Ir(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=el,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(va(r-t)>Ta||va(u-e)>Ta)&&(a.splice(o,0,new nu(Kr(i.site,s,va(r-f)<Ta&&p-u>Ta?{x:f,y:va(t-f)<Ta?e:p}:va(u-p)<Ta&&h-r>Ta?{x:va(e-p)<Ta?t:h,y:p}:va(r-h)<Ta&&u-g>Ta?{x:h,y:va(t-h)<Ta?e:g}:va(u-g)<Ta&&r-f>Ta?{x:va(e-g)<Ta?t:f,y:g}:null),i.site,null)),++c)}function Zr(n,t){return t.angle-n.angle}function Vr(){eu(this),this.x=this.y=this.arc=this.site=this.cy=null}function Xr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,l=r.y-a,s=i.x-o,f=i.y-a,h=2*(c*f-l*s);if(!(h>=-Ra)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=al.pop()||new Vr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=il._;M;)if(m.y<M.y||m.y===M.y&&m.x<=M.x){if(!M.L){y=M.P;break}M=M.L}else{if(!M.R){y=M;break}M=M.R}il.insert(y,m),y||(ul=m)}}}}function $r(n){var t=n.circle;t&&(t.P||(ul=t.N),il.remove(t),al.push(t),eu(t),n.circle=null)}function Br(n){for(var t,e=tl,r=Ye(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Wr(t,n)||!r(t)||va(t.a.x-t.b.x)<Ta&&va(t.a.y-t.b.y)<Ta)&&(t.a=t.b=null,e.splice(u,1))}function Wr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],l=t[1][1],s=n.l,f=n.r,h=s.x,g=s.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.y<c)return}else i={x:d,y:l};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.y<c)return}else i={x:(l-u)/r,y:l};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Jr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Gr(n,t,e,r){var u=new Jr(n,t);return tl.push(u),e&&Qr(u,n,t,e),r&&Qr(u,t,n,r),el[n.i].edges.push(new nu(u,n,t)),el[t.i].edges.push(new nu(u,t,n)),u}function Kr(n,t,e){var r=new Jr(n,null);return r.a=t,r.b=e,tl.push(r),r}function Qr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function nu(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function tu(){this._=null}function eu(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ru(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function uu(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function iu(n){for(;n.L;)n=n.L;return n}function ou(n,t){var e,r,u,i=n.sort(au).pop();for(tl=[],el=new Array(n.length),rl=new tu,il=new tu;;)if(u=ul,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(el[i.i]=new Yr(i),Fr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;jr(u.arc)}t&&(Br(t),Ir(t));var o={cells:el,edges:tl};return rl=il=tl=el=null,o}function au(n,t){return t.y-n.y||t.x-n.x}function cu(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function lu(n){return n.x}function su(n){return n.y}function fu(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function hu(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&hu(n,c[0],e,r,o,a),c[1]&&hu(n,c[1],o,r,u,a),c[2]&&hu(n,c[2],e,a,o,i),c[3]&&hu(n,c[3],o,a,u,i)}}function gu(n,t,e,r,u,i,o){var a,c=1/0;return function l(n,s,f,h,g){if(!(s>i||f>o||r>h||u>g)){if(p=n.point){var p,v=t-p[0],d=e-p[1],m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function pu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+xt(Math.round(e+i*n))+xt(Math.round(r+o*n))+xt(Math.round(u+a*n))}}function vu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=yu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function du(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mu(n,t){var e,r,u,i=ll.lastIndex=sl.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=ll.exec(n))&&(r=sl.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:du(e,r)})),i=sl.lastIndex;return i<t.length&&(u=t.slice(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function yu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function Mu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(yu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function xu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function bu(n){return function(t){return 1-n(1-t)}}function _u(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function wu(n){return n*n}function Su(n){return n*n*n}function ku(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Eu(n){return function(t){return Math.pow(t,n)}}function Au(n){return 1-Math.cos(n*ja)}function Nu(n){return Math.pow(2,10*(n-1))}function Cu(n){return 1-Math.sqrt(1-n*n)}function zu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Pa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Pa/t)}}function qu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Lu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Tu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return st(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ht(e+i*n,r+o*n,u+a*n)+""}}function Pu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Uu(n){var t=[n.a,n.b],e=[n.c,n.d],r=Fu(t),u=ju(t,e),i=Fu(Hu(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ha,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ha:0}function ju(n,t){return n[0]*t[0]+n[1]*t[1]}function Fu(n){var t=Math.sqrt(ju(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Hu(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ou(n,t){var e,r=[],u=[],i=ta.transform(n),o=ta.transform(t),a=i.translate,c=o.translate,l=i.rotate,s=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:du(a[0],c[0])},{i:3,x:du(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:du(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:du(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:du(g[0],p[0])},{i:e-2,x:du(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Yu(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Iu(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Zu(n){for(var t=n.source,e=n.target,r=Xu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Vu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Xu(n,t){if(n===t)return n;for(var e=Vu(n),r=Vu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function $u(n){n.fixed|=2}function Bu(n){n.fixed&=-7}function Wu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Ju(n){n.fixed&=-5}function Gu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Gu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,u+=l*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Ku(n,t){return ta.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=ui,n}function Qu(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function ni(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function ti(n){return n.children}function ei(n){return n.value}function ri(n,t){return t.value-n.value}function ui(n){return ta.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ii(n){return n.x}function oi(n){return n.y}function ai(n,t,e){n.y0=t,n.y=e}function ci(n){return ta.range(n.length)}function li(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function si(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function fi(n){return n.reduce(hi,0)}function hi(n,t){return n+t[1]}function gi(n,t){return pi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function pi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function vi(n){return[ta.min(n),ta.max(n)]}function di(n,t){return n.value-t.value}function mi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function yi(n,t){n._pack_next=t,t._pack_prev=n}function Mi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function xi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(bi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],Si(r,u,i),t(i),mi(r,i),r._pack_prev=i,mi(i,u),u=r._pack_next,o=3;l>o;o++){Si(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(Mi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!Mi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?yi(r,u=a):yi(r=c,u),o--):(mi(r,i),u=i,t(i))}var m=(s+f)/2,y=(h+g)/2,M=0;for(o=0;l>o;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(_i)}}function bi(n){n._pack_next=n._pack_prev=n}function _i(n){delete n._pack_next,delete n._pack_prev}function wi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)wi(u[i],t,e,r)}function Si(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),l=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+l*i,e.y=n.y+c*i-l*u}else e.x=n.x+r,e.y=n.y}function ki(n,t){return n.parent==t.parent?1:2}function Ei(n){var t=n.children;return t.length?t[0]:n.t}function Ai(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ni(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Ci(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function zi(n,t,e){return n.a.parent===t.parent?n.a:e}function qi(n){return 1+ta.max(n,function(n){return n.y})}function Li(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ti(n){var t=n.children;return t&&t.length?Ti(t[0]):n}function Ri(n){var t,e=n.children;return e&&(t=e.length)?Ri(e[t-1]):n}function Di(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Pi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Ui(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function ji(n){return n.rangeExtent?n.rangeExtent():Ui(n.range())}function Fi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Hi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Oi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:bl}function Yi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=ta.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ii(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Yi:Fi,c=r?Iu:Yu;return o=u(n,t,c,e),a=u(t,n,c,yu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Pu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return $i(n,t)},i.tickFormat=function(t,e){return Bi(n,t,e)},i.nice=function(t){return Vi(n,t),u()},i.copy=function(){return Ii(n,t,e,r)},u()}function Zi(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Vi(n,t){return Hi(n,Oi(Xi(n,t)[2]))}function Xi(n,t){null==t&&(t=10);var e=Ui(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function $i(n,t){return ta.range.apply(ta,Xi(n,t))}function Bi(n,t,e){var r=Xi(n,t);if(e){var u=lc.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(va(r[0]),va(r[1])));return u[7]||(u[7]="."+Wi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Ji(u[8],r)),e=u.join("")}else e=",."+Wi(r[2])+"f";return ta.format(e)}function Wi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Ji(n,t){var e=Wi(t[2]);return n in _l?Math.abs(e-Wi(Math.max(va(t[0]),va(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Gi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Hi(r.map(u),e?Math:Sl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Ui(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++<s;)for(var h=f-1;h>0;h--)o.push(i(l)*h);for(l=0;o[l]<a;l++);for(s=o.length;o[s-1]>c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Gi(n.copy(),t,e,r)},Zi(o,n)}function Ki(n,t,e){function r(t){return n(u(t))}var u=Qi(t),i=Qi(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return $i(e,n)},r.tickFormat=function(n,t){return Bi(e,n,t)},r.nice=function(n){return r.domain(Vi(e,n))},r.exponent=function(o){return arguments.length?(u=Qi(t=o),i=Qi(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Ki(n.copy(),t,e)},Zi(r,n)}function Qi(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function no(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++o<c;)u.has(i=r[o])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,o=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,a){arguments.length<2&&(a=0);var c=u[0],l=u[1],s=n.length<2?(c=(c+l)/2,0):(l-c)/(n.length-1+a);return i=r(c+s*a/2,s),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(u,a){arguments.length<2&&(a=0);var c=u[0],l=u[1],s=n.length<2?(c=l=Math.round((c+l)/2),0):0|(l-c)/(n.length-1+a);return i=r(c+Math.round(s*a/2+(l-c-(n.length-1+a)*s)/2),s),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(n.length-a+2*c);return i=r(s+h*c,h),l&&i.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(n.length-a+2*c));return i=r(s+Math.round((f-s-(n.length-a)*h)/2),h),l&&i.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Ui(t.a[0])},e.copy=function(){return no(n,t)},e.domain(n)}function to(r,u){function i(){var n=0,t=u.length;for(a=[];++n<t;)a[n-1]=ta.quantile(r,n/t);return o}function o(n){return isNaN(n=+n)?void 0:u[ta.bisect(a,n)]}var a;return o.domain=function(u){return arguments.length?(r=u.map(t).filter(e).sort(n),i()):r},o.range=function(n){return arguments.length?(u=n,i()):u},o.quantiles=function(){return a},o.invertExtent=function(n){return n=u.indexOf(n),0>n?[0/0,0/0]:[n>0?a[n-1]:r[0],n<a.length?a[n]:r[r.length-1]]},o.copy=function(){return to(r,u)},i()}function eo(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return eo(n,t,e)},u()}function ro(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return ro(n,t)},e}function uo(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return $i(n,t)},t.tickFormat=function(t,e){return Bi(n,t,e)},t.copy=function(){return uo(n)},t}function io(){return 0}function oo(n){return n.innerRadius}function ao(n){return n.outerRadius}function co(n){return n.startAngle}function lo(n){return n.endAngle}function so(n){return n&&n.padAngle}function fo(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function ho(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function go(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=Et(e),p=Et(r);++f<h;)u.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(o(),s=[]);return s.length&&o(),l.length?l.join(""):null}var e=Nr,r=Cr,u=Ce,i=po,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=zl.get(n)||po).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function po(n){return n.join("L")}function vo(n){return po(n)+"Z"}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function yo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function Mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function xo(n,t){return n.length<4?po(n):n[1]+wo(n.slice(1,-1),So(n,t))}function bo(n,t){return n.length<3?po(n):n[0]+wo((n.push(n[0]),n),So([n[n.length-2]].concat(n,[n[1]]),t))}function _o(n,t){return n.length<3?po(n):n[0]+wo(n,So(n,t))}function wo(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return po(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l<t.length;l++,c++)i=n[c],a=t[l],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var s=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+s[0]+","+s[1]}return r}function So(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function ko(n){if(n.length<3)return po(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",Co(Tl,o),",",Co(Tl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),zo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function Eo(n){if(n.length<4)return po(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(Co(Tl,i)+","+Co(Tl,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),zo(e,i,o);return e.join("")}function Ao(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[Co(Tl,o),",",Co(Tl,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),zo(t,o,a);return t.join("")}function No(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,l=-1;++l<=e;)r=n[l],u=l/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return ko(n)}function Co(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function zo(n,t,e){n.push("C",Co(ql,t),",",Co(ql,e),",",Co(Ll,t),",",Co(Ll,e),",",Co(Tl,t),",",Co(Tl,e))}function qo(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Lo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=qo(u,i);++t<e;)r[t]=(o+(o=qo(u=i,i=n[t+1])))/2;return r[t]=o,r}function To(n){for(var t,e,r,u,i=[],o=Lo(n),a=-1,c=n.length-1;++a<c;)t=qo(n[a],n[a+1]),va(t)<Ta?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function Ro(n){return n.length<3?po(n):n[0]+wo(n,To(n))}function Do(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]-ja,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Po(n){function t(t){function c(){v.push("M",a(n(m),f),s,l(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,M=t.length,x=Et(e),b=Et(u),_=e===r?function(){return g}:Et(r),w=u===i?function(){return p}:Et(i);++y<M;)o.call(this,h=t[y],y)?(d.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),m.push([+_.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=Nr,r=Nr,u=0,i=Cr,o=Ce,a=po,c=a.key,l=a,s="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=zl.get(n)||po).key,l=a.reverse||a,s=a.closed?"M":"L",t):c
2308 2308 },t.tension=function(n){return arguments.length?(f=n,t):f},t}function Uo(n){return n.radius}function jo(n){return[n.x,n.y]}function Fo(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-ja;return[e*Math.cos(r),e*Math.sin(r)]}}function Ho(){return 64}function Oo(){return"circle"}function Yo(n){var t=Math.sqrt(n/Da);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Io(n,t,e){return xa(n,Fl),n.namespace=t,n.id=e,n}function Zo(n,t,e,r){var u=n.id,i=n.namespace;return H(n,"function"==typeof e?function(n,o,a){n[i][u].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[i][u].tween.set(t,e)}))}function Vo(n){return null==n&&(n=""),function(){this.textContent=n}}function Xo(n){return null==n?"__transition__":"__transition_"+n+"__"}function $o(n,t,e,r,u){var i=n[e]||(n[e]={active:0,count:0}),o=i[r];if(!o){var c=u.time;o=i[r]={tween:new a,time:c,delay:u.delay,duration:u.duration,ease:u.ease},u=null,++i.count,ta.timer(function(u){function a(e){return i.active>r?s(!1):(i.active=r,o.event&&o.event.start.call(n,g,t),o.tween.forEach(function(e,r){(r=r.call(n,g,t))&&d.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return v.c=l(e||1)?Ce:l,1},0,c),void 0)}function l(t){if(i.active!==r)return s(!1);for(var e=t/f,u=h(e),o=d.length;o>0;)d[--o].call(n,u);return e>=1?s(!0):void 0}function s(u){return o.event&&o.event[u?"end":"interrupt"].call(n,g,t),--i.count?delete i[r]:delete n[e],1}var f,h,g=n.__data__,p=o.delay,v=oc,d=[];return v.t=p+c,u>=p?a(u-p):(v.c=a,void 0)},0,c)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Bl,u);return i==Bl.length?[t.year,Xi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Bl[i-1]<Bl[i]/u?i-1:i]:[Gl,Xi(n,e)[2]]}return r.invert=function(t){return Ko(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Ko)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Ko(+e+1),t).length}var i=r.domain(),o=Ui(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Hi(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Ui(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Zi(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.0"};Date.now||(Date.now=function(){return+new Date});var ea=[].slice,ra=function(n){return ea.call(n)},ua=document,ia=ua.documentElement,oa=window;try{ra(ia.childNodes)[0].nodeType}catch(aa){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{ua.createElement("div").style.setProperty("opacity",0,"")}catch(ca){var la=oa.Element.prototype,sa=la.setAttribute,fa=la.setAttributeNS,ha=oa.CSSStyleDeclaration.prototype,ga=ha.setProperty;la.setAttribute=function(n,t){sa.call(this,n,t+"")},la.setAttributeNS=function(n,t,e){fa.call(this,n,t,e+"")},ha.setProperty=function(n,t,e){ga.call(this,n,t+"",e)}}ta.ascending=n,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i;)if(null!=(r=n[u])&&r>=r){e=r;break}for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=r;break}for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i;)if(null!=(r=n[u])&&r>=r){e=r;break}for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=r;break}for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o;)if(null!=(r=n[i])&&r>=r){e=u=r;break}for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=u=r;break}for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o<i;)e(r=+n[o])&&(u+=r);else for(;++o<i;)e(r=+t.call(n,n[o],o))&&(u+=r);return u},ta.mean=function(n,r){var u,i=0,o=n.length,a=-1,c=o;if(1===arguments.length)for(;++a<o;)e(u=t(n[a]))?i+=u:--c;else for(;++a<o;)e(u=t(r.call(n,n[a],a)))?i+=u:--c;return c?i/c:void 0},ta.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},ta.median=function(r,u){var i,o=[],a=r.length,c=-1;if(1===arguments.length)for(;++c<a;)e(i=t(r[c]))&&o.push(i);else for(;++c<a;)e(i=t(u.call(r,r[c],c)))&&o.push(i);return o.length?ta.quantile(o.sort(n),.5):void 0};var pa=r(n);ta.bisectLeft=pa.left,ta.bisect=ta.bisectRight=pa.right,ta.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=0|Math.random()*i--,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,u),e=new Array(t);++n<t;)for(var r,i=-1,o=e[n]=new Array(r);++i<r;)o[i]=arguments[i][n];return e},ta.transpose=function(n){return ta.zip.apply(ta,n)},ta.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ta.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ta.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ta.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var va=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(va(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)<t;)u.push(r/o);return u},ta.map=function(n,t){var e=new a;if(n instanceof a)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,u=-1,i=n.length;if(1===arguments.length)for(;++u<i;)e.set(u,n[u]);else for(;++u<i;)e.set(t.call(n,r=n[u],u),r)}else for(var o in n)e.set(o,n[o]);return e};var da="__proto__",ma="\x00";o(a,{has:s,get:function(n){return this._[c(n)]},set:function(n,t){return this._[c(n)]=t},remove:f,keys:h,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:l(t),value:this._[t]});return n},size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t),this._[t])}}),ta.nest=function(){function n(t,o,c){if(c>=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g<p;)(h=d.get(l=v(s=o[g])))?h.push(s):d.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),d.forEach(f),s}function t(n,e){if(e>=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=d(n,t,t[e]);return n};var ya=["webkit","ms","moz","Moz","o","O"];ta.dispatch=function(){for(var n=new M,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=x(n);return n},M.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,l=r.length;++c<l;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return S(i)},ka.selectAll=function(n){var t,e,r=[];n=E(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=ra(n.call(e,e.__data__,a,u))),t.parentNode=e);return S(r)};var Ea={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ta.ns={prefix:Ea,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!C(n[u]).test(t))return!1;return!0}for(t in n)this.each(q(t,n[t]));return this}return this.each(q(n,t))},ka.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(T(e,n[e],t));return this}if(2>r)return oa.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(T(n,t,e))},ka.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ka.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ka.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ka.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ka.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ka.remove=function(){return this.each(P)},ka.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++r<o;)m.has(d=t.call(u=n[r],u.__data__,r))?v[r]=u:m.set(d,u),y[r]=d;for(r=-1;++r<f;)(u=m.get(d=t.call(e,i=e[r],r)))?u!==!0&&(g[r]=u,u.__data__=i):p[r]=U(i),m.set(d,!0);for(r=-1;++r<o;)m.get(y[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=U(i);for(;f>r;++r)p[r]=U(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++i<o;)(u=r[i])&&(n[i]=u.__data__);return n}var c=O([]),l=S([]),s=S([]);if("function"==typeof n)for(;++i<o;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<o;)e(r=this[i],n);return l.enter=function(){return c},l.exit=function(){return s},l},ka.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},ka.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=j(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ka.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ka.sort=function(n){n=F.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},ka.each=function(n){return H(this,function(t,e,r){n.call(t,t.__data__,e,r)})},ka.call=function(n){var t=ra(arguments);return n.apply(t[0]=this,t),this},ka.empty=function(){return!this.node()},ka.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ka.size=function(){var n=0;return H(this,function(){++n}),n};var Aa=[];ta.selection.enter=O,ta.selection.enter.prototype=Aa,Aa.append=ka.append,Aa.empty=ka.empty,Aa.node=ka.node,Aa.call=ka.call,Aa.size=ka.size,Aa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var l=-1,s=u.length;++l<s;)(i=u[l])?(t.push(r[l]=e=n.call(u.parentNode,i.__data__,l,a)),e.__data__=i.__data__):t.push(null)}return S(o)},Aa.insert=function(n,t){return arguments.length<2&&(t=Y(this)),ka.insert.call(this,n,t)},ka.transition=function(n){for(var t,e,r=Dl||++Hl,u=Xo(n),i=[],o=Pl||{time:Date.now(),ease:ku,delay:0,duration:250},a=-1,c=this.length;++a<c;){i.push(t=[]);for(var l=this[a],s=-1,f=l.length;++s<f;)(e=l[s])&&$o(e,s,u,r,o),t.push(e)}return Io(i,u,r)},ka.interrupt=function(n){var t=Xo(n);return this.each(function(){var n=this[t];n&&++n.active})},ta.select=function(n){var t=["string"==typeof n?ba(n,ua):n];return t.parentNode=ia,S([t])},ta.selectAll=function(n){var t=ra("string"==typeof n?_a(n,ua):n);return t.parentNode=ia,S([t])};var Na=ta.select(ia);ka.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(Z(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(Z(n,t,e))};var Ca=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ca.forEach(function(n){"on"+n in ua&&Ca.remove(n)});var za="onselectstart"in ua?null:m(ia.style,"userSelect"),qa=0;ta.mouse=function(n){return B(n,_())};var La=/WebKit/.test(oa.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=_().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return B(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(u()).on(i+d,a).on(o+d,c),y=$(),M=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,ta.mouse,G,"mousemove","mouseup"),i=t(W,ta.touch,J,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},ta.rebind(n,e,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=_().touches),t?ra(t).map(function(t){var e=B(n,t);return e.identifier=t.identifier,e}):[]};var Ta=1e-6,Ra=Ta*Ta,Da=Math.PI,Pa=2*Da,Ua=Pa-Ta,ja=Da/2,Fa=Da/180,Ha=180/Da,Oa=Math.SQRT2,Ya=2,Ia=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=rt(v),o=i/(Ya*h)*(e*ut(Oa*t+v)-et(v));return[r+o*l,u+o*s,i*e/rt(Oa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Oa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ia*f)/(2*i*Ya*h),p=(c*c-i*i-Ia*f)/(2*c*Ya*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Oa;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(z,s).on(Xa+".zoom",h).on("dblclick.zoom",g).on(T,f)}function t(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function e(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function r(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=e(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function i(t,e,i,o){t.__chart__={x:k.x,y:k.y,k:k.k},r(Math.pow(2,o)),u(v=e,i),t=ta.select(t),N>0&&(t=t.transition().duration(N)),t.call(n.event)}function o(){x&&x.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),S&&S.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function a(n){C++||n({type:"zoomstart"})}function c(n){o(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(n){--C||n({type:"zoomend"}),v=null}function s(){function n(){s=1,u(ta.mouse(r),h),c(o)}function e(){f.on(q,null).on(L,null),g(s&&ta.event.target===i),l(o)}var r=this,i=ta.event.target,o=R.of(r,arguments),s=0,f=ta.select(oa).on(q,n).on(L,e),h=t(ta.mouse(r)),g=$();I(r),a(o)}function f(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=t(n))}),n}function e(){var t=ta.event.target;ta.select(t).on(x,o).on(_,h),w.push(t);for(var e=ta.event.changedTouches,r=0,u=e.length;u>r;++r)d[e[r].identifier]=null;var a=n(),c=Date.now();if(1===a.length){if(500>c-y){var l=a[0];i(p,l,d[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),b()}y=c}else if(a.length>1){var l=a[0],s=a[1],f=l[0]-s[0],g=l[1]-s[1];m=f*f+g*g}}function o(){var n,t,e,i,o=ta.touches(p);I(p);for(var a=0,l=o.length;l>a;++a,i=null)if(e=o[a],i=d[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}y=null,u(n,t),c(v)}function h(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(w).on(M,null),S.on(z,s).on(T,f),E(),l(v)}var g,p=this,v=R.of(p,arguments),d={},m=0,M=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+M,_="touchend"+M,w=[],S=ta.select(p),E=$();e(),a(v),S.on(z,null).on(T,e)}function h(){var n=R.of(this,arguments);m?clearTimeout(m):(p=t(v=d||ta.mouse(this)),I(this),a(n)),m=setTimeout(function(){m=null,l(n)},50),b(),r(Math.pow(2,.002*Za())*k.k),u(v,p),c(n)}function g(){var n=ta.mouse(this),e=Math.log(k.k)/Math.LN2;i(this,n,t(n),ta.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}var p,v,d,m,y,M,x,_,S,k={x:0,y:0,k:1},E=[960,500],A=Va,N=250,C=0,z="mousedown.zoom",q="mousemove.zoom",L="mouseup.zoom",T="touchstart.zoom",R=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=R.of(this,arguments),t=k;Dl?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},a(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],u=v?v[0]:e/2,i=v?v[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){l(n)}).each("end.zoom",function(){l(n)}):(this.__chart__=k,a(n),c(n),l(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},o(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Va:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(d=t&&[+t[0],+t[1]],n):d},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(N=+t,n):N},n.x=function(t){return arguments.length?(x=t,M=t.copy(),k={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(S=t,_=t.copy(),k={x:0,y:0,k:1},n):S},ta.rebind(n,R,"on")};var Za,Va=[0,1/0],Xa="onwheel"in ua?(Za=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Za=function(){return ta.event.wheelDelta},"mousewheel"):(Za=function(){return-ta.event.detail},"MozMousePixelScroll");ta.color=ot,ot.prototype.toString=function(){return this.rgb()+""},ta.hsl=at;var $a=at.prototype=new ot;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new at(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new at(this.h,this.s,n*this.l)},$a.rgb=function(){return ct(this.h,this.s,this.l)},ta.hcl=lt;var Ba=lt.prototype=new ot;Ba.brighter=function(n){return new lt(this.h,this.c,Math.min(100,this.l+Wa*(arguments.length?n:1)))},Ba.darker=function(n){return new lt(this.h,this.c,Math.max(0,this.l-Wa*(arguments.length?n:1)))},Ba.rgb=function(){return st(this.h,this.c,this.l).rgb()},ta.lab=ft;var Wa=18,Ja=.95047,Ga=1,Ka=1.08883,Qa=ft.prototype=new ot;Qa.brighter=function(n){return new ft(Math.min(100,this.l+Wa*(arguments.length?n:1)),this.a,this.b)},Qa.darker=function(n){return new ft(Math.max(0,this.l-Wa*(arguments.length?n:1)),this.a,this.b)},Qa.rgb=function(){return ht(this.l,this.a,this.b)},ta.rgb=mt;var nc=mt.prototype=new ot;nc.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new mt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mt(u,u,u)},nc.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mt(n*this.r,n*this.g,n*this.b)},nc.hsl=function(){return _t(this.r,this.g,this.b)},nc.toString=function(){return"#"+xt(this.r)+xt(this.g)+xt(this.b)};var tc=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});tc.forEach(function(n,t){tc.set(n,yt(t))}),ta.functor=Et,ta.xhr=Nt(At),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Ct(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<l;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;l>s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var ec,rc,uc,ic,oc,ac=oa[m(oa,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};rc?rc.n=i:ec=i,rc=i,uc||(ic=clearTimeout(ic),uc=1,ac(Lt))},ta.timer.flush=function(){Tt(),Rt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var cc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Pt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Dt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),cc[8+e/3]};var lc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,sc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Dt(n,t))).toFixed(Math.max(0,Math.min(20,Dt(n*(1+1e-15),t))))}}),fc=ta.time={},hc=Date;Ft.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){gc.setUTCDate.apply(this._,arguments)},setDay:function(){gc.setUTCDay.apply(this._,arguments)},setFullYear:function(){gc.setUTCFullYear.apply(this._,arguments)},setHours:function(){gc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){gc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){gc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){gc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){gc.setUTCSeconds.apply(this._,arguments)},setTime:function(){gc.setTime.apply(this._,arguments)}};var gc=Date.prototype;fc.year=Ht(function(n){return n=fc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),fc.years=fc.year.range,fc.years.utc=fc.year.utc.range,fc.day=Ht(function(n){var t=new hc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),fc.days=fc.day.range,fc.days.utc=fc.day.utc.range,fc.dayOfYear=function(n){var t=fc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=fc[n]=Ht(function(n){return(n=fc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});fc[n+"s"]=e.range,fc[n+"s"].utc=e.utc.range,fc[n+"OfYear"]=function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)}}),fc.week=fc.sunday,fc.weeks=fc.sunday.range,fc.weeks.utc=fc.sunday.utc.range,fc.weekOfYear=fc.sundayOfYear;var pc={"-":"",_:" ",0:"0"},vc=/^\s*\d+/,dc=/^%/;ta.locale=function(n){return{numberFormat:Ut(n),timeFormat:Yt(n)}};var mc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=mc.numberFormat,ta.geo={},le.prototype={s:0,t:0,add:function(n){se(n,this.t,yc),se(yc.s,this.s,this),this.s?this.t+=yc.t:this.s=yc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var yc=new le;ta.geo.stream=function(n,t){n&&Mc.hasOwnProperty(n.type)?Mc[n.type](n,t):fe(n,t)};var Mc={Feature:function(n,t){fe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)fe(e[r].geometry,t)}},xc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){he(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)he(e[r],t,0)},Polygon:function(n,t){ge(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ge(e[r],t)
2309 2309 },GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)fe(e[r],t)}};ta.geo.area=function(n){return bc=0,ta.geo.stream(n,wc),bc};var bc,_c=new le,wc={sphere:function(){bc+=4*Da},point:y,lineStart:y,lineEnd:y,polygonStart:function(){_c.reset(),wc.lineStart=pe},polygonEnd:function(){var n=2*_c;bc+=0>n?4*Da+n:n,wc.lineStart=wc.lineEnd=wc.point=y}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=ve([t*Fa,e*Fa]);if(m){var u=me(m,r),i=[u[1],-u[0],0],o=me(i,u);xe(o),o=be(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ha*l,d=va(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ha;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ha;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=va(r)>180?r+(r>0?360:-360):r}else v=n,d=e;wc.point(n,e),t(n,e)}function i(){wc.lineStart()}function o(){u(v,d),wc.lineEnd(),va(y)>Ta&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,v,d,m,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=u,b.lineStart=i,b.lineEnd=o,y=0,wc.polygonStart()},polygonEnd:function(){wc.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>_c?(s=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){Sc=kc=Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,Dc);var t=Lc,e=Tc,r=Rc,u=t*t+e*e+r*r;return Ra>u&&(t=Cc,e=zc,r=qc,Ta>kc&&(t=Ec,e=Ac,r=Nc),u=t*t+e*e+r*r,Ra>u)?[0/0,0/0]:[Math.atan2(e,t)*Ha,tt(r/Math.sqrt(u))*Ha]};var Sc,kc,Ec,Ac,Nc,Cc,zc,qc,Lc,Tc,Rc,Dc={sphere:y,point:we,lineStart:ke,lineEnd:Ee,polygonStart:function(){Dc.lineStart=Ae},polygonEnd:function(){Dc.lineStart=ke}},Pc=Te(Ce,Ue,Fe,[-Da,-Da/2]),Uc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ie(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ze(Ve)}).raw=Ve,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ta,f+.12*l+Ta],[s-.214*l-Ta,f+.234*l-Ta]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ta,f+.166*l+Ta],[s-.115*l-Ta,f+.234*l-Ta]]).stream(c).point,n},n.scale(1070)};var jc,Fc,Hc,Oc,Yc,Ic,Zc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Fc=0,Zc.lineStart=Xe},polygonEnd:function(){Zc.lineStart=Zc.lineEnd=Zc.point=y,jc+=va(Fc/2)}},Vc={point:$e,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},Xc={point:Je,lineStart:Ge,lineEnd:Ke,polygonStart:function(){Xc.lineStart=Qe},polygonEnd:function(){Xc.point=Je,Xc.lineStart=Ge,Xc.lineEnd=Ke}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return jc=0,ta.geo.stream(n,u(Zc)),jc},n.centroid=function(n){return Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,u(Xc)),Rc?[Lc/Rc,Tc/Rc]:qc?[Cc/qc,zc/qc]:Nc?[Ec/Nc,Ac/Nc]:[0/0,0/0]},n.bounds=function(n){return Yc=Ic=-(Hc=Oc=1/0),ta.geo.stream(n,u(Vc)),[[Hc,Oc],[Yc,Ic]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||er(n):At,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Be:new nr(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new rr(t);for(var r in n)e[r]=n[r];return e}}},rr.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ir,ta.geo.projectionMutator=or,(ta.geo.equirectangular=function(){return ir(cr)}).raw=cr.invert=cr,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t}return n=sr(n[0]%360*Fa,n[1]*Fa,n.length>2?n[2]*Fa:0),t.invert=function(t){return t=n.invert(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t},t},lr.invert=cr,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=sr(-n[0]*Fa,-n[1]*Fa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ha,n[1]*=Ha}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=pr((t=+r)*Fa,u*Fa),n):t},n.precision=function(r){return arguments.length?(e=pr(t*Fa,(u=+r)*Fa),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Fa,u=n[1]*Fa,i=t[1]*Fa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return va(n%d)>Ta}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return va(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=dr(a,o,90),f=mr(r,e,y),h=dr(l,c,90),g=mr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=yr,u=Mr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return xr(n[0]*Fa,n[1]*Fa,t[0]*Fa,t[1]*Fa)},ta.geo.length=function(n){return $c=0,ta.geo.stream(n,Bc),$c};var $c,Bc={sphere:y,point:y,lineStart:br,lineEnd:y,polygonStart:y,polygonEnd:y},Wc=_r(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ir(Wc)}).raw=Wc;var Jc=_r(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},At);(ta.geo.azimuthalEquidistant=function(){return ir(Jc)}).raw=Jc,(ta.geo.conicConformal=function(){return Ze(wr)}).raw=wr,(ta.geo.conicEquidistant=function(){return Ze(Sr)}).raw=Sr;var Gc=_r(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ir(Gc)}).raw=Gc,kr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ja]},(ta.geo.mercator=function(){return Er(kr)}).raw=kr;var Kc=_r(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ir(Kc)}).raw=Kc;var Qc=_r(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ir(Qc)}).raw=Qc,Ar.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ja]},(ta.geo.transverseMercator=function(){var n=Er(Ar),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ar,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=Et(e),i=Et(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(qr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=zr(a),s=zr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t<s.length-h;++t)g.push(n[a[s[t]][2]]);return g}var e=Nr,r=Cr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ta.geom.polygon=function(n){return xa(n,nl),n};var nl=ta.geom.polygon.prototype=[];nl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},nl.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},nl.clip=function(n){for(var t,e,r,u,i,o,a=Rr(n),c=-1,l=this.length-Rr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Lr(o,s,u)?(Lr(i,s,u)||n.push(Tr(i,o,s,u)),n.push(o)):Lr(i,s,u)&&n.push(Tr(i,o,s,u)),i=o;a&&n.push(n[0]),s=u}return n};var tl,el,rl,ul,il,ol=[],al=[];Yr.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Zr),t.length},nu.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},tu.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=iu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(ru(this,e),n=e,e=n.U),e.C=!1,r.C=!0,uu(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(uu(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ru(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?iu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,ru(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,uu(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,ru(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,uu(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ru(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,uu(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},ta.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return ou(e(n),a).cells.forEach(function(e,a){var c=e.edges,l=e.site,s=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):l.x>=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Nr,u=Cr,i=r,o=u,a=cl;return n?t(n):(t.links=function(n){return ou(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ou(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Zr),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c<l;)u=s,i=f,s=a[c].edge,f=s.l===o?s.r:s.l,r<i.i&&r<f.i&&cu(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=Et(r=n),t):r},t.y=function(n){return arguments.length?(o=Et(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?cl:n,t):a===cl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===cl?null:a&&a[1]},t)};var cl=[[-1e6,-1e6],[1e6,1e6]];ta.geom.delaunay=function(n){return ta.geom.voronoi().triangles(n)},ta.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(va(c-e)+va(s-r)<.01)l(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,u,i,o,a),l(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,u,i,o,a)}function l(n,t,e,r,u,o,a,c){var l=.5*(u+a),s=.5*(o+c),f=e>=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=fu()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=Et(a),x=Et(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.x<v&&(v=s.x),s.y<d&&(d=s.y),s.x>m&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=fu();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){hu(n,k,v,d,m,y)},k.find=function(n){return gu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=s=null,k}var o,a=Nr,c=Cr;return(o=arguments.length)?(a=lu,c=su,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},ta.interpolateRgb=pu,ta.interpolateObject=vu,ta.interpolateNumber=du,ta.interpolateString=mu;var ll=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,sl=new RegExp(ll.source,"g");ta.interpolate=yu,ta.interpolators=[function(n,t){var e=typeof t;return("string"===e?tc.has(t)||/^(#|rgb\(|hsl\()/.test(t)?pu:mu:t instanceof ot?pu:Array.isArray(t)?Mu:"object"===e&&isNaN(t)?vu:du)(n,t)}],ta.interpolateArray=Mu;var fl=function(){return At},hl=ta.map({linear:fl,poly:Eu,quad:function(){return wu},cubic:function(){return Su},sin:function(){return Au},exp:function(){return Nu},circle:function(){return Cu},elastic:zu,back:qu,bounce:function(){return Lu}}),gl=ta.map({"in":At,out:bu,"in-out":_u,"out-in":function(n){return _u(bu(n))}});ta.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||At,xu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Tu,ta.interpolateHsl=Ru,ta.interpolateLab=Du,ta.interpolateRound=Pu,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Uu(e?e.matrix:pl)})(n)},Uu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Ou,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Zu(n[e]));return t}},ta.layout.chord=function(){function n(){var n,l,f,h,g,p={},v=[],d=ta.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(l=0,g=-1;++g<i;)l+=u[h][g];v.push(l),m.push(ta.range(i)),n+=l}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(Pa-s*i)/n,l=0,h=-1;++h<i;){for(f=l,g=-1;++g<i;){var y=d[h],M=m[y][g],x=u[y][M],b=l,_=l+=x*n;p[y+"-"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,l={},s=0;return l.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,l):u},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(o=n,e=r=null,l):o},l.sortSubgroups=function(n){return arguments.length?(a=n,e=null,l):a},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},ta.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=vl,h=dl,g=-30,p=ml,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,M,x,b=m.length,_=y.length;for(e=0;_>e;++e)a=y[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(p=M*M+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,M*=p,x*=p,h.x-=M*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=M*(d=1-d),f.y+=x*d);if((d=r*v)&&(M=l[0]/2,x=l[1]/2,e=-1,d))for(;++e<b;)a=m[e],a.x+=(M-a.x)*d,a.y+=(x-a.y)*d;if(g)for(Gu(t=ta.geom.quadtree(m),r,o),e=-1;++e<b;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<b;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(l=n,a):l},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(s=+n,a):s},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++a<l;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,s=y.length,p=l[0],v=l[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(At).on("dragstart.force",$u).on("drag.force",t).on("dragend.force",Bu)),arguments.length?(this.on("mouseover.force",Wu).on("mouseout.force",Ju).call(e),void 0):e},ta.rebind(a,c,"on")};var vl=20,dl=1,ml=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return ni(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ri,e=ti,r=ei;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Qu(t,function(n){n.children&&(n.value=0)}),ni(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++l<o;)n(a=i[l],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=ta.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Ku(e,r)},ta.layout.pie=function(){function n(o){var a,c=o.length,l=o.map(function(e,r){return+t.call(n,e,r)}),s=+("function"==typeof r?r.apply(this,arguments):r),f=("function"==typeof u?u.apply(this,arguments):u)-s,h=Math.min(Math.abs(f)/c,+("function"==typeof i?i.apply(this,arguments):i)),g=h*(0>f?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===yl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=yl,r=0,u=Pa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var yl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=At,e=ci,r=li,u=ai,i=ii,o=oi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:Ml.get(t)||ci,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:xl.get(t)||li,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ml=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(si),i=n.map(fi),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ci}),xl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:li});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=l[i],a>=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=vi,u=gi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=Et(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return pi(n,t)}:Et(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,ni(a,function(n){n.r=+s(n.value)}),ni(a,xi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;ni(a,function(n){n.r+=f}),ni(a,xi),ni(a,function(n){n.r-=f})}return wi(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(di),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Ku(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(ni(h,e),h.parent.m=-h.z,Qu(h,r),l)Qu(f,i);else{var g=f,p=f,v=f;Qu(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Qu(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ci(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ai(o),u=Ei(u),o&&u;)c=Ei(c),i=Ai(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ni(zi(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ai(i)&&(i.t=o,i.m+=f-s),u&&!Ei(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=ki,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Ku(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;ni(c,function(n){var t=n.children;t&&t.length?(n.x=Li(t),n.y=qi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Ti(c),f=Ri(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return ni(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=ki,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Ku(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<o;)u=n[i],u.x=a,u.y=l,u.dy=s,a+=u.dx=Math.min(e.x+e.dx-a,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<o;)u=n[i],u.x=a,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=ta.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Di,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Di(t):Pi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Pi(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Di:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Ku(i,a)},ta.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;
2310 2310 do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var bl={floor:At,ceil:At};ta.scale.linear=function(){return Ii([0,1],[0,1],yu,!1)};var _l={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Gi(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var wl=ta.format(".0e"),Sl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Ki(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return no([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(kl)},ta.scale.category20=function(){return ta.scale.ordinal().range(El)},ta.scale.category20b=function(){return ta.scale.ordinal().range(Al)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Nl)};var kl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(Mt),El=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(Mt),Al=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(Mt),Nl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(Mt);ta.scale.quantile=function(){return to([],[])},ta.scale.quantize=function(){return eo(0,1,[0,1])},ta.scale.threshold=function(){return ro([.5],[0,1])},ta.scale.identity=function(){return uo([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-ja,f=a.apply(this,arguments)-ja,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ua)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===Cl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=tt(d/l*Math.sin(m))),n&&(E=tt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=Da?0:1;if(A&&fo(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=Da?0:1;if(E&&fo(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Tr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=ho(null==S?[_,w]:[S,k],[y,M],l,H,g),Y=ho([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^fo(O[1][0],O[1][1],Y[1][0],Y[1][1]),",",g," ",Y[1],"A",H,",",H," 0 0,",v," ",Y[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",Y[0])}else N.push("M",y,",",M);if(null!=S){var I=Math.min(p,(n-F)/(j-1)),Z=ho([y,M],[S,k],n,-I,g),V=ho([_,w],null==x?[y,M]:[x,b],n,-I,g);p===I?N.push("L",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^fo(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",I,",",I," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",I,",",I," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=oo,r=ao,u=io,i=Cl,o=co,a=lo,c=so;return n.innerRadius=function(t){return arguments.length?(e=Et(t),n):e},n.outerRadius=function(t){return arguments.length?(r=Et(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=Et(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==Cl?Cl:Et(t),n):i},n.startAngle=function(t){return arguments.length?(o=Et(t),n):o},n.endAngle=function(t){return arguments.length?(a=Et(t),n):a},n.padAngle=function(t){return arguments.length?(c=Et(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-ja;return[Math.cos(t)*n,Math.sin(t)*n]},n};var Cl="auto";ta.svg.line=function(){return go(At)};var zl=ta.map({linear:po,"linear-closed":vo,step:mo,"step-before":yo,"step-after":Mo,basis:ko,"basis-open":Eo,"basis-closed":Ao,bundle:No,cardinal:_o,"cardinal-open":xo,"cardinal-closed":bo,monotone:Ro});zl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ql=[0,2/3,1/3,0],Ll=[0,1/3,2/3,0],Tl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=go(Do);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},yo.reverse=Mo,Mo.reverse=yo,ta.svg.area=function(){return Po(At)},ta.svg.area.radial=function(){var n=Po(Do);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-ja,s=l.call(n,u,r)-ja;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Da)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=yr,o=Mr,a=Uo,c=co,l=lo;return n.radius=function(t){return arguments.length?(a=Et(t),n):a},n.source=function(t){return arguments.length?(i=Et(t),n):i},n.target=function(t){return arguments.length?(o=Et(t),n):o},n.startAngle=function(t){return arguments.length?(c=Et(t),n):c},n.endAngle=function(t){return arguments.length?(l=Et(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=yr,e=Mr,r=jo;return n.source=function(e){return arguments.length?(t=Et(e),n):t},n.target=function(t){return arguments.length?(e=Et(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=jo,e=n.projection;return n.projection=function(n){return arguments.length?e(Fo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(Rl.get(t.call(this,n,r))||Yo)(e.call(this,n,r))}var t=Oo,e=Ho;return n.type=function(e){return arguments.length?(t=Et(e),n):t},n.size=function(t){return arguments.length?(e=Et(t),n):e},n};var Rl=ta.map({circle:Yo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*jl)),e=t*jl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Ul),e=t*Ul/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Ul),e=t*Ul/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=Rl.keys();var Dl,Pl,Ul=Math.sqrt(3),jl=Math.tan(30*Fa),Fl=[],Hl=0;Fl.call=ka.call,Fl.empty=ka.empty,Fl.node=ka.node,Fl.size=ka.size,ta.transition=function(n){return arguments.length?Dl?n.transition():n:Na.transition()},ta.transition.prototype=Fl,Fl.select=function(n){var t,e,r,u=this.id,i=this.namespace,o=[];n=k(n);for(var a=-1,c=this.length;++a<c;){o.push(t=[]);for(var l=this[a],s=-1,f=l.length;++s<f;)(r=l[s])&&(e=n.call(r,r.__data__,s,a))?("__data__"in r&&(e.__data__=r.__data__),$o(e,s,i,u,r[i][u]),t.push(e)):t.push(null)}return Io(o,i,u)},Fl.selectAll=function(n){var t,e,r,u,i,o=this.id,a=this.namespace,c=[];n=E(n);for(var l=-1,s=this.length;++l<s;)for(var f=this[l],h=-1,g=f.length;++h<g;)if(r=f[h]){i=r[a][o],e=n.call(r,r.__data__,h,l),c.push(t=[]);for(var p=-1,v=e.length;++p<v;)(u=e[p])&&$o(u,p,a,o,i),t.push(u)}return Io(c,a,o)},Fl.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=j(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Io(u,this.namespace,this.id)},Fl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):H(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Fl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Ou:yu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Fl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Fl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=oa.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=yu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Zo(this,"style."+n,t,u)},Fl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,oa.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Fl.text=function(n){return Zo(this,"text",n,Vo)},Fl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Fl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),H(this,function(r){r[e][t].ease=n}))},Fl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:H(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Fl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:H(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Fl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=Pl,i=Dl;Dl=e,H(this,function(t,u,i){Pl=t[r][e],n.call(t,t.__data__,u,i)}),Pl=u,Dl=i}else H(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Fl.transition=function(){for(var n,t,e,r,u=this.id,i=++Hl,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Io(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):At:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=ta.transition(p.exit()).style("opacity",Ta).remove(),m=ta.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,M=ji(f),x=l.selectAll(".domain").data([0]),b=(x.enter().append("path").attr("class","domain"),ta.transition(x));v.append("line"),v.append("text");var _,w,S,k,E=v.select("line"),A=m.select("line"),N=p.select("text").text(g),C=v.select("text"),z=m.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,_="x",S="y",w="x2",k="y2",N.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+M[0]+","+q*i+"V0H"+M[1]+"V"+q*i)):(n=Wo,_="y",S="x",w="y2",k="x2",N.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),b.attr("d","M"+q*i+","+M[0]+"H0V"+M[1]+"H"+q*i)),E.attr(k,q*u),C.attr(S,q*y),A.attr(w,0).attr(k,q*u),z.attr(_,0).attr(S,q*y),f.rangeBand){var L=f,T=L.rangeBand()/2;s=f=function(n){return L(n)+T}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=Ol,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Yl?t+"":Ol,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Ol="bottom",Yl={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(i){i.each(function(){var i=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,At);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Il[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=ta.transition(i),h=ta.transition(o);c&&(s=ji(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=ji(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==ta.event.keyCode&&(N||(y=null,z[0]-=s[1],z[1]-=f[1],N=2),b())}function p(){32==ta.event.keyCode&&2==N&&(z[0]+=s[1],z[1]+=f[1],N=0,b())}function v(){var n=ta.mouse(x),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),N||(ta.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]<y[0])],z[1]=f[+(n[1]<y[1])]):y=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,l,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:N?"move":"resize"}))}function d(n,t,e){var r,u,a=ji(t),c=a[0],l=a[1],p=z[e],v=e?f:s,d=v[1]-v[0];return N&&(c-=p,l-=d+p),r=(e?g:h)?Math.max(c,Math.min(l,n[e])):n[e],N?u=(r+=p)+d:(y&&(p=Math.max(c,Math.min(l,2*y[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var y,M,x=this,_=ta.select(ta.event.target),w=a.of(x,arguments),S=ta.select(x),k=_.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,N=_.classed("extent"),C=$(),z=ta.mouse(x),q=ta.select(oa).on("keydown.brush",u).on("keyup.brush",p);if(ta.event.changedTouches?q.on("touchmove.brush",v).on("touchend.brush",m):q.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),N)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var L=+/w$/.test(k),T=+/^n/.test(k);M=[s[1-L]-z[0],f[1-T]-z[1]],z[0]=s[L],z[1]=f[T]}else ta.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Zl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Dl?ta.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=Mu(s,t.x),r=Mu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Zl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Zl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},ta.rebind(n,a,"on")};var Il={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Zl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Vl=fc.format=mc.timeFormat,Xl=Vl.utc,$l=Xl("%Y-%m-%dT%H:%M:%S.%LZ");Vl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:$l,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=$l.toString,fc.second=Ht(function(n){return new hc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),fc.seconds=fc.second.range,fc.seconds.utc=fc.second.utc.range,fc.minute=Ht(function(n){return new hc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),fc.minutes=fc.minute.range,fc.minutes.utc=fc.minute.utc.range,fc.hour=Ht(function(n){var t=n.getTimezoneOffset()/60;return new hc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),fc.hours=fc.hour.range,fc.hours.utc=fc.hour.utc.range,fc.month=Ht(function(n){return n=fc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),fc.months=fc.month.range,fc.months.utc=fc.month.utc.range;var Bl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Wl=[[fc.second,1],[fc.second,5],[fc.second,15],[fc.second,30],[fc.minute,1],[fc.minute,5],[fc.minute,15],[fc.minute,30],[fc.hour,1],[fc.hour,3],[fc.hour,6],[fc.hour,12],[fc.day,1],[fc.day,2],[fc.week,1],[fc.month,1],[fc.month,3],[fc.year,1]],Jl=Vl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ce]]),Gl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:At,ceil:At};Wl.year=fc.year,fc.scale=function(){return Go(ta.scale.linear(),Wl,Jl)};var Kl=Wl.map(function(n){return[n[0].utc,n[1]]}),Ql=Xl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ce]]);Kl.year=fc.year.utc,fc.scale.utc=function(){return Go(ta.scale.linear(),Kl,Ql)},ta.text=Nt(function(n){return n.responseText}),ta.json=function(n,t){return Ct(n,"application/json",Qo,t)},ta.html=function(n,t){return Ct(n,"text/html",na,t)},ta.xml=Nt(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}();
2311 2311 ;!function(a){"use strict";function b(a){this.owner=a}function c(a,b){if(Object.create)b.prototype=Object.create(a.prototype);else{var c=function(){};c.prototype=a.prototype,b.prototype=new c}return b.prototype.constructor=b,b}function d(a){var b=this.internal=new e(this);b.loadConfig(a),b.beforeInit(a),b.init(),b.afterInit(a),function c(a,b,d){Object.keys(a).forEach(function(e){b[e]=a[e].bind(d),Object.keys(a[e]).length>0&&c(a[e],b[e],d)})}(h,this,this)}function e(b){var c=this;c.d3=a.d3?a.d3:"undefined"!=typeof require?require("d3"):void 0,c.api=b,c.config=c.getDefaultConfig(),c.data={},c.cache={},c.axes={}}function f(a){b.call(this,a)}function g(a,b){function c(a,b){a.attr("transform",function(a){return"translate("+Math.ceil(b(a)+u)+", 0)"})}function d(a,b){a.attr("transform",function(a){return"translate(0,"+Math.ceil(b(a))+")"})}function e(a){var b=a[0],c=a[a.length-1];return c>b?[b,c]:[c,b]}function f(a){var b,c,d=[];if(a.ticks)return a.ticks.apply(a,n);for(c=a.domain(),b=Math.ceil(c[0]);b<c[1];b++)d.push(b);return d.length>0&&d[0]>0&&d.unshift(d[0]-(d[1]-d[0])),d}function g(){var a,c=p.copy();return b.isCategory&&(a=p.domain(),c.domain([a[0],a[1]-1])),c}function h(a){var b=m?m(a):a;return"undefined"!=typeof b?b:""}function i(a){if(A)return A;var b={h:11.5,w:5.5};return a.select("text").text(h).each(function(a){var c=this.getBoundingClientRect(),d=h(a),e=c.height,f=d?c.width/d.length:void 0;e&&f&&(b.h=e,b.w=f)}).text(""),A=b,b}function j(c){return b.withoutTransition?c:a.transition(c)}function k(m){m.each(function(){function m(a,c){function d(a,b){f=void 0;for(var h=1;h<b.length;h++)if(" "===b.charAt(h)&&(f=h),e=b.substr(0,h+1),g=U.w*e.length,g>c)return d(a.concat(b.substr(0,f?f:h)),b.slice(f?f+1:h));return a.concat(b)}var e,f,g,i=h(a),j=[];return"[object Array]"===Object.prototype.toString.call(i)?i:((!c||0>=c)&&(c=X?95:b.isCategory?Math.ceil(F(G[1])-F(G[0]))-12:110),d(j,i+""))}function n(a,b){var c=U.h;return 0===b&&(c="left"===q||"right"===q?-((V[a.index]-1)*(U.h/2)-3):".71em"),c}function v(a){var b=p(a)+(o?0:u);return L[0]<b&&b<L[1]?r:0}function w(a){return a?a>0?"start":"end":"middle"}function x(a){return a?"rotate("+a+")":""}function y(a){return a?8*Math.sin(Math.PI*(a/180)):0}function z(a){return a?11.5-2.5*(a/15)*(a>0?1:-1):W}var A,B,C,D=k.g=a.select(this),E=this.__chart__||p,F=this.__chart__=g(),G=t?t:f(F),H=D.selectAll(".tick").data(G,F),I=H.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),J=H.exit().remove(),K=j(H).style("opacity",1),L=p.rangeExtent?p.rangeExtent():e(p.range()),M=D.selectAll(".domain").data([0]),N=(M.enter().append("path").attr("class","domain"),j(M));I.append("line"),I.append("text");var O=I.select("line"),P=K.select("line"),Q=I.select("text"),R=K.select("text");b.isCategory?(u=Math.ceil((F(1)-F(0))/2),B=o?0:u,C=o?u:0):u=B=0;var S,T,U=i(D.select(".tick")),V=[],W=Math.max(r,0)+s,X="left"===q||"right"===q;S=H.select("text"),T=S.selectAll("tspan").data(function(a,c){var d=b.tickMultiline?m(a,b.tickWidth):[].concat(h(a));return V[c]=d.length,d.map(function(a){return{index:c,splitted:a}})}),T.enter().append("tspan"),T.exit().remove(),T.text(function(a){return a.splitted});var Y=b.tickTextRotate;switch(q){case"bottom":A=c,O.attr("y2",r),Q.attr("y",W),P.attr("x1",B).attr("x2",B).attr("y2",v),R.attr("x",0).attr("y",z(Y)).style("text-anchor",w(Y)).attr("transform",x(Y)),T.attr("x",0).attr("dy",n).attr("dx",y(Y)),N.attr("d","M"+L[0]+","+l+"V0H"+L[1]+"V"+l);break;case"top":A=c,O.attr("y2",-r),Q.attr("y",-W),P.attr("x2",0).attr("y2",-r),R.attr("x",0).attr("y",-W),S.style("text-anchor","middle"),T.attr("x",0).attr("dy","0em"),N.attr("d","M"+L[0]+","+-l+"V0H"+L[1]+"V"+-l);break;case"left":A=d,O.attr("x2",-r),Q.attr("x",-W),P.attr("x2",-r).attr("y1",C).attr("y2",C),R.attr("x",-W).attr("y",u),S.style("text-anchor","end"),T.attr("x",-W).attr("dy",n),N.attr("d","M"+-l+","+L[0]+"H0V"+L[1]+"H"+-l);break;case"right":A=d,O.attr("x2",r),Q.attr("x",W),P.attr("x2",r).attr("y2",0),R.attr("x",W).attr("y",0),S.style("text-anchor","start"),T.attr("x",W).attr("dy",n),N.attr("d","M"+l+","+L[0]+"H0V"+L[1]+"H"+l)}if(F.rangeBand){var Z=F,$=Z.rangeBand()/2;E=F=function(a){return Z(a)+$}}else E.rangeBand?E=F:J.call(A,F);I.call(A,E),K.call(A,F)})}var l,m,n,o,p=a.scale.linear(),q="bottom",r=6,s=3,t=null,u=0,v=!0;return b=b||{},l=b.withOuterTick?6:0,k.scale=function(a){return arguments.length?(p=a,k):p},k.orient=function(a){return arguments.length?(q=a in{top:1,right:1,bottom:1,left:1}?a+"":"bottom",k):q},k.tickFormat=function(a){return arguments.length?(m=a,k):m},k.tickCentered=function(a){return arguments.length?(o=a,k):o},k.tickOffset=function(){return u},k.tickInterval=function(){var a,c;return b.isCategory?a=2*u:(c=k.g.select("path.domain").node().getTotalLength()-2*l,a=c/k.g.selectAll("line").size()),a===1/0?0:a},k.ticks=function(){return arguments.length?(n=arguments,k):n},k.tickCulling=function(a){return arguments.length?(v=a,k):v},k.tickValues=function(a){if("function"==typeof a)t=function(){return a(p.domain())};else{if(!arguments.length)return t;t=a}return k},k}var h,i,j,k={version:"0.4.11"};k.generate=function(a){return new d(a)},k.chart={fn:d.prototype,internal:{fn:e.prototype,axis:{fn:f.prototype}}},h=k.chart.fn,i=k.chart.internal.fn,j=k.chart.internal.axis.fn,i.beforeInit=function(){},i.afterInit=function(){},i.init=function(){var a=this,b=a.config;if(a.initParams(),b.data_url)a.convertUrlToData(b.data_url,b.data_mimeType,b.data_headers,b.data_keys,a.initWithData);else if(b.data_json)a.initWithData(a.convertJsonToData(b.data_json,b.data_keys));else if(b.data_rows)a.initWithData(a.convertRowsToData(b.data_rows));else{if(!b.data_columns)throw Error("url or json or rows or columns is required.");a.initWithData(a.convertColumnsToData(b.data_columns))}},i.initParams=function(){var a=this,b=a.d3,c=a.config;a.clipId="c3-"+ +new Date+"-clip",a.clipIdForXAxis=a.clipId+"-xaxis",a.clipIdForYAxis=a.clipId+"-yaxis",a.clipIdForGrid=a.clipId+"-grid",a.clipIdForSubchart=a.clipId+"-subchart",a.clipPath=a.getClipPath(a.clipId),a.clipPathForXAxis=a.getClipPath(a.clipIdForXAxis),a.clipPathForYAxis=a.getClipPath(a.clipIdForYAxis),a.clipPathForGrid=a.getClipPath(a.clipIdForGrid),a.clipPathForSubchart=a.getClipPath(a.clipIdForSubchart),a.dragStart=null,a.dragging=!1,a.flowing=!1,a.cancelClick=!1,a.mouseover=!1,a.transiting=!1,a.color=a.generateColor(),a.levelColor=a.generateLevelColor(),a.dataTimeFormat=c.data_xLocaltime?b.time.format:b.time.format.utc,a.axisTimeFormat=c.axis_x_localtime?b.time.format:b.time.format.utc,a.defaultAxisTimeFormat=a.axisTimeFormat.multi([[".%L",function(a){return a.getMilliseconds()}],[":%S",function(a){return a.getSeconds()}],["%I:%M",function(a){return a.getMinutes()}],["%I %p",function(a){return a.getHours()}],["%-m/%-d",function(a){return a.getDay()&&1!==a.getDate()}],["%-m/%-d",function(a){return 1!==a.getDate()}],["%-m/%-d",function(a){return a.getMonth()}],["%Y/%-m/%-d",function(){return!0}]]),a.hiddenTargetIds=[],a.hiddenLegendIds=[],a.focusedTargetIds=[],a.defocusedTargetIds=[],a.xOrient=c.axis_rotated?"left":"bottom",a.yOrient=c.axis_rotated?c.axis_y_inner?"top":"bottom":c.axis_y_inner?"right":"left",a.y2Orient=c.axis_rotated?c.axis_y2_inner?"bottom":"top":c.axis_y2_inner?"left":"right",a.subXOrient=c.axis_rotated?"left":"bottom",a.isLegendRight="right"===c.legend_position,a.isLegendInset="inset"===c.legend_position,a.isLegendTop="top-left"===c.legend_inset_anchor||"top-right"===c.legend_inset_anchor,a.isLegendLeft="top-left"===c.legend_inset_anchor||"bottom-left"===c.legend_inset_anchor,a.legendStep=0,a.legendItemWidth=0,a.legendItemHeight=0,a.currentMaxTickWidths={x:0,y:0,y2:0},a.rotated_padding_left=30,a.rotated_padding_right=c.axis_rotated&&!c.axis_x_show?0:30,a.rotated_padding_top=5,a.withoutFadeIn={},a.intervalForObserveInserted=void 0,a.axes.subx=b.selectAll([])},i.initChartElements=function(){this.initBar&&this.initBar(),this.initLine&&this.initLine(),this.initArc&&this.initArc(),this.initGauge&&this.initGauge(),this.initText&&this.initText()},i.initWithData=function(a){var b,c,d=this,e=d.d3,g=d.config,h=!0;d.axis=new f(d),d.initPie&&d.initPie(),d.initBrush&&d.initBrush(),d.initZoom&&d.initZoom(),g.bindto?"function"==typeof g.bindto.node?d.selectChart=g.bindto:d.selectChart=e.select(g.bindto):d.selectChart=e.selectAll([]),d.selectChart.empty()&&(d.selectChart=e.select(document.createElement("div")).style("opacity",0),d.observeInserted(d.selectChart),h=!1),d.selectChart.html("").classed("c3",!0),d.data.xs={},d.data.targets=d.convertDataToTargets(a),g.data_filter&&(d.data.targets=d.data.targets.filter(g.data_filter)),g.data_hide&&d.addHiddenTargetIds(g.data_hide===!0?d.mapToIds(d.data.targets):g.data_hide),g.legend_hide&&d.addHiddenLegendIds(g.legend_hide===!0?d.mapToIds(d.data.targets):g.legend_hide),d.hasType("gauge")&&(g.legend_show=!1),d.updateSizes(),d.updateScales(),d.x.domain(e.extent(d.getXDomain(d.data.targets))),d.y.domain(d.getYDomain(d.data.targets,"y")),d.y2.domain(d.getYDomain(d.data.targets,"y2")),d.subX.domain(d.x.domain()),d.subY.domain(d.y.domain()),d.subY2.domain(d.y2.domain()),d.orgXDomain=d.x.domain(),d.brush&&d.brush.scale(d.subX),g.zoom_enabled&&d.zoom.scale(d.x),d.svg=d.selectChart.append("svg").style("overflow","hidden").on("mouseenter",function(){return g.onmouseover.call(d)}).on("mouseleave",function(){return g.onmouseout.call(d)}),d.config.svg_classname&&d.svg.attr("class",d.config.svg_classname),b=d.svg.append("defs"),d.clipChart=d.appendClip(b,d.clipId),d.clipXAxis=d.appendClip(b,d.clipIdForXAxis),d.clipYAxis=d.appendClip(b,d.clipIdForYAxis),d.clipGrid=d.appendClip(b,d.clipIdForGrid),d.clipSubchart=d.appendClip(b,d.clipIdForSubchart),d.updateSvgSize(),c=d.main=d.svg.append("g").attr("transform",d.getTranslate("main")),d.initSubchart&&d.initSubchart(),d.initTooltip&&d.initTooltip(),d.initLegend&&d.initLegend(),d.initTitle&&d.initTitle(),c.append("text").attr("class",l.text+" "+l.empty).attr("text-anchor","middle").attr("dominant-baseline","middle"),d.initRegion(),d.initGrid(),c.append("g").attr("clip-path",d.clipPath).attr("class",l.chart),g.grid_lines_front&&d.initGridLines(),d.initEventRect(),d.initChartElements(),c.insert("rect",g.zoom_privileged?null:"g."+l.regions).attr("class",l.zoomRect).attr("width",d.width).attr("height",d.height).style("opacity",0).on("dblclick.zoom",null),g.axis_x_extent&&d.brush.extent(d.getDefaultExtent()),d.axis.init(),d.updateTargets(d.data.targets),h&&(d.updateDimension(),d.config.oninit.call(d),d.redraw({withTransition:!1,withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransitionForAxis:!1})),d.bindResize(),d.api.element=d.selectChart.node()},i.smoothLines=function(a,b){var c=this;"grid"===b&&a.each(function(){var a=c.d3.select(this),b=a.attr("x1"),d=a.attr("x2"),e=a.attr("y1"),f=a.attr("y2");a.attr({x1:Math.ceil(b),x2:Math.ceil(d),y1:Math.ceil(e),y2:Math.ceil(f)})})},i.updateSizes=function(){var a=this,b=a.config,c=a.legend?a.getLegendHeight():0,d=a.legend?a.getLegendWidth():0,e=a.isLegendRight||a.isLegendInset?0:c,f=a.hasArcType(),g=b.axis_rotated||f?0:a.getHorizontalAxisHeight("x"),h=b.subchart_show&&!f?b.subchart_size_height+g:0;a.currentWidth=a.getCurrentWidth(),a.currentHeight=a.getCurrentHeight(),a.margin=b.axis_rotated?{top:a.getHorizontalAxisHeight("y2")+a.getCurrentPaddingTop(),right:f?0:a.getCurrentPaddingRight(),bottom:a.getHorizontalAxisHeight("y")+e+a.getCurrentPaddingBottom(),left:h+(f?0:a.getCurrentPaddingLeft())}:{top:4+a.getCurrentPaddingTop(),right:f?0:a.getCurrentPaddingRight(),bottom:g+h+e+a.getCurrentPaddingBottom(),left:f?0:a.getCurrentPaddingLeft()},a.margin2=b.axis_rotated?{top:a.margin.top,right:NaN,bottom:20+e,left:a.rotated_padding_left}:{top:a.currentHeight-h-e,right:NaN,bottom:g+e,left:a.margin.left},a.margin3={top:0,right:NaN,bottom:0,left:0},a.updateSizeForLegend&&a.updateSizeForLegend(c,d),a.width=a.currentWidth-a.margin.left-a.margin.right,a.height=a.currentHeight-a.margin.top-a.margin.bottom,a.width<0&&(a.width=0),a.height<0&&(a.height=0),a.width2=b.axis_rotated?a.margin.left-a.rotated_padding_left-a.rotated_padding_right:a.width,a.height2=b.axis_rotated?a.height:a.currentHeight-a.margin2.top-a.margin2.bottom,a.width2<0&&(a.width2=0),a.height2<0&&(a.height2=0),a.arcWidth=a.width-(a.isLegendRight?d+10:0),a.arcHeight=a.height-(a.isLegendRight?0:10),a.hasType("gauge")&&!b.gauge_fullCircle&&(a.arcHeight+=a.height-a.getGaugeLabelHeight()),a.updateRadius&&a.updateRadius(),a.isLegendRight&&f&&(a.margin3.left=a.arcWidth/2+1.1*a.radiusExpanded)},i.updateTargets=function(a){var b=this;b.updateTargetsForText(a),b.updateTargetsForBar(a),b.updateTargetsForLine(a),b.hasArcType()&&b.updateTargetsForArc&&b.updateTargetsForArc(a),b.updateTargetsForSubchart&&b.updateTargetsForSubchart(a),b.showTargets()},i.showTargets=function(){var a=this;a.svg.selectAll("."+l.target).filter(function(b){return a.isTargetToShow(b.id)}).transition().duration(a.config.transition_duration).style("opacity",1)},i.redraw=function(a,b){var c,d,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t,u,v,x,y,z,A,B,C,D,E,F,G,H=this,I=H.main,J=H.d3,K=H.config,L=H.getShapeIndices(H.isAreaType),M=H.getShapeIndices(H.isBarType),N=H.getShapeIndices(H.isLineType),O=H.hasArcType(),P=H.filterTargetsToShow(H.data.targets),Q=H.xv.bind(H);if(a=a||{},c=w(a,"withY",!0),d=w(a,"withSubchart",!0),e=w(a,"withTransition",!0),h=w(a,"withTransform",!1),i=w(a,"withUpdateXDomain",!1),j=w(a,"withUpdateOrgXDomain",!1),k=w(a,"withTrimXDomain",!0),p=w(a,"withUpdateXAxis",i),m=w(a,"withLegend",!1),n=w(a,"withEventRect",!0),o=w(a,"withDimension",!0),f=w(a,"withTransitionForExit",e),g=w(a,"withTransitionForAxis",e),v=e?K.transition_duration:0,x=f?v:0,y=g?v:0,b=b||H.axis.generateTransitions(y),m&&K.legend_show?H.updateLegend(H.mapToIds(H.data.targets),a,b):o&&H.updateDimension(!0),H.isCategorized()&&0===P.length&&H.x.domain([0,H.axes.x.selectAll(".tick").size()]),P.length?(H.updateXDomain(P,i,j,k),K.axis_x_tick_values||(B=H.axis.updateXAxisTickValues(P))):(H.xAxis.tickValues([]),H.subXAxis.tickValues([])),K.zoom_rescale&&!a.flow&&(E=H.x.orgDomain()),H.y.domain(H.getYDomain(P,"y",E)),H.y2.domain(H.getYDomain(P,"y2",E)),!K.axis_y_tick_values&&K.axis_y_tick_count&&H.yAxis.tickValues(H.axis.generateTickValues(H.y.domain(),K.axis_y_tick_count)),!K.axis_y2_tick_values&&K.axis_y2_tick_count&&H.y2Axis.tickValues(H.axis.generateTickValues(H.y2.domain(),K.axis_y2_tick_count)),H.axis.redraw(b,O),H.axis.updateLabels(e),(i||p)&&P.length)if(K.axis_x_tick_culling&&B){for(C=1;C<B.length;C++)if(B.length/C<K.axis_x_tick_culling_max){D=C;break}H.svg.selectAll("."+l.axisX+" .tick text").each(function(a){var b=B.indexOf(a);b>=0&&J.select(this).style("display",b%D?"none":"block")})}else H.svg.selectAll("."+l.axisX+" .tick text").style("display","block");q=H.generateDrawArea?H.generateDrawArea(L,!1):void 0,r=H.generateDrawBar?H.generateDrawBar(M):void 0,s=H.generateDrawLine?H.generateDrawLine(N,!1):void 0,t=H.generateXYForText(L,M,N,!0),u=H.generateXYForText(L,M,N,!1),c&&(H.subY.domain(H.getYDomain(P,"y")),H.subY2.domain(H.getYDomain(P,"y2"))),H.updateXgridFocus(),I.select("text."+l.text+"."+l.empty).attr("x",H.width/2).attr("y",H.height/2).text(K.data_empty_label_text).transition().style("opacity",P.length?0:1),H.updateGrid(v),H.updateRegion(v),H.updateBar(x),H.updateLine(x),H.updateArea(x),H.updateCircle(),H.hasDataLabel()&&H.updateText(x),H.redrawTitle&&H.redrawTitle(),H.redrawArc&&H.redrawArc(v,x,h),H.redrawSubchart&&H.redrawSubchart(d,b,v,x,L,M,N),I.selectAll("."+l.selectedCircles).filter(H.isBarType.bind(H)).selectAll("circle").remove(),K.interaction_enabled&&!a.flow&&n&&(H.redrawEventRect(),H.updateZoom&&H.updateZoom()),H.updateCircleY(),F=(H.config.axis_rotated?H.circleY:H.circleX).bind(H),G=(H.config.axis_rotated?H.circleX:H.circleY).bind(H),a.flow&&(A=H.generateFlow({targets:P,flow:a.flow,duration:a.flow.duration,drawBar:r,drawLine:s,drawArea:q,cx:F,cy:G,xv:Q,xForText:t,yForText:u})),(v||A)&&H.isTabVisible()?J.transition().duration(v).each(function(){var b=[];[H.redrawBar(r,!0),H.redrawLine(s,!0),H.redrawArea(q,!0),H.redrawCircle(F,G,!0),H.redrawText(t,u,a.flow,!0),H.redrawRegion(!0),H.redrawGrid(!0)].forEach(function(a){a.forEach(function(a){b.push(a)})}),z=H.generateWait(),b.forEach(function(a){z.add(a)})}).call(z,function(){A&&A(),K.onrendered&&K.onrendered.call(H)}):(H.redrawBar(r),H.redrawLine(s),H.redrawArea(q),H.redrawCircle(F,G),H.redrawText(t,u,a.flow),H.redrawRegion(),H.redrawGrid(),K.onrendered&&K.onrendered.call(H)),H.mapToIds(H.data.targets).forEach(function(a){H.withoutFadeIn[a]=!0})},i.updateAndRedraw=function(a){var b,c=this,d=c.config;a=a||{},a.withTransition=w(a,"withTransition",!0),a.withTransform=w(a,"withTransform",!1),a.withLegend=w(a,"withLegend",!1),a.withUpdateXDomain=!0,a.withUpdateOrgXDomain=!0,a.withTransitionForExit=!1,a.withTransitionForTransform=w(a,"withTransitionForTransform",a.withTransition),c.updateSizes(),a.withLegend&&d.legend_show||(b=c.axis.generateTransitions(a.withTransitionForAxis?d.transition_duration:0),c.updateScales(),c.updateSvgSize(),c.transformAll(a.withTransitionForTransform,b)),c.redraw(a,b)},i.redrawWithoutRescale=function(){this.redraw({withY:!1,withSubchart:!1,withEventRect:!1,withTransitionForAxis:!1})},i.isTimeSeries=function(){return"timeseries"===this.config.axis_x_type},i.isCategorized=function(){return this.config.axis_x_type.indexOf("categor")>=0},i.isCustomX=function(){var a=this,b=a.config;return!a.isTimeSeries()&&(b.data_x||v(b.data_xs))},i.isTimeSeriesY=function(){return"timeseries"===this.config.axis_y_type},i.getTranslate=function(a){var b,c,d=this,e=d.config;return"main"===a?(b=s(d.margin.left),c=s(d.margin.top)):"context"===a?(b=s(d.margin2.left),c=s(d.margin2.top)):"legend"===a?(b=d.margin3.left,c=d.margin3.top):"x"===a?(b=0,c=e.axis_rotated?0:d.height):"y"===a?(b=0,c=e.axis_rotated?d.height:0):"y2"===a?(b=e.axis_rotated?0:d.width,c=e.axis_rotated?1:0):"subx"===a?(b=0,c=e.axis_rotated?0:d.height2):"arc"===a&&(b=d.arcWidth/2,c=d.arcHeight/2),"translate("+b+","+c+")"},i.initialOpacity=function(a){return null!==a.value&&this.withoutFadeIn[a.id]?1:0},i.initialOpacityForCircle=function(a){return null!==a.value&&this.withoutFadeIn[a.id]?this.opacityForCircle(a):0},i.opacityForCircle=function(a){var b=this.config.point_show?1:0;return m(a.value)?this.isScatterType(a)?.5:b:0},i.opacityForText=function(){return this.hasDataLabel()?1:0},i.xx=function(a){return a?this.x(a.x):null},i.xv=function(a){var b=this,c=a.value;return b.isTimeSeries()?c=b.parseDate(a.value):b.isCategorized()&&"string"==typeof a.value&&(c=b.config.axis_x_categories.indexOf(a.value)),Math.ceil(b.x(c))},i.yv=function(a){var b=this,c=a.axis&&"y2"===a.axis?b.y2:b.y;return Math.ceil(c(a.value))},i.subxx=function(a){return a?this.subX(a.x):null},i.transformMain=function(a,b){var c,d,e,f=this;b&&b.axisX?c=b.axisX:(c=f.main.select("."+l.axisX),a&&(c=c.transition())),b&&b.axisY?d=b.axisY:(d=f.main.select("."+l.axisY),a&&(d=d.transition())),b&&b.axisY2?e=b.axisY2:(e=f.main.select("."+l.axisY2),a&&(e=e.transition())),(a?f.main.transition():f.main).attr("transform",f.getTranslate("main")),c.attr("transform",f.getTranslate("x")),d.attr("transform",f.getTranslate("y")),e.attr("transform",f.getTranslate("y2")),f.main.select("."+l.chartArcs).attr("transform",f.getTranslate("arc"))},i.transformAll=function(a,b){var c=this;c.transformMain(a,b),c.config.subchart_show&&c.transformContext(a,b),c.legend&&c.transformLegend(a)},i.updateSvgSize=function(){var a=this,b=a.svg.select(".c3-brush .background");a.svg.attr("width",a.currentWidth).attr("height",a.currentHeight),a.svg.selectAll(["#"+a.clipId,"#"+a.clipIdForGrid]).select("rect").attr("width",a.width).attr("height",a.height),a.svg.select("#"+a.clipIdForXAxis).select("rect").attr("x",a.getXAxisClipX.bind(a)).attr("y",a.getXAxisClipY.bind(a)).attr("width",a.getXAxisClipWidth.bind(a)).attr("height",a.getXAxisClipHeight.bind(a)),a.svg.select("#"+a.clipIdForYAxis).select("rect").attr("x",a.getYAxisClipX.bind(a)).attr("y",a.getYAxisClipY.bind(a)).attr("width",a.getYAxisClipWidth.bind(a)).attr("height",a.getYAxisClipHeight.bind(a)),a.svg.select("#"+a.clipIdForSubchart).select("rect").attr("width",a.width).attr("height",b.size()?b.attr("height"):0),a.svg.select("."+l.zoomRect).attr("width",a.width).attr("height",a.height),a.selectChart.style("max-height",a.currentHeight+"px")},i.updateDimension=function(a){var b=this;a||(b.config.axis_rotated?(b.axes.x.call(b.xAxis),b.axes.subx.call(b.subXAxis)):(b.axes.y.call(b.yAxis),b.axes.y2.call(b.y2Axis))),b.updateSizes(),b.updateScales(),b.updateSvgSize(),b.transformAll(!1)},i.observeInserted=function(b){var c,d=this;return"undefined"==typeof MutationObserver?void a.console.error("MutationObserver not defined."):(c=new MutationObserver(function(e){e.forEach(function(e){"childList"===e.type&&e.previousSibling&&(c.disconnect(),d.intervalForObserveInserted=a.setInterval(function(){b.node().parentNode&&(a.clearInterval(d.intervalForObserveInserted),d.updateDimension(),d.brush&&d.brush.update(),d.config.oninit.call(d),d.redraw({withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransition:!1,withTransitionForTransform:!1,withLegend:!0}),b.transition().style("opacity",1))},10))})}),void c.observe(b.node(),{attributes:!0,childList:!0,characterData:!0}))},i.bindResize=function(){var b=this,c=b.config;if(b.resizeFunction=b.generateResize(),b.resizeFunction.add(function(){c.onresize.call(b)}),c.resize_auto&&b.resizeFunction.add(function(){void 0!==b.resizeTimeout&&a.clearTimeout(b.resizeTimeout),b.resizeTimeout=a.setTimeout(function(){delete b.resizeTimeout,b.api.flush()},100)}),b.resizeFunction.add(function(){c.onresized.call(b)}),a.attachEvent)a.attachEvent("onresize",b.resizeFunction);else if(a.addEventListener)a.addEventListener("resize",b.resizeFunction,!1);else{var d=a.onresize;d?d.add&&d.remove||(d=b.generateResize(),d.add(a.onresize)):d=b.generateResize(),d.add(b.resizeFunction),a.onresize=d}},i.generateResize=function(){function a(){b.forEach(function(a){a()})}var b=[];return a.add=function(a){b.push(a)},a.remove=function(a){for(var c=0;c<b.length;c++)if(b[c]===a){b.splice(c,1);break}},a},i.endall=function(a,b){var c=0;a.each(function(){++c}).each("end",function(){--c||b.apply(this,arguments)})},i.generateWait=function(){var a=[],b=function(b,c){var d=setInterval(function(){var b=0;a.forEach(function(a){if(a.empty())return void(b+=1);try{a.transition()}catch(c){b+=1}}),b===a.length&&(clearInterval(d),c&&c())},10)};return b.add=function(b){a.push(b)},b},i.parseDate=function(b){var c,d=this;return b instanceof Date?c=b:"string"==typeof b?c=d.dataTimeFormat(d.config.data_xFormat).parse(b):"number"!=typeof b||isNaN(b)||(c=new Date(+b)),c&&!isNaN(+c)||a.console.error("Failed to parse x '"+b+"' to Date object"),c},i.isTabVisible=function(){var a;return"undefined"!=typeof document.hidden?a="hidden":"undefined"!=typeof document.mozHidden?a="mozHidden":"undefined"!=typeof document.msHidden?a="msHidden":"undefined"!=typeof document.webkitHidden&&(a="webkitHidden"),!document[a]},i.getDefaultConfig=function(){var a={bindto:"#chart",svg_classname:void 0,size_width:void 0,size_height:void 0,padding_left:void 0,padding_right:void 0,padding_top:void 0,padding_bottom:void 0,resize_auto:!0,zoom_enabled:!1,zoom_extent:void 0,zoom_privileged:!1,zoom_rescale:!1,zoom_onzoom:function(){},zoom_onzoomstart:function(){},zoom_onzoomend:function(){},zoom_x_min:void 0,zoom_x_max:void 0,interaction_brighten:!0,interaction_enabled:!0,onmouseover:function(){},onmouseout:function(){},onresize:function(){},onresized:function(){},oninit:function(){},onrendered:function(){},transition_duration:350,data_x:void 0,data_xs:{},data_xFormat:"%Y-%m-%d",data_xLocaltime:!0,data_xSort:!0,data_idConverter:function(a){return a},data_names:{},data_classes:{},data_groups:[],data_axes:{},data_type:void 0,data_types:{},data_labels:{},data_order:"desc",data_regions:{},data_color:void 0,data_colors:{},data_hide:!1,data_filter:void 0,data_selection_enabled:!1,data_selection_grouped:!1,data_selection_isselectable:function(){return!0},data_selection_multiple:!0,data_selection_draggable:!1,data_onclick:function(){},data_onmouseover:function(){},data_onmouseout:function(){},data_onselected:function(){},data_onunselected:function(){},data_url:void 0,data_headers:void 0,data_json:void 0,data_rows:void 0,data_columns:void 0,data_mimeType:void 0,data_keys:void 0,data_empty_label_text:"",subchart_show:!1,subchart_size_height:60,subchart_axis_x_show:!0,subchart_onbrush:function(){},color_pattern:[],color_threshold:{},legend_show:!0,legend_hide:!1,legend_position:"bottom",legend_inset_anchor:"top-left",legend_inset_x:10,legend_inset_y:0,legend_inset_step:void 0,legend_item_onclick:void 0,legend_item_onmouseover:void 0,legend_item_onmouseout:void 0,legend_equally:!1,legend_padding:0,legend_item_tile_width:10,legend_item_tile_height:10,axis_rotated:!1,axis_x_show:!0,axis_x_type:"indexed",axis_x_localtime:!0,axis_x_categories:[],axis_x_tick_centered:!1,axis_x_tick_format:void 0,axis_x_tick_culling:{},axis_x_tick_culling_max:10,axis_x_tick_count:void 0,axis_x_tick_fit:!0,axis_x_tick_values:null,axis_x_tick_rotate:0,axis_x_tick_outer:!0,axis_x_tick_multiline:!0,axis_x_tick_width:null,axis_x_max:void 0,axis_x_min:void 0,axis_x_padding:{},axis_x_height:void 0,axis_x_extent:void 0,axis_x_label:{},axis_y_show:!0,axis_y_type:void 0,axis_y_max:void 0,axis_y_min:void 0,axis_y_inverted:!1,axis_y_center:void 0,axis_y_inner:void 0,axis_y_label:{},axis_y_tick_format:void 0,axis_y_tick_outer:!0,axis_y_tick_values:null,axis_y_tick_rotate:0,axis_y_tick_count:void 0,axis_y_tick_time_value:void 0,axis_y_tick_time_interval:void 0,axis_y_padding:{},axis_y_default:void 0,axis_y2_show:!1,axis_y2_max:void 0,axis_y2_min:void 0,axis_y2_inverted:!1,axis_y2_center:void 0,axis_y2_inner:void 0,axis_y2_label:{},axis_y2_tick_format:void 0,axis_y2_tick_outer:!0,axis_y2_tick_values:null,axis_y2_tick_count:void 0,axis_y2_padding:{},axis_y2_default:void 0,grid_x_show:!1,grid_x_type:"tick",grid_x_lines:[],grid_y_show:!1,grid_y_lines:[],grid_y_ticks:10,grid_focus_show:!0,grid_lines_front:!0,point_show:!0,point_r:2.5,point_sensitivity:10,point_focus_expand_enabled:!0,point_focus_expand_r:void 0,point_select_r:void 0,line_connectNull:!1,line_step_type:"step",bar_width:void 0,bar_width_ratio:.6,bar_width_max:void 0,bar_zerobased:!0,area_zerobased:!0,area_above:!1,pie_label_show:!0,pie_label_format:void 0,pie_label_threshold:.05,pie_label_ratio:void 0,pie_expand:{},pie_expand_duration:50,gauge_fullCircle:!1,gauge_label_show:!0,gauge_label_format:void 0,gauge_min:0,gauge_max:100,gauge_startingAngle:-1*Math.PI/2,gauge_units:void 0,gauge_width:void 0,gauge_expand:{},gauge_expand_duration:50,donut_label_show:!0,donut_label_format:void 0,donut_label_threshold:.05,donut_label_ratio:void 0,donut_width:void 0,donut_title:"",donut_expand:{},donut_expand_duration:50,spline_interpolation_type:"cardinal",regions:[],tooltip_show:!0,tooltip_grouped:!0,tooltip_format_title:void 0,tooltip_format_name:void 0,tooltip_format_value:void 0,tooltip_position:void 0,tooltip_contents:function(a,b,c,d){return this.getTooltipContent?this.getTooltipContent(a,b,c,d):""},tooltip_init_show:!1,tooltip_init_x:0,tooltip_init_position:{top:"0px",left:"50px"},tooltip_onshow:function(){},tooltip_onhide:function(){},title_text:void 0,title_padding:{top:0,right:0,bottom:0,left:0},title_position:"top-center"};return Object.keys(this.additionalConfig).forEach(function(b){a[b]=this.additionalConfig[b]},this),a},i.additionalConfig={},i.loadConfig=function(a){function b(){var a=d.shift();return a&&c&&"object"==typeof c&&a in c?(c=c[a],b()):a?void 0:c}var c,d,e,f=this.config;Object.keys(f).forEach(function(g){c=a,d=g.split("_"),e=b(),q(e)&&(f[g]=e)})},i.getScale=function(a,b,c){return(c?this.d3.time.scale():this.d3.scale.linear()).range([a,b])},i.getX=function(a,b,c,d){var e,f=this,g=f.getScale(a,b,f.isTimeSeries()),h=c?g.domain(c):g;f.isCategorized()?(d=d||function(){return 0},g=function(a,b){var c=h(a)+d(a);return b?c:Math.ceil(c)}):g=function(a,b){var c=h(a);return b?c:Math.ceil(c)};for(e in h)g[e]=h[e];return g.orgDomain=function(){return h.domain()},f.isCategorized()&&(g.domain=function(a){return arguments.length?(h.domain(a),g):(a=this.orgDomain(),[a[0],a[1]+1])}),g},i.getY=function(a,b,c){var d=this.getScale(a,b,this.isTimeSeriesY());return c&&d.domain(c),d},i.getYScale=function(a){return"y2"===this.axis.getId(a)?this.y2:this.y},i.getSubYScale=function(a){return"y2"===this.axis.getId(a)?this.subY2:this.subY},i.updateScales=function(){var a=this,b=a.config,c=!a.x;a.xMin=b.axis_rotated?1:0,a.xMax=b.axis_rotated?a.height:a.width,a.yMin=b.axis_rotated?0:a.height,a.yMax=b.axis_rotated?a.width:1,a.subXMin=a.xMin,a.subXMax=a.xMax,a.subYMin=b.axis_rotated?0:a.height2,a.subYMax=b.axis_rotated?a.width2:1,a.x=a.getX(a.xMin,a.xMax,c?void 0:a.x.orgDomain(),function(){return a.xAxis.tickOffset()}),a.y=a.getY(a.yMin,a.yMax,c?b.axis_y_default:a.y.domain()),a.y2=a.getY(a.yMin,a.yMax,c?b.axis_y2_default:a.y2.domain()),a.subX=a.getX(a.xMin,a.xMax,a.orgXDomain,function(b){return b%1?0:a.subXAxis.tickOffset()}),a.subY=a.getY(a.subYMin,a.subYMax,c?b.axis_y_default:a.subY.domain()),a.subY2=a.getY(a.subYMin,a.subYMax,c?b.axis_y2_default:a.subY2.domain()),a.xAxisTickFormat=a.axis.getXAxisTickFormat(),a.xAxisTickValues=a.axis.getXAxisTickValues(),a.yAxisTickValues=a.axis.getYAxisTickValues(),a.y2AxisTickValues=a.axis.getY2AxisTickValues(),a.xAxis=a.axis.getXAxis(a.x,a.xOrient,a.xAxisTickFormat,a.xAxisTickValues,b.axis_x_tick_outer),a.subXAxis=a.axis.getXAxis(a.subX,a.subXOrient,a.xAxisTickFormat,a.xAxisTickValues,b.axis_x_tick_outer),a.yAxis=a.axis.getYAxis(a.y,a.yOrient,b.axis_y_tick_format,a.yAxisTickValues,b.axis_y_tick_outer),a.y2Axis=a.axis.getYAxis(a.y2,a.y2Orient,b.axis_y2_tick_format,a.y2AxisTickValues,b.axis_y2_tick_outer),c||(a.brush&&a.brush.scale(a.subX),b.zoom_enabled&&a.zoom.scale(a.x)),a.updateArc&&a.updateArc()},i.getYDomainMin=function(a){var b,c,d,e,f,g,h=this,i=h.config,j=h.mapToIds(a),k=h.getValuesAsIdKeyed(a);if(i.data_groups.length>0)for(g=h.hasNegativeValueInTargets(a),b=0;b<i.data_groups.length;b++)if(e=i.data_groups[b].filter(function(a){return j.indexOf(a)>=0}),0!==e.length)for(d=e[0],g&&k[d]&&k[d].forEach(function(a,b){k[d][b]=0>a?a:0}),c=1;c<e.length;c++)f=e[c],k[f]&&k[f].forEach(function(a,b){h.axis.getId(f)!==h.axis.getId(d)||!k[d]||g&&+a>0||(k[d][b]+=+a)});return h.d3.min(Object.keys(k).map(function(a){return h.d3.min(k[a])}))},i.getYDomainMax=function(a){var b,c,d,e,f,g,h=this,i=h.config,j=h.mapToIds(a),k=h.getValuesAsIdKeyed(a);if(i.data_groups.length>0)for(g=h.hasPositiveValueInTargets(a),b=0;b<i.data_groups.length;b++)if(e=i.data_groups[b].filter(function(a){return j.indexOf(a)>=0}),0!==e.length)for(d=e[0],g&&k[d]&&k[d].forEach(function(a,b){k[d][b]=a>0?a:0}),c=1;c<e.length;c++)f=e[c],k[f]&&k[f].forEach(function(a,b){h.axis.getId(f)!==h.axis.getId(d)||!k[d]||g&&0>+a||(k[d][b]+=+a)});return h.d3.max(Object.keys(k).map(function(a){return h.d3.max(k[a])}))},i.getYDomain=function(a,b,c){var d,e,f,g,h,i,j,k,l,n,o,p=this,q=p.config,r=a.filter(function(a){return p.axis.getId(a.id)===b}),s=c?p.filterByXDomain(r,c):r,u="y2"===b?q.axis_y2_min:q.axis_y_min,w="y2"===b?q.axis_y2_max:q.axis_y_max,x=p.getYDomainMin(s),y=p.getYDomainMax(s),z="y2"===b?q.axis_y2_center:q.axis_y_center,A=p.hasType("bar",s)&&q.bar_zerobased||p.hasType("area",s)&&q.area_zerobased,B="y2"===b?q.axis_y2_inverted:q.axis_y_inverted,C=p.hasDataLabel()&&q.axis_rotated,D=p.hasDataLabel()&&!q.axis_rotated;return x=m(u)?u:m(w)?w>x?x:w-10:x,y=m(w)?w:m(u)?y>u?y:u+10:y,0===s.length?"y2"===b?p.y2.domain():p.y.domain():(isNaN(x)&&(x=0),isNaN(y)&&(y=x),x===y&&(0>x?y=0:x=0),n=x>=0&&y>=0,o=0>=x&&0>=y,(m(u)&&n||m(w)&&o)&&(A=!1),A&&(n&&(x=0),o&&(y=0)),e=Math.abs(y-x),f=g=h=.1*e,"undefined"!=typeof z&&(i=Math.max(Math.abs(x),Math.abs(y)),y=z+i,x=z-i),C?(j=p.getDataLabelLength(x,y,"width"),k=t(p.y.range()),l=[j[0]/k,j[1]/k],
2312 2312 g+=e*(l[1]/(1-l[0]-l[1])),h+=e*(l[0]/(1-l[0]-l[1]))):D&&(j=p.getDataLabelLength(x,y,"height"),g+=p.axis.convertPixelsToAxisPadding(j[1],e),h+=p.axis.convertPixelsToAxisPadding(j[0],e)),"y"===b&&v(q.axis_y_padding)&&(g=p.axis.getPadding(q.axis_y_padding,"top",g,e),h=p.axis.getPadding(q.axis_y_padding,"bottom",h,e)),"y2"===b&&v(q.axis_y2_padding)&&(g=p.axis.getPadding(q.axis_y2_padding,"top",g,e),h=p.axis.getPadding(q.axis_y2_padding,"bottom",h,e)),A&&(n&&(h=x),o&&(g=-y)),d=[x-h,y+g],B?d.reverse():d)},i.getXDomainMin=function(a){var b=this,c=b.config;return q(c.axis_x_min)?b.isTimeSeries()?this.parseDate(c.axis_x_min):c.axis_x_min:b.d3.min(a,function(a){return b.d3.min(a.values,function(a){return a.x})})},i.getXDomainMax=function(a){var b=this,c=b.config;return q(c.axis_x_max)?b.isTimeSeries()?this.parseDate(c.axis_x_max):c.axis_x_max:b.d3.max(a,function(a){return b.d3.max(a.values,function(a){return a.x})})},i.getXDomainPadding=function(a){var b,c,d,e,f=this,g=f.config,h=a[1]-a[0];return f.isCategorized()?c=0:f.hasType("bar")?(b=f.getMaxDataCount(),c=b>1?h/(b-1)/2:.5):c=.01*h,"object"==typeof g.axis_x_padding&&v(g.axis_x_padding)?(d=m(g.axis_x_padding.left)?g.axis_x_padding.left:c,e=m(g.axis_x_padding.right)?g.axis_x_padding.right:c):d=e="number"==typeof g.axis_x_padding?g.axis_x_padding:c,{left:d,right:e}},i.getXDomain=function(a){var b=this,c=[b.getXDomainMin(a),b.getXDomainMax(a)],d=c[0],e=c[1],f=b.getXDomainPadding(c),g=0,h=0;return d-e!==0||b.isCategorized()||(b.isTimeSeries()?(d=new Date(.5*d.getTime()),e=new Date(1.5*e.getTime())):(d=0===d?1:.5*d,e=0===e?-1:1.5*e)),(d||0===d)&&(g=b.isTimeSeries()?new Date(d.getTime()-f.left):d-f.left),(e||0===e)&&(h=b.isTimeSeries()?new Date(e.getTime()+f.right):e+f.right),[g,h]},i.updateXDomain=function(a,b,c,d,e){var f=this,g=f.config;return c&&(f.x.domain(e?e:f.d3.extent(f.getXDomain(a))),f.orgXDomain=f.x.domain(),g.zoom_enabled&&f.zoom.scale(f.x).updateScaleExtent(),f.subX.domain(f.x.domain()),f.brush&&f.brush.scale(f.subX)),b&&(f.x.domain(e?e:!f.brush||f.brush.empty()?f.orgXDomain:f.brush.extent()),g.zoom_enabled&&f.zoom.scale(f.x).updateScaleExtent()),d&&f.x.domain(f.trimXDomain(f.x.orgDomain())),f.x.domain()},i.trimXDomain=function(a){var b=this.getZoomDomain(),c=b[0],d=b[1];return a[0]<=c&&(a[1]=+a[1]+(c-a[0]),a[0]=c),d<=a[1]&&(a[0]=+a[0]-(a[1]-d),a[1]=d),a},i.isX=function(a){var b=this,c=b.config;return c.data_x&&a===c.data_x||v(c.data_xs)&&x(c.data_xs,a)},i.isNotX=function(a){return!this.isX(a)},i.getXKey=function(a){var b=this,c=b.config;return c.data_x?c.data_x:v(c.data_xs)?c.data_xs[a]:null},i.getXValuesOfXKey=function(a,b){var c,d=this,e=b&&v(b)?d.mapToIds(b):[];return e.forEach(function(b){d.getXKey(b)===a&&(c=d.data.xs[b])}),c},i.getIndexByX=function(a){var b=this,c=b.filterByX(b.data.targets,a);return c.length?c[0].index:null},i.getXValue=function(a,b){var c=this;return a in c.data.xs&&c.data.xs[a]&&m(c.data.xs[a][b])?c.data.xs[a][b]:b},i.getOtherTargetXs=function(){var a=this,b=Object.keys(a.data.xs);return b.length?a.data.xs[b[0]]:null},i.getOtherTargetX=function(a){var b=this.getOtherTargetXs();return b&&a<b.length?b[a]:null},i.addXs=function(a){var b=this;Object.keys(a).forEach(function(c){b.config.data_xs[c]=a[c]})},i.hasMultipleX=function(a){return this.d3.set(Object.keys(a).map(function(b){return a[b]})).size()>1},i.isMultipleX=function(){return v(this.config.data_xs)||!this.config.data_xSort||this.hasType("scatter")},i.addName=function(a){var b,c=this;return a&&(b=c.config.data_names[a.id],a.name=void 0!==b?b:a.id),a},i.getValueOnIndex=function(a,b){var c=a.filter(function(a){return a.index===b});return c.length?c[0]:null},i.updateTargetX=function(a,b){var c=this;a.forEach(function(a){a.values.forEach(function(d,e){d.x=c.generateTargetX(b[e],a.id,e)}),c.data.xs[a.id]=b})},i.updateTargetXs=function(a,b){var c=this;a.forEach(function(a){b[a.id]&&c.updateTargetX([a],b[a.id])})},i.generateTargetX=function(a,b,c){var d,e=this;return d=e.isTimeSeries()?a?e.parseDate(a):e.parseDate(e.getXValue(b,c)):e.isCustomX()&&!e.isCategorized()?m(a)?+a:e.getXValue(b,c):c},i.cloneTarget=function(a){return{id:a.id,id_org:a.id_org,values:a.values.map(function(a){return{x:a.x,value:a.value,id:a.id}})}},i.updateXs=function(){var a=this;a.data.targets.length&&(a.xs=[],a.data.targets[0].values.forEach(function(b){a.xs[b.index]=b.x}))},i.getPrevX=function(a){var b=this.xs[a-1];return"undefined"!=typeof b?b:null},i.getNextX=function(a){var b=this.xs[a+1];return"undefined"!=typeof b?b:null},i.getMaxDataCount=function(){var a=this;return a.d3.max(a.data.targets,function(a){return a.values.length})},i.getMaxDataCountTarget=function(a){var b,c=a.length,d=0;return c>1?a.forEach(function(a){a.values.length>d&&(b=a,d=a.values.length)}):b=c?a[0]:null,b},i.getEdgeX=function(a){var b=this;return a.length?[b.d3.min(a,function(a){return a.values[0].x}),b.d3.max(a,function(a){return a.values[a.values.length-1].x})]:[0,0]},i.mapToIds=function(a){return a.map(function(a){return a.id})},i.mapToTargetIds=function(a){var b=this;return a?[].concat(a):b.mapToIds(b.data.targets)},i.hasTarget=function(a,b){var c,d=this.mapToIds(a);for(c=0;c<d.length;c++)if(d[c]===b)return!0;return!1},i.isTargetToShow=function(a){return this.hiddenTargetIds.indexOf(a)<0},i.isLegendToShow=function(a){return this.hiddenLegendIds.indexOf(a)<0},i.filterTargetsToShow=function(a){var b=this;return a.filter(function(a){return b.isTargetToShow(a.id)})},i.mapTargetsToUniqueXs=function(a){var b=this,c=b.d3.set(b.d3.merge(a.map(function(a){return a.values.map(function(a){return+a.x})}))).values();return c=b.isTimeSeries()?c.map(function(a){return new Date(+a)}):c.map(function(a){return+a}),c.sort(function(a,b){return b>a?-1:a>b?1:a>=b?0:NaN})},i.addHiddenTargetIds=function(a){this.hiddenTargetIds=this.hiddenTargetIds.concat(a)},i.removeHiddenTargetIds=function(a){this.hiddenTargetIds=this.hiddenTargetIds.filter(function(b){return a.indexOf(b)<0})},i.addHiddenLegendIds=function(a){this.hiddenLegendIds=this.hiddenLegendIds.concat(a)},i.removeHiddenLegendIds=function(a){this.hiddenLegendIds=this.hiddenLegendIds.filter(function(b){return a.indexOf(b)<0})},i.getValuesAsIdKeyed=function(a){var b={};return a.forEach(function(a){b[a.id]=[],a.values.forEach(function(c){b[a.id].push(c.value)})}),b},i.checkValueInTargets=function(a,b){var c,d,e,f=Object.keys(a);for(c=0;c<f.length;c++)for(e=a[f[c]].values,d=0;d<e.length;d++)if(b(e[d].value))return!0;return!1},i.hasNegativeValueInTargets=function(a){return this.checkValueInTargets(a,function(a){return 0>a})},i.hasPositiveValueInTargets=function(a){return this.checkValueInTargets(a,function(a){return a>0})},i.isOrderDesc=function(){var a=this.config;return"string"==typeof a.data_order&&"desc"===a.data_order.toLowerCase()},i.isOrderAsc=function(){var a=this.config;return"string"==typeof a.data_order&&"asc"===a.data_order.toLowerCase()},i.orderTargets=function(a){var b=this,c=b.config,d=b.isOrderAsc(),e=b.isOrderDesc();return d||e?a.sort(function(a,b){var c=function(a,b){return a+Math.abs(b.value)},e=a.values.reduce(c,0),f=b.values.reduce(c,0);return d?f-e:e-f}):n(c.data_order)&&a.sort(c.data_order),a},i.filterByX=function(a,b){return this.d3.merge(a.map(function(a){return a.values})).filter(function(a){return a.x-b===0})},i.filterRemoveNull=function(a){return a.filter(function(a){return m(a.value)})},i.filterByXDomain=function(a,b){return a.map(function(a){return{id:a.id,id_org:a.id_org,values:a.values.filter(function(a){return b[0]<=a.x&&a.x<=b[1]})}})},i.hasDataLabel=function(){var a=this.config;return"boolean"==typeof a.data_labels&&a.data_labels?!0:!("object"!=typeof a.data_labels||!v(a.data_labels))},i.getDataLabelLength=function(a,b,c){var d=this,e=[0,0],f=1.3;return d.selectChart.select("svg").selectAll(".dummy").data([a,b]).enter().append("text").text(function(a){return d.dataLabelFormat(a.id)(a)}).each(function(a,b){e[b]=this.getBoundingClientRect()[c]*f}).remove(),e},i.isNoneArc=function(a){return this.hasTarget(this.data.targets,a.id)},i.isArc=function(a){return"data"in a&&this.hasTarget(this.data.targets,a.data.id)},i.findSameXOfValues=function(a,b){var c,d=a[b].x,e=[];for(c=b-1;c>=0&&d===a[c].x;c--)e.push(a[c]);for(c=b;c<a.length&&d===a[c].x;c++)e.push(a[c]);return e},i.findClosestFromTargets=function(a,b){var c,d=this;return c=a.map(function(a){return d.findClosest(a.values,b)}),d.findClosest(c,b)},i.findClosest=function(a,b){var c,d=this,e=d.config.point_sensitivity;return a.filter(function(a){return a&&d.isBarType(a.id)}).forEach(function(a){var b=d.main.select("."+l.bars+d.getTargetSelectorSuffix(a.id)+" ."+l.bar+"-"+a.index).node();!c&&d.isWithinBar(b)&&(c=a)}),a.filter(function(a){return a&&!d.isBarType(a.id)}).forEach(function(a){var f=d.dist(a,b);e>f&&(e=f,c=a)}),c},i.dist=function(a,b){var c=this,d=c.config,e=d.axis_rotated?1:0,f=d.axis_rotated?0:1,g=c.circleY(a,a.index),h=c.x(a.x);return Math.sqrt(Math.pow(h-b[e],2)+Math.pow(g-b[f],2))},i.convertValuesToStep=function(a){var b,c=[].concat(a);if(!this.isCategorized())return a;for(b=a.length+1;b>0;b--)c[b]=c[b-1];return c[0]={x:c[0].x-1,value:c[0].value,id:c[0].id},c[a.length+1]={x:c[a.length].x+1,value:c[a.length].value,id:c[a.length].id},c},i.updateDataAttributes=function(a,b){var c=this,d=c.config,e=d["data_"+a];return"undefined"==typeof b?e:(Object.keys(b).forEach(function(a){e[a]=b[a]}),c.redraw({withLegend:!0}),e)},i.convertUrlToData=function(a,b,c,d,e){var f=this,g=b?b:"csv",h=f.d3.xhr(a);c&&Object.keys(c).forEach(function(a){h.header(a,c[a])}),h.get(function(a,b){var c;if(!b)throw new Error(a.responseURL+" "+a.status+" ("+a.statusText+")");c="json"===g?f.convertJsonToData(JSON.parse(b.response),d):"tsv"===g?f.convertTsvToData(b.response):f.convertCsvToData(b.response),e.call(f,c)})},i.convertXsvToData=function(a,b){var c,d=b.parseRows(a);return 1===d.length?(c=[{}],d[0].forEach(function(a){c[0][a]=null})):c=b.parse(a),c},i.convertCsvToData=function(a){return this.convertXsvToData(a,this.d3.csv)},i.convertTsvToData=function(a){return this.convertXsvToData(a,this.d3.tsv)},i.convertJsonToData=function(a,b){var c,d,e=this,f=[];return b?(b.x?(c=b.value.concat(b.x),e.config.data_x=b.x):c=b.value,f.push(c),a.forEach(function(a){var b=[];c.forEach(function(c){var d=e.findValueInJson(a,c);p(d)&&(d=null),b.push(d)}),f.push(b)}),d=e.convertRowsToData(f)):(Object.keys(a).forEach(function(b){f.push([b].concat(a[b]))}),d=e.convertColumnsToData(f)),d},i.findValueInJson=function(a,b){b=b.replace(/\[(\w+)\]/g,".$1"),b=b.replace(/^\./,"");for(var c=b.split("."),d=0;d<c.length;++d){var e=c[d];if(!(e in a))return;a=a[e]}return a},i.convertRowsToData=function(a){var b,c,d=a[0],e={},f=[];for(b=1;b<a.length;b++){for(e={},c=0;c<a[b].length;c++){if(p(a[b][c]))throw new Error("Source data is missing a component at ("+b+","+c+")!");e[d[c]]=a[b][c]}f.push(e)}return f},i.convertColumnsToData=function(a){var b,c,d,e=[];for(b=0;b<a.length;b++)for(d=a[b][0],c=1;c<a[b].length;c++){if(p(e[c-1])&&(e[c-1]={}),p(a[b][c]))throw new Error("Source data is missing a component at ("+b+","+c+")!");e[c-1][d]=a[b][c]}return e},i.convertDataToTargets=function(a,b){var c,d=this,e=d.config,f=d.d3.keys(a[0]).filter(d.isNotX,d),g=d.d3.keys(a[0]).filter(d.isX,d);return f.forEach(function(c){var f=d.getXKey(c);d.isCustomX()||d.isTimeSeries()?g.indexOf(f)>=0?d.data.xs[c]=(b&&d.data.xs[c]?d.data.xs[c]:[]).concat(a.map(function(a){return a[f]}).filter(m).map(function(a,b){return d.generateTargetX(a,c,b)})):e.data_x?d.data.xs[c]=d.getOtherTargetXs():v(e.data_xs)&&(d.data.xs[c]=d.getXValuesOfXKey(f,d.data.targets)):d.data.xs[c]=a.map(function(a,b){return b})}),f.forEach(function(a){if(!d.data.xs[a])throw new Error('x is not defined for id = "'+a+'".')}),c=f.map(function(b,c){var f=e.data_idConverter(b);return{id:f,id_org:b,values:a.map(function(a,g){var h,i=d.getXKey(b),j=a[i],k=null===a[b]||isNaN(a[b])?null:+a[b];return d.isCustomX()&&d.isCategorized()&&0===c&&!p(j)?(0===c&&0===g&&(e.axis_x_categories=[]),h=e.axis_x_categories.indexOf(j),-1===h&&(h=e.axis_x_categories.length,e.axis_x_categories.push(j))):h=d.generateTargetX(j,b,g),(p(a[b])||d.data.xs[b].length<=g)&&(h=void 0),{x:h,value:k,id:f}}).filter(function(a){return q(a.x)})}}),c.forEach(function(a){var b;e.data_xSort&&(a.values=a.values.sort(function(a,b){var c=a.x||0===a.x?a.x:1/0,d=b.x||0===b.x?b.x:1/0;return c-d})),b=0,a.values.forEach(function(a){a.index=b++}),d.data.xs[a.id].sort(function(a,b){return a-b})}),d.hasNegativeValue=d.hasNegativeValueInTargets(c),d.hasPositiveValue=d.hasPositiveValueInTargets(c),e.data_type&&d.setTargetType(d.mapToIds(c).filter(function(a){return!(a in e.data_types)}),e.data_type),c.forEach(function(a){d.addCache(a.id_org,a)}),c},i.load=function(a,b){var c=this;a&&(b.filter&&(a=a.filter(b.filter)),(b.type||b.types)&&a.forEach(function(a){var d=b.types&&b.types[a.id]?b.types[a.id]:b.type;c.setTargetType(a.id,d)}),c.data.targets.forEach(function(b){for(var c=0;c<a.length;c++)if(b.id===a[c].id){b.values=a[c].values,a.splice(c,1);break}}),c.data.targets=c.data.targets.concat(a)),c.updateTargets(c.data.targets),c.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0}),b.done&&b.done()},i.loadFromArgs=function(a){var b=this;a.data?b.load(b.convertDataToTargets(a.data),a):a.url?b.convertUrlToData(a.url,a.mimeType,a.headers,a.keys,function(c){b.load(b.convertDataToTargets(c),a)}):a.json?b.load(b.convertDataToTargets(b.convertJsonToData(a.json,a.keys)),a):a.rows?b.load(b.convertDataToTargets(b.convertRowsToData(a.rows)),a):a.columns?b.load(b.convertDataToTargets(b.convertColumnsToData(a.columns)),a):b.load(null,a)},i.unload=function(a,b){var c=this;return b||(b=function(){}),a=a.filter(function(a){return c.hasTarget(c.data.targets,a)}),a&&0!==a.length?(c.svg.selectAll(a.map(function(a){return c.selectorTarget(a)})).transition().style("opacity",0).remove().call(c.endall,b),void a.forEach(function(a){c.withoutFadeIn[a]=!1,c.legend&&c.legend.selectAll("."+l.legendItem+c.getTargetSelectorSuffix(a)).remove(),c.data.targets=c.data.targets.filter(function(b){return b.id!==a})})):void b()},i.categoryName=function(a){var b=this.config;return a<b.axis_x_categories.length?b.axis_x_categories[a]:a},i.initEventRect=function(){var a=this;a.main.select("."+l.chart).append("g").attr("class",l.eventRects).style("fill-opacity",0)},i.redrawEventRect=function(){var a,b,c=this,d=c.config,e=c.isMultipleX(),f=c.main.select("."+l.eventRects).style("cursor",d.zoom_enabled?d.axis_rotated?"ns-resize":"ew-resize":null).classed(l.eventRectsMultiple,e).classed(l.eventRectsSingle,!e);f.selectAll("."+l.eventRect).remove(),c.eventRect=f.selectAll("."+l.eventRect),e?(a=c.eventRect.data([0]),c.generateEventRectsForMultipleXs(a.enter()),c.updateEventRect(a)):(b=c.getMaxDataCountTarget(c.data.targets),f.datum(b?b.values:[]),c.eventRect=f.selectAll("."+l.eventRect),a=c.eventRect.data(function(a){return a}),c.generateEventRectsForSingleX(a.enter()),c.updateEventRect(a),a.exit().remove())},i.updateEventRect=function(a){var b,c,d,e,f,g,h=this,i=h.config;a=a||h.eventRect.data(function(a){return a}),h.isMultipleX()?(b=0,c=0,d=h.width,e=h.height):(!h.isCustomX()&&!h.isTimeSeries()||h.isCategorized()?(f=h.getEventRectWidth(),g=function(a){return h.x(a.x)-f/2}):(h.updateXs(),f=function(a){var b=h.getPrevX(a.index),c=h.getNextX(a.index);return null===b&&null===c?i.axis_rotated?h.height:h.width:(null===b&&(b=h.x.domain()[0]),null===c&&(c=h.x.domain()[1]),Math.max(0,(h.x(c)-h.x(b))/2))},g=function(a){var b=h.getPrevX(a.index),c=h.getNextX(a.index),d=h.data.xs[a.id][a.index];return null===b&&null===c?0:(null===b&&(b=h.x.domain()[0]),(h.x(d)+h.x(b))/2)}),b=i.axis_rotated?0:g,c=i.axis_rotated?g:0,d=i.axis_rotated?h.width:f,e=i.axis_rotated?f:h.height),a.attr("class",h.classEvent.bind(h)).attr("x",b).attr("y",c).attr("width",d).attr("height",e)},i.generateEventRectsForSingleX=function(a){var b=this,c=b.d3,d=b.config;a.append("rect").attr("class",b.classEvent.bind(b)).style("cursor",d.data_selection_enabled&&d.data_selection_grouped?"pointer":null).on("mouseover",function(a){var c=a.index;b.dragging||b.flowing||b.hasArcType()||(d.point_focus_expand_enabled&&b.expandCircles(c,null,!0),b.expandBars(c,null,!0),b.main.selectAll("."+l.shape+"-"+c).each(function(a){d.data_onmouseover.call(b.api,a)}))}).on("mouseout",function(a){var c=a.index;b.config&&(b.hasArcType()||(b.hideXGridFocus(),b.hideTooltip(),b.unexpandCircles(),b.unexpandBars(),b.main.selectAll("."+l.shape+"-"+c).each(function(a){d.data_onmouseout.call(b.api,a)})))}).on("mousemove",function(a){var e,f=a.index,g=b.svg.select("."+l.eventRect+"-"+f);b.dragging||b.flowing||b.hasArcType()||(b.isStepType(a)&&"step-after"===b.config.line_step_type&&c.mouse(this)[0]<b.x(b.getXValue(a.id,f))&&(f-=1),e=b.filterTargetsToShow(b.data.targets).map(function(a){return b.addName(b.getValueOnIndex(a.values,f))}),d.tooltip_grouped&&(b.showTooltip(e,this),b.showXGridFocus(e)),(!d.tooltip_grouped||d.data_selection_enabled&&!d.data_selection_grouped)&&b.main.selectAll("."+l.shape+"-"+f).each(function(){c.select(this).classed(l.EXPANDED,!0),d.data_selection_enabled&&g.style("cursor",d.data_selection_grouped?"pointer":null),d.tooltip_grouped||(b.hideXGridFocus(),b.hideTooltip(),d.data_selection_grouped||(b.unexpandCircles(f),b.unexpandBars(f)))}).filter(function(a){return b.isWithinShape(this,a)}).each(function(a){d.data_selection_enabled&&(d.data_selection_grouped||d.data_selection_isselectable(a))&&g.style("cursor","pointer"),d.tooltip_grouped||(b.showTooltip([a],this),b.showXGridFocus([a]),d.point_focus_expand_enabled&&b.expandCircles(f,a.id,!0),b.expandBars(f,a.id,!0))}))}).on("click",function(a){var e=a.index;if(!b.hasArcType()&&b.toggleShape){if(b.cancelClick)return void(b.cancelClick=!1);b.isStepType(a)&&"step-after"===d.line_step_type&&c.mouse(this)[0]<b.x(b.getXValue(a.id,e))&&(e-=1),b.main.selectAll("."+l.shape+"-"+e).each(function(a){(d.data_selection_grouped||b.isWithinShape(this,a))&&(b.toggleShape(this,a,e),b.config.data_onclick.call(b.api,a,this))})}}).call(d.data_selection_draggable&&b.drag?c.behavior.drag().origin(Object).on("drag",function(){b.drag(c.mouse(this))}).on("dragstart",function(){b.dragstart(c.mouse(this))}).on("dragend",function(){b.dragend()}):function(){})},i.generateEventRectsForMultipleXs=function(a){function b(){c.svg.select("."+l.eventRect).style("cursor",null),c.hideXGridFocus(),c.hideTooltip(),c.unexpandCircles(),c.unexpandBars()}var c=this,d=c.d3,e=c.config;a.append("rect").attr("x",0).attr("y",0).attr("width",c.width).attr("height",c.height).attr("class",l.eventRect).on("mouseout",function(){c.config&&(c.hasArcType()||b())}).on("mousemove",function(){var a,f,g,h,i=c.filterTargetsToShow(c.data.targets);if(!c.dragging&&!c.hasArcType(i)){if(a=d.mouse(this),f=c.findClosestFromTargets(i,a),!c.mouseover||f&&f.id===c.mouseover.id||(e.data_onmouseout.call(c.api,c.mouseover),c.mouseover=void 0),!f)return void b();g=c.isScatterType(f)||!e.tooltip_grouped?[f]:c.filterByX(i,f.x),h=g.map(function(a){return c.addName(a)}),c.showTooltip(h,this),e.point_focus_expand_enabled&&c.expandCircles(f.index,f.id,!0),c.expandBars(f.index,f.id,!0),c.showXGridFocus(h),(c.isBarType(f.id)||c.dist(f,a)<e.point_sensitivity)&&(c.svg.select("."+l.eventRect).style("cursor","pointer"),c.mouseover||(e.data_onmouseover.call(c.api,f),c.mouseover=f))}}).on("click",function(){var a,b,f=c.filterTargetsToShow(c.data.targets);c.hasArcType(f)||(a=d.mouse(this),b=c.findClosestFromTargets(f,a),b&&(c.isBarType(b.id)||c.dist(b,a)<e.point_sensitivity)&&c.main.selectAll("."+l.shapes+c.getTargetSelectorSuffix(b.id)).selectAll("."+l.shape+"-"+b.index).each(function(){(e.data_selection_grouped||c.isWithinShape(this,b))&&(c.toggleShape(this,b,b.index),c.config.data_onclick.call(c.api,b,this))}))}).call(e.data_selection_draggable&&c.drag?d.behavior.drag().origin(Object).on("drag",function(){c.drag(d.mouse(this))}).on("dragstart",function(){c.dragstart(d.mouse(this))}).on("dragend",function(){c.dragend()}):function(){})},i.dispatchEvent=function(b,c,d){var e=this,f="."+l.eventRect+(e.isMultipleX()?"":"-"+c),g=e.main.select(f).node(),h=g.getBoundingClientRect(),i=h.left+(d?d[0]:0),j=h.top+(d?d[1]:0),k=document.createEvent("MouseEvents");k.initMouseEvent(b,!0,!0,a,0,i,j,i,j,!1,!1,!1,!1,0,null),g.dispatchEvent(k)},i.getCurrentWidth=function(){var a=this,b=a.config;return b.size_width?b.size_width:a.getParentWidth()},i.getCurrentHeight=function(){var a=this,b=a.config,c=b.size_height?b.size_height:a.getParentHeight();return c>0?c:320/(a.hasType("gauge")&&!b.gauge_fullCircle?2:1)},i.getCurrentPaddingTop=function(){var a=this,b=a.config,c=m(b.padding_top)?b.padding_top:0;return a.title&&a.title.node()&&(c+=a.getTitlePadding()),c},i.getCurrentPaddingBottom=function(){var a=this.config;return m(a.padding_bottom)?a.padding_bottom:0},i.getCurrentPaddingLeft=function(a){var b=this,c=b.config;return m(c.padding_left)?c.padding_left:c.axis_rotated?c.axis_x_show?Math.max(r(b.getAxisWidthByAxisId("x",a)),40):1:!c.axis_y_show||c.axis_y_inner?b.axis.getYAxisLabelPosition().isOuter?30:1:r(b.getAxisWidthByAxisId("y",a))},i.getCurrentPaddingRight=function(){var a=this,b=a.config,c=10,d=a.isLegendRight?a.getLegendWidth()+20:0;return m(b.padding_right)?b.padding_right+1:b.axis_rotated?c+d:!b.axis_y2_show||b.axis_y2_inner?2+d+(a.axis.getY2AxisLabelPosition().isOuter?20:0):r(a.getAxisWidthByAxisId("y2"))+d},i.getParentRectValue=function(a){for(var b,c=this.selectChart.node();c&&"BODY"!==c.tagName;){try{b=c.getBoundingClientRect()[a]}catch(d){"width"===a&&(b=c.offsetWidth)}if(b)break;c=c.parentNode}return b},i.getParentWidth=function(){return this.getParentRectValue("width")},i.getParentHeight=function(){var a=this.selectChart.style("height");return a.indexOf("px")>0?+a.replace("px",""):0},i.getSvgLeft=function(a){var b=this,c=b.config,d=c.axis_rotated||!c.axis_rotated&&!c.axis_y_inner,e=c.axis_rotated?l.axisX:l.axisY,f=b.main.select("."+e).node(),g=f&&d?f.getBoundingClientRect():{right:0},h=b.selectChart.node().getBoundingClientRect(),i=b.hasArcType(),j=g.right-h.left-(i?0:b.getCurrentPaddingLeft(a));return j>0?j:0},i.getAxisWidthByAxisId=function(a,b){var c=this,d=c.axis.getLabelPositionById(a);return c.axis.getMaxTickWidth(a,b)+(d.isInner?20:40)},i.getHorizontalAxisHeight=function(a){var b=this,c=b.config,d=30;return"x"!==a||c.axis_x_show?"x"===a&&c.axis_x_height?c.axis_x_height:"y"!==a||c.axis_y_show?"y2"!==a||c.axis_y2_show?("x"===a&&!c.axis_rotated&&c.axis_x_tick_rotate&&(d=30+b.axis.getMaxTickWidth(a)*Math.cos(Math.PI*(90-c.axis_x_tick_rotate)/180)),"y"===a&&c.axis_rotated&&c.axis_y_tick_rotate&&(d=30+b.axis.getMaxTickWidth(a)*Math.cos(Math.PI*(90-c.axis_y_tick_rotate)/180)),d+(b.axis.getLabelPositionById(a).isInner?0:10)+("y2"===a?-10:0)):b.rotated_padding_top:!c.legend_show||b.isLegendRight||b.isLegendInset?1:10:8},i.getEventRectWidth=function(){return Math.max(0,this.xAxis.tickInterval())},i.getShapeIndices=function(a){var b,c,d=this,e=d.config,f={},g=0;return d.filterTargetsToShow(d.data.targets.filter(a,d)).forEach(function(a){for(b=0;b<e.data_groups.length;b++)if(!(e.data_groups[b].indexOf(a.id)<0))for(c=0;c<e.data_groups[b].length;c++)if(e.data_groups[b][c]in f){f[a.id]=f[e.data_groups[b][c]];break}p(f[a.id])&&(f[a.id]=g++)}),f.__max__=g-1,f},i.getShapeX=function(a,b,c,d){var e=this,f=d?e.subX:e.x;return function(d){var e=d.id in c?c[d.id]:0;return d.x||0===d.x?f(d.x)-a*(b/2-e):0}},i.getShapeY=function(a){var b=this;return function(c){var d=a?b.getSubYScale(c.id):b.getYScale(c.id);return d(c.value)}},i.getShapeOffset=function(a,b,c){var d=this,e=d.orderTargets(d.filterTargetsToShow(d.data.targets.filter(a,d))),f=e.map(function(a){return a.id});return function(a,g){var h=c?d.getSubYScale(a.id):d.getYScale(a.id),i=h(0),j=i;return e.forEach(function(c){var e=d.isStepType(a)?d.convertValuesToStep(c.values):c.values;c.id!==a.id&&b[c.id]===b[a.id]&&f.indexOf(c.id)<f.indexOf(a.id)&&("undefined"!=typeof e[g]&&+e[g].x===+a.x||(g=-1,e.forEach(function(b,c){b.x===a.x&&(g=c)})),g in e&&e[g].value*a.value>=0&&(j+=h(e[g].value)-i))}),j}},i.isWithinShape=function(a,b){var c,d=this,e=d.d3.select(a);return d.isTargetToShow(b.id)?"circle"===a.nodeName?c=d.isStepType(b)?d.isWithinStep(a,d.getYScale(b.id)(b.value)):d.isWithinCircle(a,1.5*d.pointSelectR(b)):"path"===a.nodeName&&(c=e.classed(l.bar)?d.isWithinBar(a):!0):c=!1,c},i.getInterpolate=function(a){var b=this,c=b.isInterpolationType(b.config.spline_interpolation_type)?b.config.spline_interpolation_type:"cardinal";return b.isSplineType(a)?c:b.isStepType(a)?b.config.line_step_type:"linear"},i.initLine=function(){var a=this;a.main.select("."+l.chart).append("g").attr("class",l.chartLines)},i.updateTargetsForLine=function(a){var b,c,d=this,e=d.config,f=d.classChartLine.bind(d),g=d.classLines.bind(d),h=d.classAreas.bind(d),i=d.classCircles.bind(d),j=d.classFocus.bind(d);b=d.main.select("."+l.chartLines).selectAll("."+l.chartLine).data(a).attr("class",function(a){return f(a)+j(a)}),c=b.enter().append("g").attr("class",f).style("opacity",0).style("pointer-events","none"),c.append("g").attr("class",g),c.append("g").attr("class",h),c.append("g").attr("class",function(a){return d.generateClass(l.selectedCircles,a.id)}),c.append("g").attr("class",i).style("cursor",function(a){return e.data_selection_isselectable(a)?"pointer":null}),a.forEach(function(a){d.main.selectAll("."+l.selectedCircles+d.getTargetSelectorSuffix(a.id)).selectAll("."+l.selectedCircle).each(function(b){b.value=a.values[b.index].value})})},i.updateLine=function(a){var b=this;b.mainLine=b.main.selectAll("."+l.lines).selectAll("."+l.line).data(b.lineData.bind(b)),b.mainLine.enter().append("path").attr("class",b.classLine.bind(b)).style("stroke",b.color),b.mainLine.style("opacity",b.initialOpacity.bind(b)).style("shape-rendering",function(a){return b.isStepType(a)?"crispEdges":""}).attr("transform",null),b.mainLine.exit().transition().duration(a).style("opacity",0).remove()},i.redrawLine=function(a,b){return[(b?this.mainLine.transition(Math.random().toString()):this.mainLine).attr("d",a).style("stroke",this.color).style("opacity",1)]},i.generateDrawLine=function(a,b){var c=this,d=c.config,e=c.d3.svg.line(),f=c.generateGetLinePoints(a,b),g=b?c.getSubYScale:c.getYScale,h=function(a){return(b?c.subxx:c.xx).call(c,a)},i=function(a,b){return d.data_groups.length>0?f(a,b)[0][1]:g.call(c,a.id)(a.value)};return e=d.axis_rotated?e.x(i).y(h):e.x(h).y(i),d.line_connectNull||(e=e.defined(function(a){return null!=a.value})),function(a){var f,h=d.line_connectNull?c.filterRemoveNull(a.values):a.values,i=b?c.x:c.subX,j=g.call(c,a.id),k=0,l=0;return c.isLineType(a)?d.data_regions[a.id]?f=c.lineWithRegions(h,i,j,d.data_regions[a.id]):(c.isStepType(a)&&(h=c.convertValuesToStep(h)),f=e.interpolate(c.getInterpolate(a))(h)):(h[0]&&(k=i(h[0].x),l=j(h[0].value)),f=d.axis_rotated?"M "+l+" "+k:"M "+k+" "+l),f?f:"M 0 0"}},i.generateGetLinePoints=function(a,b){var c=this,d=c.config,e=a.__max__+1,f=c.getShapeX(0,e,a,!!b),g=c.getShapeY(!!b),h=c.getShapeOffset(c.isLineType,a,!!b),i=b?c.getSubYScale:c.getYScale;return function(a,b){var e=i.call(c,a.id)(0),j=h(a,b)||e,k=f(a),l=g(a);return d.axis_rotated&&(0<a.value&&e>l||a.value<0&&l>e)&&(l=e),[[k,l-(e-j)],[k,l-(e-j)],[k,l-(e-j)],[k,l-(e-j)]]}},i.lineWithRegions=function(a,b,c,d){function e(a,b){var c;for(c=0;c<b.length;c++)if(b[c].start<a&&a<=b[c].end)return!0;return!1}function f(a){return"M"+a[0][0]+" "+a[0][1]+" "+a[1][0]+" "+a[1][1]}var g,h,i,j,k,l,m,n,o,r,s,t,u=this,v=u.config,w=-1,x="M",y=u.isCategorized()?.5:0,z=[];if(q(d))for(g=0;g<d.length;g++)z[g]={},p(d[g].start)?z[g].start=a[0].x:z[g].start=u.isTimeSeries()?u.parseDate(d[g].start):d[g].start,p(d[g].end)?z[g].end=a[a.length-1].x:z[g].end=u.isTimeSeries()?u.parseDate(d[g].end):d[g].end;for(s=v.axis_rotated?function(a){return c(a.value)}:function(a){return b(a.x)},t=v.axis_rotated?function(a){return b(a.x)}:function(a){return c(a.value)},i=u.isTimeSeries()?function(a,d,e,g){var h,i=a.x.getTime(),j=d.x-a.x,l=new Date(i+j*e),m=new Date(i+j*(e+g));return h=v.axis_rotated?[[c(k(e)),b(l)],[c(k(e+g)),b(m)]]:[[b(l),c(k(e))],[b(m),c(k(e+g))]],f(h)}:function(a,d,e,g){var h;return h=v.axis_rotated?[[c(k(e),!0),b(j(e))],[c(k(e+g),!0),b(j(e+g))]]:[[b(j(e),!0),c(k(e))],[b(j(e+g),!0),c(k(e+g))]],f(h)},g=0;g<a.length;g++){if(p(z)||!e(a[g].x,z))x+=" "+s(a[g])+" "+t(a[g]);else for(j=u.getScale(a[g-1].x+y,a[g].x+y,u.isTimeSeries()),k=u.getScale(a[g-1].value,a[g].value),l=b(a[g].x)-b(a[g-1].x),m=c(a[g].value)-c(a[g-1].value),n=Math.sqrt(Math.pow(l,2)+Math.pow(m,2)),o=2/n,r=2*o,h=o;1>=h;h+=r)x+=i(a[g-1],a[g],h,o);w=a[g].x}return x},i.updateArea=function(a){var b=this,c=b.d3;b.mainArea=b.main.selectAll("."+l.areas).selectAll("."+l.area).data(b.lineData.bind(b)),b.mainArea.enter().append("path").attr("class",b.classArea.bind(b)).style("fill",b.color).style("opacity",function(){return b.orgAreaOpacity=+c.select(this).style("opacity"),0}),b.mainArea.style("opacity",b.orgAreaOpacity),b.mainArea.exit().transition().duration(a).style("opacity",0).remove()},i.redrawArea=function(a,b){return[(b?this.mainArea.transition(Math.random().toString()):this.mainArea).attr("d",a).style("fill",this.color).style("opacity",this.orgAreaOpacity)]},i.generateDrawArea=function(a,b){var c=this,d=c.config,e=c.d3.svg.area(),f=c.generateGetAreaPoints(a,b),g=b?c.getSubYScale:c.getYScale,h=function(a){return(b?c.subxx:c.xx).call(c,a)},i=function(a,b){return d.data_groups.length>0?f(a,b)[0][1]:g.call(c,a.id)(c.getAreaBaseValue(a.id))},j=function(a,b){return d.data_groups.length>0?f(a,b)[1][1]:g.call(c,a.id)(a.value)};return e=d.axis_rotated?e.x0(i).x1(j).y(h):e.x(h).y0(d.area_above?0:i).y1(j),d.line_connectNull||(e=e.defined(function(a){return null!==a.value})),function(a){var b,f=d.line_connectNull?c.filterRemoveNull(a.values):a.values,g=0,h=0;return c.isAreaType(a)?(c.isStepType(a)&&(f=c.convertValuesToStep(f)),b=e.interpolate(c.getInterpolate(a))(f)):(f[0]&&(g=c.x(f[0].x),h=c.getYScale(a.id)(f[0].value)),b=d.axis_rotated?"M "+h+" "+g:"M "+g+" "+h),b?b:"M 0 0"}},i.getAreaBaseValue=function(){return 0},i.generateGetAreaPoints=function(a,b){var c=this,d=c.config,e=a.__max__+1,f=c.getShapeX(0,e,a,!!b),g=c.getShapeY(!!b),h=c.getShapeOffset(c.isAreaType,a,!!b),i=b?c.getSubYScale:c.getYScale;return function(a,b){var e=i.call(c,a.id)(0),j=h(a,b)||e,k=f(a),l=g(a);return d.axis_rotated&&(0<a.value&&e>l||a.value<0&&l>e)&&(l=e),[[k,j],[k,l-(e-j)],[k,l-(e-j)],[k,j]]}},i.updateCircle=function(){var a=this;a.mainCircle=a.main.selectAll("."+l.circles).selectAll("."+l.circle).data(a.lineOrScatterData.bind(a)),a.mainCircle.enter().append("circle").attr("class",a.classCircle.bind(a)).attr("r",a.pointR.bind(a)).style("fill",a.color),a.mainCircle.style("opacity",a.initialOpacityForCircle.bind(a)),a.mainCircle.exit().remove()},i.redrawCircle=function(a,b,c){var d=this.main.selectAll("."+l.selectedCircle);return[(c?this.mainCircle.transition(Math.random().toString()):this.mainCircle).style("opacity",this.opacityForCircle.bind(this)).style("fill",this.color).attr("cx",a).attr("cy",b),(c?d.transition(Math.random().toString()):d).attr("cx",a).attr("cy",b)]},i.circleX=function(a){return a.x||0===a.x?this.x(a.x):null},i.updateCircleY=function(){var a,b,c=this;c.config.data_groups.length>0?(a=c.getShapeIndices(c.isLineType),b=c.generateGetLinePoints(a),c.circleY=function(a,c){return b(a,c)[0][1]}):c.circleY=function(a){return c.getYScale(a.id)(a.value)}},i.getCircles=function(a,b){var c=this;return(b?c.main.selectAll("."+l.circles+c.getTargetSelectorSuffix(b)):c.main).selectAll("."+l.circle+(m(a)?"-"+a:""))},i.expandCircles=function(a,b,c){var d=this,e=d.pointExpandedR.bind(d);c&&d.unexpandCircles(),d.getCircles(a,b).classed(l.EXPANDED,!0).attr("r",e)},i.unexpandCircles=function(a){var b=this,c=b.pointR.bind(b);b.getCircles(a).filter(function(){return b.d3.select(this).classed(l.EXPANDED)}).classed(l.EXPANDED,!1).attr("r",c)},i.pointR=function(a){var b=this,c=b.config;return b.isStepType(a)?0:n(c.point_r)?c.point_r(a):c.point_r;
2313 2313 },i.pointExpandedR=function(a){var b=this,c=b.config;return c.point_focus_expand_enabled?c.point_focus_expand_r?c.point_focus_expand_r:1.75*b.pointR(a):b.pointR(a)},i.pointSelectR=function(a){var b=this,c=b.config;return n(c.point_select_r)?c.point_select_r(a):c.point_select_r?c.point_select_r:4*b.pointR(a)},i.isWithinCircle=function(a,b){var c=this.d3,d=c.mouse(a),e=c.select(a),f=+e.attr("cx"),g=+e.attr("cy");return Math.sqrt(Math.pow(f-d[0],2)+Math.pow(g-d[1],2))<b},i.isWithinStep=function(a,b){return Math.abs(b-this.d3.mouse(a)[1])<30},i.initBar=function(){var a=this;a.main.select("."+l.chart).append("g").attr("class",l.chartBars)},i.updateTargetsForBar=function(a){var b,c,d=this,e=d.config,f=d.classChartBar.bind(d),g=d.classBars.bind(d),h=d.classFocus.bind(d);b=d.main.select("."+l.chartBars).selectAll("."+l.chartBar).data(a).attr("class",function(a){return f(a)+h(a)}),c=b.enter().append("g").attr("class",f).style("opacity",0).style("pointer-events","none"),c.append("g").attr("class",g).style("cursor",function(a){return e.data_selection_isselectable(a)?"pointer":null})},i.updateBar=function(a){var b=this,c=b.barData.bind(b),d=b.classBar.bind(b),e=b.initialOpacity.bind(b),f=function(a){return b.color(a.id)};b.mainBar=b.main.selectAll("."+l.bars).selectAll("."+l.bar).data(c),b.mainBar.enter().append("path").attr("class",d).style("stroke",f).style("fill",f),b.mainBar.style("opacity",e),b.mainBar.exit().transition().duration(a).style("opacity",0).remove()},i.redrawBar=function(a,b){return[(b?this.mainBar.transition(Math.random().toString()):this.mainBar).attr("d",a).style("fill",this.color).style("opacity",1)]},i.getBarW=function(a,b){var c=this,d=c.config,e="number"==typeof d.bar_width?d.bar_width:b?a.tickInterval()*d.bar_width_ratio/b:0;return d.bar_width_max&&e>d.bar_width_max?d.bar_width_max:e},i.getBars=function(a,b){var c=this;return(b?c.main.selectAll("."+l.bars+c.getTargetSelectorSuffix(b)):c.main).selectAll("."+l.bar+(m(a)?"-"+a:""))},i.expandBars=function(a,b,c){var d=this;c&&d.unexpandBars(),d.getBars(a,b).classed(l.EXPANDED,!0)},i.unexpandBars=function(a){var b=this;b.getBars(a).classed(l.EXPANDED,!1)},i.generateDrawBar=function(a,b){var c=this,d=c.config,e=c.generateGetBarPoints(a,b);return function(a,b){var c=e(a,b),f=d.axis_rotated?1:0,g=d.axis_rotated?0:1,h="M "+c[0][f]+","+c[0][g]+" L"+c[1][f]+","+c[1][g]+" L"+c[2][f]+","+c[2][g]+" L"+c[3][f]+","+c[3][g]+" z";return h}},i.generateGetBarPoints=function(a,b){var c=this,d=b?c.subXAxis:c.xAxis,e=a.__max__+1,f=c.getBarW(d,e),g=c.getShapeX(f,e,a,!!b),h=c.getShapeY(!!b),i=c.getShapeOffset(c.isBarType,a,!!b),j=b?c.getSubYScale:c.getYScale;return function(a,b){var d=j.call(c,a.id)(0),e=i(a,b)||d,k=g(a),l=h(a);return c.config.axis_rotated&&(0<a.value&&d>l||a.value<0&&l>d)&&(l=d),[[k,e],[k,l-(d-e)],[k+f,l-(d-e)],[k+f,e]]}},i.isWithinBar=function(a){var b=this.d3.mouse(a),c=a.getBoundingClientRect(),d=a.pathSegList.getItem(0),e=a.pathSegList.getItem(1),f=Math.min(d.x,e.x),g=Math.min(d.y,e.y),h=c.width,i=c.height,j=2,k=f-j,l=f+h+j,m=g+i+j,n=g-j;return k<b[0]&&b[0]<l&&n<b[1]&&b[1]<m},i.initText=function(){var a=this;a.main.select("."+l.chart).append("g").attr("class",l.chartTexts),a.mainText=a.d3.selectAll([])},i.updateTargetsForText=function(a){var b,c,d=this,e=d.classChartText.bind(d),f=d.classTexts.bind(d),g=d.classFocus.bind(d);b=d.main.select("."+l.chartTexts).selectAll("."+l.chartText).data(a).attr("class",function(a){return e(a)+g(a)}),c=b.enter().append("g").attr("class",e).style("opacity",0).style("pointer-events","none"),c.append("g").attr("class",f)},i.updateText=function(a){var b=this,c=b.config,d=b.barOrLineData.bind(b),e=b.classText.bind(b);b.mainText=b.main.selectAll("."+l.texts).selectAll("."+l.text).data(d),b.mainText.enter().append("text").attr("class",e).attr("text-anchor",function(a){return c.axis_rotated?a.value<0?"end":"start":"middle"}).style("stroke","none").style("fill",function(a){return b.color(a)}).style("fill-opacity",0),b.mainText.text(function(a,c,d){return b.dataLabelFormat(a.id)(a.value,a.id,c,d)}),b.mainText.exit().transition().duration(a).style("fill-opacity",0).remove()},i.redrawText=function(a,b,c,d){return[(d?this.mainText.transition():this.mainText).attr("x",a).attr("y",b).style("fill",this.color).style("fill-opacity",c?0:this.opacityForText.bind(this))]},i.getTextRect=function(a,b,c){var d,e=this.d3.select("body").append("div").classed("c3",!0),f=e.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0),g=this.d3.select(c).style("font");return f.selectAll(".dummy").data([a]).enter().append("text").classed(b?b:"",!0).style("font",g).text(a).each(function(){d=this.getBoundingClientRect()}),e.remove(),d},i.generateXYForText=function(a,b,c,d){var e=this,f=e.generateGetAreaPoints(a,!1),g=e.generateGetBarPoints(b,!1),h=e.generateGetLinePoints(c,!1),i=d?e.getXForText:e.getYForText;return function(a,b){var c=e.isAreaType(a)?f:e.isBarType(a)?g:h;return i.call(e,c(a,b),a,this)}},i.getXForText=function(a,b,c){var d,e,f=this,g=c.getBoundingClientRect();return f.config.axis_rotated?(e=f.isBarType(b)?4:6,d=a[2][1]+e*(b.value<0?-1:1)):d=f.hasType("bar")?(a[2][0]+a[0][0])/2:a[0][0],null===b.value&&(d>f.width?d=f.width-g.width:0>d&&(d=4)),d},i.getYForText=function(a,b,c){var d,e=this,f=c.getBoundingClientRect();return e.config.axis_rotated?d=(a[0][0]+a[2][0]+.6*f.height)/2:(d=a[2][1],b.value<0||0===b.value&&!e.hasPositiveValue?(d+=f.height,e.isBarType(b)&&e.isSafari()?d-=3:!e.isBarType(b)&&e.isChrome()&&(d+=3)):d+=e.isBarType(b)?-3:-6),null!==b.value||e.config.axis_rotated||(d<f.height?d=f.height:d>this.height&&(d=this.height-4)),d},i.setTargetType=function(a,b){var c=this,d=c.config;c.mapToTargetIds(a).forEach(function(a){c.withoutFadeIn[a]=b===d.data_types[a],d.data_types[a]=b}),a||(d.data_type=b)},i.hasType=function(a,b){var c=this,d=c.config.data_types,e=!1;return b=b||c.data.targets,b&&b.length?b.forEach(function(b){var c=d[b.id];(c&&c.indexOf(a)>=0||!c&&"line"===a)&&(e=!0)}):Object.keys(d).length?Object.keys(d).forEach(function(b){d[b]===a&&(e=!0)}):e=c.config.data_type===a,e},i.hasArcType=function(a){return this.hasType("pie",a)||this.hasType("donut",a)||this.hasType("gauge",a)},i.isLineType=function(a){var b=this.config,c=o(a)?a:a.id;return!b.data_types[c]||["line","spline","area","area-spline","step","area-step"].indexOf(b.data_types[c])>=0},i.isStepType=function(a){var b=o(a)?a:a.id;return["step","area-step"].indexOf(this.config.data_types[b])>=0},i.isSplineType=function(a){var b=o(a)?a:a.id;return["spline","area-spline"].indexOf(this.config.data_types[b])>=0},i.isAreaType=function(a){var b=o(a)?a:a.id;return["area","area-spline","area-step"].indexOf(this.config.data_types[b])>=0},i.isBarType=function(a){var b=o(a)?a:a.id;return"bar"===this.config.data_types[b]},i.isScatterType=function(a){var b=o(a)?a:a.id;return"scatter"===this.config.data_types[b]},i.isPieType=function(a){var b=o(a)?a:a.id;return"pie"===this.config.data_types[b]},i.isGaugeType=function(a){var b=o(a)?a:a.id;return"gauge"===this.config.data_types[b]},i.isDonutType=function(a){var b=o(a)?a:a.id;return"donut"===this.config.data_types[b]},i.isArcType=function(a){return this.isPieType(a)||this.isDonutType(a)||this.isGaugeType(a)},i.lineData=function(a){return this.isLineType(a)?[a]:[]},i.arcData=function(a){return this.isArcType(a.data)?[a]:[]},i.barData=function(a){return this.isBarType(a)?a.values:[]},i.lineOrScatterData=function(a){return this.isLineType(a)||this.isScatterType(a)?a.values:[]},i.barOrLineData=function(a){return this.isBarType(a)||this.isLineType(a)?a.values:[]},i.isInterpolationType=function(a){return["linear","linear-closed","basis","basis-open","basis-closed","bundle","cardinal","cardinal-open","cardinal-closed","monotone"].indexOf(a)>=0},i.initGrid=function(){var a=this,b=a.config,c=a.d3;a.grid=a.main.append("g").attr("clip-path",a.clipPathForGrid).attr("class",l.grid),b.grid_x_show&&a.grid.append("g").attr("class",l.xgrids),b.grid_y_show&&a.grid.append("g").attr("class",l.ygrids),b.grid_focus_show&&a.grid.append("g").attr("class",l.xgridFocus).append("line").attr("class",l.xgridFocus),a.xgrid=c.selectAll([]),b.grid_lines_front||a.initGridLines()},i.initGridLines=function(){var a=this,b=a.d3;a.gridLines=a.main.append("g").attr("clip-path",a.clipPathForGrid).attr("class",l.grid+" "+l.gridLines),a.gridLines.append("g").attr("class",l.xgridLines),a.gridLines.append("g").attr("class",l.ygridLines),a.xgridLines=b.selectAll([])},i.updateXGrid=function(a){var b=this,c=b.config,d=b.d3,e=b.generateGridData(c.grid_x_type,b.x),f=b.isCategorized()?b.xAxis.tickOffset():0;b.xgridAttr=c.axis_rotated?{x1:0,x2:b.width,y1:function(a){return b.x(a)-f},y2:function(a){return b.x(a)-f}}:{x1:function(a){return b.x(a)+f},x2:function(a){return b.x(a)+f},y1:0,y2:b.height},b.xgrid=b.main.select("."+l.xgrids).selectAll("."+l.xgrid).data(e),b.xgrid.enter().append("line").attr("class",l.xgrid),a||b.xgrid.attr(b.xgridAttr).style("opacity",function(){return+d.select(this).attr(c.axis_rotated?"y1":"x1")===(c.axis_rotated?b.height:0)?0:1}),b.xgrid.exit().remove()},i.updateYGrid=function(){var a=this,b=a.config,c=a.yAxis.tickValues()||a.y.ticks(b.grid_y_ticks);a.ygrid=a.main.select("."+l.ygrids).selectAll("."+l.ygrid).data(c),a.ygrid.enter().append("line").attr("class",l.ygrid),a.ygrid.attr("x1",b.axis_rotated?a.y:0).attr("x2",b.axis_rotated?a.y:a.width).attr("y1",b.axis_rotated?0:a.y).attr("y2",b.axis_rotated?a.height:a.y),a.ygrid.exit().remove(),a.smoothLines(a.ygrid,"grid")},i.gridTextAnchor=function(a){return a.position?a.position:"end"},i.gridTextDx=function(a){return"start"===a.position?4:"middle"===a.position?0:-4},i.xGridTextX=function(a){return"start"===a.position?-this.height:"middle"===a.position?-this.height/2:0},i.yGridTextX=function(a){return"start"===a.position?0:"middle"===a.position?this.width/2:this.width},i.updateGrid=function(a){var b,c,d,e=this,f=e.main,g=e.config;e.grid.style("visibility",e.hasArcType()?"hidden":"visible"),f.select("line."+l.xgridFocus).style("visibility","hidden"),g.grid_x_show&&e.updateXGrid(),e.xgridLines=f.select("."+l.xgridLines).selectAll("."+l.xgridLine).data(g.grid_x_lines),b=e.xgridLines.enter().append("g").attr("class",function(a){return l.xgridLine+(a["class"]?" "+a["class"]:"")}),b.append("line").style("opacity",0),b.append("text").attr("text-anchor",e.gridTextAnchor).attr("transform",g.axis_rotated?"":"rotate(-90)").attr("dx",e.gridTextDx).attr("dy",-5).style("opacity",0),e.xgridLines.exit().transition().duration(a).style("opacity",0).remove(),g.grid_y_show&&e.updateYGrid(),e.ygridLines=f.select("."+l.ygridLines).selectAll("."+l.ygridLine).data(g.grid_y_lines),c=e.ygridLines.enter().append("g").attr("class",function(a){return l.ygridLine+(a["class"]?" "+a["class"]:"")}),c.append("line").style("opacity",0),c.append("text").attr("text-anchor",e.gridTextAnchor).attr("transform",g.axis_rotated?"rotate(-90)":"").attr("dx",e.gridTextDx).attr("dy",-5).style("opacity",0),d=e.yv.bind(e),e.ygridLines.select("line").transition().duration(a).attr("x1",g.axis_rotated?d:0).attr("x2",g.axis_rotated?d:e.width).attr("y1",g.axis_rotated?0:d).attr("y2",g.axis_rotated?e.height:d).style("opacity",1),e.ygridLines.select("text").transition().duration(a).attr("x",g.axis_rotated?e.xGridTextX.bind(e):e.yGridTextX.bind(e)).attr("y",d).text(function(a){return a.text}).style("opacity",1),e.ygridLines.exit().transition().duration(a).style("opacity",0).remove()},i.redrawGrid=function(a){var b=this,c=b.config,d=b.xv.bind(b),e=b.xgridLines.select("line"),f=b.xgridLines.select("text");return[(a?e.transition():e).attr("x1",c.axis_rotated?0:d).attr("x2",c.axis_rotated?b.width:d).attr("y1",c.axis_rotated?d:0).attr("y2",c.axis_rotated?d:b.height).style("opacity",1),(a?f.transition():f).attr("x",c.axis_rotated?b.yGridTextX.bind(b):b.xGridTextX.bind(b)).attr("y",d).text(function(a){return a.text}).style("opacity",1)]},i.showXGridFocus=function(a){var b=this,c=b.config,d=a.filter(function(a){return a&&m(a.value)}),e=b.main.selectAll("line."+l.xgridFocus),f=b.xx.bind(b);c.tooltip_show&&(b.hasType("scatter")||b.hasArcType()||(e.style("visibility","visible").data([d[0]]).attr(c.axis_rotated?"y1":"x1",f).attr(c.axis_rotated?"y2":"x2",f),b.smoothLines(e,"grid")))},i.hideXGridFocus=function(){this.main.select("line."+l.xgridFocus).style("visibility","hidden")},i.updateXgridFocus=function(){var a=this,b=a.config;a.main.select("line."+l.xgridFocus).attr("x1",b.axis_rotated?0:-10).attr("x2",b.axis_rotated?a.width:-10).attr("y1",b.axis_rotated?-10:0).attr("y2",b.axis_rotated?-10:a.height)},i.generateGridData=function(a,b){var c,d,e,f,g=this,h=[],i=g.main.select("."+l.axisX).selectAll(".tick").size();if("year"===a)for(c=g.getXDomain(),d=c[0].getFullYear(),e=c[1].getFullYear(),f=d;e>=f;f++)h.push(new Date(f+"-01-01 00:00:00"));else h=b.ticks(10),h.length>i&&(h=h.filter(function(a){return(""+a).indexOf(".")<0}));return h},i.getGridFilterToRemove=function(a){return a?function(b){var c=!1;return[].concat(a).forEach(function(a){("value"in a&&b.value===a.value||"class"in a&&b["class"]===a["class"])&&(c=!0)}),c}:function(){return!0}},i.removeGridLines=function(a,b){var c=this,d=c.config,e=c.getGridFilterToRemove(a),f=function(a){return!e(a)},g=b?l.xgridLines:l.ygridLines,h=b?l.xgridLine:l.ygridLine;c.main.select("."+g).selectAll("."+h).filter(e).transition().duration(d.transition_duration).style("opacity",0).remove(),b?d.grid_x_lines=d.grid_x_lines.filter(f):d.grid_y_lines=d.grid_y_lines.filter(f)},i.initTooltip=function(){var a,b=this,c=b.config;if(b.tooltip=b.selectChart.style("position","relative").append("div").attr("class",l.tooltipContainer).style("position","absolute").style("pointer-events","none").style("display","none"),c.tooltip_init_show){if(b.isTimeSeries()&&o(c.tooltip_init_x)){for(c.tooltip_init_x=b.parseDate(c.tooltip_init_x),a=0;a<b.data.targets[0].values.length&&b.data.targets[0].values[a].x-c.tooltip_init_x!==0;a++);c.tooltip_init_x=a}b.tooltip.html(c.tooltip_contents.call(b,b.data.targets.map(function(a){return b.addName(a.values[c.tooltip_init_x])}),b.axis.getXAxisTickFormat(),b.getYFormat(b.hasArcType()),b.color)),b.tooltip.style("top",c.tooltip_init_position.top).style("left",c.tooltip_init_position.left).style("display","block")}},i.getTooltipContent=function(a,b,c,d){var e,f,g,h,i,j,k=this,l=k.config,m=l.tooltip_format_title||b,n=l.tooltip_format_name||function(a){return a},o=l.tooltip_format_value||c,p=k.isOrderAsc();if(0===l.data_groups.length)a.sort(function(a,b){var c=a?a.value:null,d=b?b.value:null;return p?c-d:d-c});else{var q=k.orderTargets(k.data.targets).map(function(a){return a.id});a.sort(function(a,b){var c=a?a.value:null,d=b?b.value:null;return c>0&&d>0&&(c=a?q.indexOf(a.id):null,d=b?q.indexOf(b.id):null),p?c-d:d-c})}for(f=0;f<a.length;f++)if(a[f]&&(a[f].value||0===a[f].value)&&(e||(g=y(m?m(a[f].x):a[f].x),e="<table class='"+k.CLASS.tooltip+"'>"+(g||0===g?"<tr><th colspan='2'>"+g+"</th></tr>":"")),h=y(o(a[f].value,a[f].ratio,a[f].id,a[f].index,a)),void 0!==h)){if(null===a[f].name)continue;i=y(n(a[f].name,a[f].ratio,a[f].id,a[f].index)),j=k.levelColor?k.levelColor(a[f].value):d(a[f].id),e+="<tr class='"+k.CLASS.tooltipName+"-"+k.getTargetSelectorSuffix(a[f].id)+"'>",e+="<td class='name'><span style='background-color:"+j+"'></span>"+i+"</td>",e+="<td class='value'>"+h+"</td>",e+="</tr>"}return e+"</table>"},i.tooltipPosition=function(a,b,c,d){var e,f,g,h,i,j=this,k=j.config,l=j.d3,m=j.hasArcType(),n=l.mouse(d);return m?(f=(j.width-(j.isLegendRight?j.getLegendWidth():0))/2+n[0],h=j.height/2+n[1]+20):(e=j.getSvgLeft(!0),k.axis_rotated?(f=e+n[0]+100,g=f+b,i=j.currentWidth-j.getCurrentPaddingRight(),h=j.x(a[0].x)+20):(f=e+j.getCurrentPaddingLeft(!0)+j.x(a[0].x)+20,g=f+b,i=e+j.currentWidth-j.getCurrentPaddingRight(),h=n[1]+15),g>i&&(f-=g-i+20),h+c>j.currentHeight&&(h-=c+30)),0>h&&(h=0),{top:h,left:f}},i.showTooltip=function(a,b){var c,d,e,f=this,g=f.config,h=f.hasArcType(),j=a.filter(function(a){return a&&m(a.value)}),k=g.tooltip_position||i.tooltipPosition;0!==j.length&&g.tooltip_show&&(f.tooltip.html(g.tooltip_contents.call(f,a,f.axis.getXAxisTickFormat(),f.getYFormat(h),f.color)).style("display","block"),c=f.tooltip.property("offsetWidth"),d=f.tooltip.property("offsetHeight"),e=k.call(this,j,c,d,b),f.tooltip.style("top",e.top+"px").style("left",e.left+"px"))},i.hideTooltip=function(){this.tooltip.style("display","none")},i.initLegend=function(){var a=this;return a.legendItemTextBox={},a.legendHasRendered=!1,a.legend=a.svg.append("g").attr("transform",a.getTranslate("legend")),a.config.legend_show?void a.updateLegendWithDefaults():(a.legend.style("visibility","hidden"),void(a.hiddenLegendIds=a.mapToIds(a.data.targets)))},i.updateLegendWithDefaults=function(){var a=this;a.updateLegend(a.mapToIds(a.data.targets),{withTransform:!1,withTransitionForTransform:!1,withTransition:!1})},i.updateSizeForLegend=function(a,b){var c=this,d=c.config,e={top:c.isLegendTop?c.getCurrentPaddingTop()+d.legend_inset_y+5.5:c.currentHeight-a-c.getCurrentPaddingBottom()-d.legend_inset_y,left:c.isLegendLeft?c.getCurrentPaddingLeft()+d.legend_inset_x+.5:c.currentWidth-b-c.getCurrentPaddingRight()-d.legend_inset_x+.5};c.margin3={top:c.isLegendRight?0:c.isLegendInset?e.top:c.currentHeight-a,right:NaN,bottom:0,left:c.isLegendRight?c.currentWidth-b:c.isLegendInset?e.left:0}},i.transformLegend=function(a){var b=this;(a?b.legend.transition():b.legend).attr("transform",b.getTranslate("legend"))},i.updateLegendStep=function(a){this.legendStep=a},i.updateLegendItemWidth=function(a){this.legendItemWidth=a},i.updateLegendItemHeight=function(a){this.legendItemHeight=a},i.getLegendWidth=function(){var a=this;return a.config.legend_show?a.isLegendRight||a.isLegendInset?a.legendItemWidth*(a.legendStep+1):a.currentWidth:0},i.getLegendHeight=function(){var a=this,b=0;return a.config.legend_show&&(b=a.isLegendRight?a.currentHeight:Math.max(20,a.legendItemHeight)*(a.legendStep+1)),b},i.opacityForLegend=function(a){return a.classed(l.legendItemHidden)?null:1},i.opacityForUnfocusedLegend=function(a){return a.classed(l.legendItemHidden)?null:.3},i.toggleFocusLegend=function(a,b){var c=this;a=c.mapToTargetIds(a),c.legend.selectAll("."+l.legendItem).filter(function(b){return a.indexOf(b)>=0}).classed(l.legendItemFocused,b).transition().duration(100).style("opacity",function(){var a=b?c.opacityForLegend:c.opacityForUnfocusedLegend;return a.call(c,c.d3.select(this))})},i.revertLegend=function(){var a=this,b=a.d3;a.legend.selectAll("."+l.legendItem).classed(l.legendItemFocused,!1).transition().duration(100).style("opacity",function(){return a.opacityForLegend(b.select(this))})},i.showLegend=function(a){var b=this,c=b.config;c.legend_show||(c.legend_show=!0,b.legend.style("visibility","visible"),b.legendHasRendered||b.updateLegendWithDefaults()),b.removeHiddenLegendIds(a),b.legend.selectAll(b.selectorLegends(a)).style("visibility","visible").transition().style("opacity",function(){return b.opacityForLegend(b.d3.select(this))})},i.hideLegend=function(a){var b=this,c=b.config;c.legend_show&&u(a)&&(c.legend_show=!1,b.legend.style("visibility","hidden")),b.addHiddenLegendIds(a),b.legend.selectAll(b.selectorLegends(a)).style("opacity",0).style("visibility","hidden")},i.clearLegendItemTextBoxCache=function(){this.legendItemTextBox={}},i.updateLegend=function(a,b,c){function d(a,b){return y.legendItemTextBox[b]||(y.legendItemTextBox[b]=y.getTextRect(a.textContent,l.legendItem,a)),y.legendItemTextBox[b]}function e(b,c,e){function f(a,b){b||(g=(o-G-n)/2,E>g&&(g=(o-n)/2,G=0,M++)),L[a]=M,K[M]=y.isLegendInset?10:g,H[a]=G,G+=n}var g,h,i=0===e,j=e===a.length-1,k=d(b,c),l=k.width+F+(!j||y.isLegendRight||y.isLegendInset?B:0)+z.legend_padding,m=k.height+A,n=y.isLegendRight||y.isLegendInset?m:l,o=y.isLegendRight||y.isLegendInset?y.getLegendHeight():y.getLegendWidth();return i&&(G=0,M=0,C=0,D=0),z.legend_show&&!y.isLegendToShow(c)?void(I[c]=J[c]=L[c]=H[c]=0):(I[c]=l,J[c]=m,(!C||l>=C)&&(C=l),(!D||m>=D)&&(D=m),h=y.isLegendRight||y.isLegendInset?D:C,void(z.legend_equally?(Object.keys(I).forEach(function(a){I[a]=C}),Object.keys(J).forEach(function(a){J[a]=D}),g=(o-h*a.length)/2,E>g?(G=0,M=0,a.forEach(function(a){f(a)})):f(c,!0)):f(c)))}var f,g,h,i,j,k,m,n,o,p,r,s,t,u,v,x,y=this,z=y.config,A=4,B=10,C=0,D=0,E=10,F=z.legend_item_tile_width+5,G=0,H={},I={},J={},K=[0],L={},M=0;a=a.filter(function(a){return!q(z.data_names[a])||null!==z.data_names[a]}),b=b||{},r=w(b,"withTransition",!0),s=w(b,"withTransitionForTransform",!0),y.isLegendInset&&(M=z.legend_inset_step?z.legend_inset_step:a.length,y.updateLegendStep(M)),y.isLegendRight?(f=function(a){return C*L[a]},i=function(a){return K[L[a]]+H[a]}):y.isLegendInset?(f=function(a){return C*L[a]+10},i=function(a){return K[L[a]]+H[a]}):(f=function(a){return K[L[a]]+H[a]},i=function(a){return D*L[a]}),g=function(a,b){return f(a,b)+4+z.legend_item_tile_width},j=function(a,b){return i(a,b)+9},h=function(a,b){return f(a,b)},k=function(a,b){return i(a,b)-5},m=function(a,b){return f(a,b)-2},n=function(a,b){return f(a,b)-2+z.legend_item_tile_width},o=function(a,b){return i(a,b)+4},p=y.legend.selectAll("."+l.legendItem).data(a).enter().append("g").attr("class",function(a){return y.generateClass(l.legendItem,a)}).style("visibility",function(a){return y.isLegendToShow(a)?"visible":"hidden"}).style("cursor","pointer").on("click",function(a){z.legend_item_onclick?z.legend_item_onclick.call(y,a):y.d3.event.altKey?(y.api.hide(),y.api.show(a)):(y.api.toggle(a),y.isTargetToShow(a)?y.api.focus(a):y.api.revert())}).on("mouseover",function(a){z.legend_item_onmouseover?z.legend_item_onmouseover.call(y,a):(y.d3.select(this).classed(l.legendItemFocused,!0),!y.transiting&&y.isTargetToShow(a)&&y.api.focus(a))}).on("mouseout",function(a){z.legend_item_onmouseout?z.legend_item_onmouseout.call(y,a):(y.d3.select(this).classed(l.legendItemFocused,!1),y.api.revert())}),p.append("text").text(function(a){return q(z.data_names[a])?z.data_names[a]:a}).each(function(a,b){e(this,a,b)}).style("pointer-events","none").attr("x",y.isLegendRight||y.isLegendInset?g:-200).attr("y",y.isLegendRight||y.isLegendInset?-200:j),p.append("rect").attr("class",l.legendItemEvent).style("fill-opacity",0).attr("x",y.isLegendRight||y.isLegendInset?h:-200).attr("y",y.isLegendRight||y.isLegendInset?-200:k),p.append("line").attr("class",l.legendItemTile).style("stroke",y.color).style("pointer-events","none").attr("x1",y.isLegendRight||y.isLegendInset?m:-200).attr("y1",y.isLegendRight||y.isLegendInset?-200:o).attr("x2",y.isLegendRight||y.isLegendInset?n:-200).attr("y2",y.isLegendRight||y.isLegendInset?-200:o).attr("stroke-width",z.legend_item_tile_height),x=y.legend.select("."+l.legendBackground+" rect"),y.isLegendInset&&C>0&&0===x.size()&&(x=y.legend.insert("g","."+l.legendItem).attr("class",l.legendBackground).append("rect")),t=y.legend.selectAll("text").data(a).text(function(a){return q(z.data_names[a])?z.data_names[a]:a}).each(function(a,b){e(this,a,b)}),(r?t.transition():t).attr("x",g).attr("y",j),u=y.legend.selectAll("rect."+l.legendItemEvent).data(a),(r?u.transition():u).attr("width",function(a){return I[a]}).attr("height",function(a){return J[a]}).attr("x",h).attr("y",k),v=y.legend.selectAll("line."+l.legendItemTile).data(a),(r?v.transition():v).style("stroke",y.color).attr("x1",m).attr("y1",o).attr("x2",n).attr("y2",o),x&&(r?x.transition():x).attr("height",y.getLegendHeight()-12).attr("width",C*(M+1)+10),y.legend.selectAll("."+l.legendItem).classed(l.legendItemHidden,function(a){return!y.isTargetToShow(a)}),y.updateLegendItemWidth(C),y.updateLegendItemHeight(D),y.updateLegendStep(M),y.updateSizes(),y.updateScales(),y.updateSvgSize(),y.transformAll(s,c),y.legendHasRendered=!0},i.initTitle=function(){var a=this;a.title=a.svg.append("text").text(a.config.title_text).attr("class",a.CLASS.title)},i.redrawTitle=function(){var a=this;a.title.attr("x",a.xForTitle.bind(a)).attr("y",a.yForTitle.bind(a))},i.xForTitle=function(){var a,b=this,c=b.config,d=c.title_position||"left";return a=d.indexOf("right")>=0?b.currentWidth-b.getTextRect(b.title.node().textContent,b.CLASS.title,b.title.node()).width-c.title_padding.right:d.indexOf("center")>=0?(b.currentWidth-b.getTextRect(b.title.node().textContent,b.CLASS.title,b.title.node()).width)/2:c.title_padding.left},i.yForTitle=function(){var a=this;return a.config.title_padding.top+a.getTextRect(a.title.node().textContent,a.CLASS.title,a.title.node()).height},i.getTitlePadding=function(){var a=this;return a.yForTitle()+a.config.title_padding.bottom},c(b,f),f.prototype.init=function(){var a=this.owner,b=a.config,c=a.main;a.axes.x=c.append("g").attr("class",l.axis+" "+l.axisX).attr("clip-path",a.clipPathForXAxis).attr("transform",a.getTranslate("x")).style("visibility",b.axis_x_show?"visible":"hidden"),a.axes.x.append("text").attr("class",l.axisXLabel).attr("transform",b.axis_rotated?"rotate(-90)":"").style("text-anchor",this.textAnchorForXAxisLabel.bind(this)),a.axes.y=c.append("g").attr("class",l.axis+" "+l.axisY).attr("clip-path",b.axis_y_inner?"":a.clipPathForYAxis).attr("transform",a.getTranslate("y")).style("visibility",b.axis_y_show?"visible":"hidden"),a.axes.y.append("text").attr("class",l.axisYLabel).attr("transform",b.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForYAxisLabel.bind(this)),a.axes.y2=c.append("g").attr("class",l.axis+" "+l.axisY2).attr("transform",a.getTranslate("y2")).style("visibility",b.axis_y2_show?"visible":"hidden"),a.axes.y2.append("text").attr("class",l.axisY2Label).attr("transform",b.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForY2AxisLabel.bind(this))},f.prototype.getXAxis=function(a,b,c,d,e,f,h){var i=this.owner,j=i.config,k={isCategory:i.isCategorized(),withOuterTick:e,tickMultiline:j.axis_x_tick_multiline,tickWidth:j.axis_x_tick_width,tickTextRotate:h?0:j.axis_x_tick_rotate,withoutTransition:f},l=g(i.d3,k).scale(a).orient(b);return i.isTimeSeries()&&d&&"function"!=typeof d&&(d=d.map(function(a){return i.parseDate(a)})),l.tickFormat(c).tickValues(d),i.isCategorized()&&(l.tickCentered(j.axis_x_tick_centered),u(j.axis_x_tick_culling)&&(j.axis_x_tick_culling=!1)),l},f.prototype.updateXAxisTickValues=function(a,b){var c,d=this.owner,e=d.config;return(e.axis_x_tick_fit||e.axis_x_tick_count)&&(c=this.generateTickValues(d.mapTargetsToUniqueXs(a),e.axis_x_tick_count,d.isTimeSeries())),b?b.tickValues(c):(d.xAxis.tickValues(c),d.subXAxis.tickValues(c)),c},f.prototype.getYAxis=function(a,b,c,d,e,f,h){var i=this.owner,j=i.config,k={withOuterTick:e,withoutTransition:f,tickTextRotate:h?0:j.axis_y_tick_rotate},l=g(i.d3,k).scale(a).orient(b).tickFormat(c);return i.isTimeSeriesY()?l.ticks(i.d3.time[j.axis_y_tick_time_value],j.axis_y_tick_time_interval):l.tickValues(d),l},f.prototype.getId=function(a){var b=this.owner.config;return a in b.data_axes?b.data_axes[a]:"y"},f.prototype.getXAxisTickFormat=function(){var a=this.owner,b=a.config,c=a.isTimeSeries()?a.defaultAxisTimeFormat:a.isCategorized()?a.categoryName:function(a){return 0>a?a.toFixed(0):a};return b.axis_x_tick_format&&(n(b.axis_x_tick_format)?c=b.axis_x_tick_format:a.isTimeSeries()&&(c=function(c){return c?a.axisTimeFormat(b.axis_x_tick_format)(c):""})),n(c)?function(b){return c.call(a,b)}:c},f.prototype.getTickValues=function(a,b){return a?a:b?b.tickValues():void 0},f.prototype.getXAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_x_tick_values,this.owner.xAxis)},f.prototype.getYAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y_tick_values,this.owner.yAxis)},f.prototype.getY2AxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y2_tick_values,this.owner.y2Axis)},f.prototype.getLabelOptionByAxisId=function(a){var b,c=this.owner,d=c.config;return"y"===a?b=d.axis_y_label:"y2"===a?b=d.axis_y2_label:"x"===a&&(b=d.axis_x_label),b},f.prototype.getLabelText=function(a){var b=this.getLabelOptionByAxisId(a);return o(b)?b:b?b.text:null},f.prototype.setLabelText=function(a,b){var c=this.owner,d=c.config,e=this.getLabelOptionByAxisId(a);o(e)?"y"===a?d.axis_y_label=b:"y2"===a?d.axis_y2_label=b:"x"===a&&(d.axis_x_label=b):e&&(e.text=b)},f.prototype.getLabelPosition=function(a,b){var c=this.getLabelOptionByAxisId(a),d=c&&"object"==typeof c&&c.position?c.position:b;return{isInner:d.indexOf("inner")>=0,isOuter:d.indexOf("outer")>=0,isLeft:d.indexOf("left")>=0,isCenter:d.indexOf("center")>=0,isRight:d.indexOf("right")>=0,isTop:d.indexOf("top")>=0,isMiddle:d.indexOf("middle")>=0,isBottom:d.indexOf("bottom")>=0}},f.prototype.getXAxisLabelPosition=function(){return this.getLabelPosition("x",this.owner.config.axis_rotated?"inner-top":"inner-right")},f.prototype.getYAxisLabelPosition=function(){return this.getLabelPosition("y",this.owner.config.axis_rotated?"inner-right":"inner-top")},f.prototype.getY2AxisLabelPosition=function(){return this.getLabelPosition("y2",this.owner.config.axis_rotated?"inner-right":"inner-top")},f.prototype.getLabelPositionById=function(a){return"y2"===a?this.getY2AxisLabelPosition():"y"===a?this.getYAxisLabelPosition():this.getXAxisLabelPosition()},f.prototype.textForXAxisLabel=function(){return this.getLabelText("x")},f.prototype.textForYAxisLabel=function(){return this.getLabelText("y")},f.prototype.textForY2AxisLabel=function(){return this.getLabelText("y2")},f.prototype.xForAxisLabel=function(a,b){var c=this.owner;return a?b.isLeft?0:b.isCenter?c.width/2:c.width:b.isBottom?-c.height:b.isMiddle?-c.height/2:0},f.prototype.dxForAxisLabel=function(a,b){return a?b.isLeft?"0.5em":b.isRight?"-0.5em":"0":b.isTop?"-0.5em":b.isBottom?"0.5em":"0"},f.prototype.textAnchorForAxisLabel=function(a,b){return a?b.isLeft?"start":b.isCenter?"middle":"end":b.isBottom?"start":b.isMiddle?"middle":"end"},f.prototype.xForXAxisLabel=function(){return this.xForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},f.prototype.xForYAxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},f.prototype.xForY2AxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},f.prototype.dxForXAxisLabel=function(){return this.dxForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},f.prototype.dxForYAxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},f.prototype.dxForY2AxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},f.prototype.dyForXAxisLabel=function(){var a=this.owner,b=a.config,c=this.getXAxisLabelPosition();return b.axis_rotated?c.isInner?"1.2em":-25-this.getMaxTickWidth("x"):c.isInner?"-0.5em":b.axis_x_height?b.axis_x_height-10:"3em"},f.prototype.dyForYAxisLabel=function(){var a=this.owner,b=this.getYAxisLabelPosition();return a.config.axis_rotated?b.isInner?"-0.5em":"3em":b.isInner?"1.2em":-10-(a.config.axis_y_inner?0:this.getMaxTickWidth("y")+10)},f.prototype.dyForY2AxisLabel=function(){var a=this.owner,b=this.getY2AxisLabelPosition();return a.config.axis_rotated?b.isInner?"1.2em":"-2.2em":b.isInner?"-0.5em":15+(a.config.axis_y2_inner?0:this.getMaxTickWidth("y2")+15)},f.prototype.textAnchorForXAxisLabel=function(){var a=this.owner;return this.textAnchorForAxisLabel(!a.config.axis_rotated,this.getXAxisLabelPosition())},f.prototype.textAnchorForYAxisLabel=function(){var a=this.owner;return this.textAnchorForAxisLabel(a.config.axis_rotated,this.getYAxisLabelPosition())},f.prototype.textAnchorForY2AxisLabel=function(){var a=this.owner;return this.textAnchorForAxisLabel(a.config.axis_rotated,this.getY2AxisLabelPosition())},f.prototype.getMaxTickWidth=function(a,b){var c,d,e,f,g,h=this.owner,i=h.config,j=0;return b&&h.currentMaxTickWidths[a]?h.currentMaxTickWidths[a]:(h.svg&&(c=h.filterTargetsToShow(h.data.targets),"y"===a?(d=h.y.copy().domain(h.getYDomain(c,"y")),e=this.getYAxis(d,h.yOrient,i.axis_y_tick_format,h.yAxisTickValues,!1,!0,!0)):"y2"===a?(d=h.y2.copy().domain(h.getYDomain(c,"y2")),
2314 2314 e=this.getYAxis(d,h.y2Orient,i.axis_y2_tick_format,h.y2AxisTickValues,!1,!0,!0)):(d=h.x.copy().domain(h.getXDomain(c)),e=this.getXAxis(d,h.xOrient,h.xAxisTickFormat,h.xAxisTickValues,!1,!0,!0),this.updateXAxisTickValues(c,e)),f=h.d3.select("body").append("div").classed("c3",!0),g=f.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0),g.append("g").call(e).each(function(){h.d3.select(this).selectAll("text").each(function(){var a=this.getBoundingClientRect();j<a.width&&(j=a.width)}),f.remove()})),h.currentMaxTickWidths[a]=0>=j?h.currentMaxTickWidths[a]:j,h.currentMaxTickWidths[a])},f.prototype.updateLabels=function(a){var b=this.owner,c=b.main.select("."+l.axisX+" ."+l.axisXLabel),d=b.main.select("."+l.axisY+" ."+l.axisYLabel),e=b.main.select("."+l.axisY2+" ."+l.axisY2Label);(a?c.transition():c).attr("x",this.xForXAxisLabel.bind(this)).attr("dx",this.dxForXAxisLabel.bind(this)).attr("dy",this.dyForXAxisLabel.bind(this)).text(this.textForXAxisLabel.bind(this)),(a?d.transition():d).attr("x",this.xForYAxisLabel.bind(this)).attr("dx",this.dxForYAxisLabel.bind(this)).attr("dy",this.dyForYAxisLabel.bind(this)).text(this.textForYAxisLabel.bind(this)),(a?e.transition():e).attr("x",this.xForY2AxisLabel.bind(this)).attr("dx",this.dxForY2AxisLabel.bind(this)).attr("dy",this.dyForY2AxisLabel.bind(this)).text(this.textForY2AxisLabel.bind(this))},f.prototype.getPadding=function(a,b,c,d){var e="number"==typeof a?a:a[b];return m(e)?"ratio"===a.unit?a[b]*d:this.convertPixelsToAxisPadding(e,d):c},f.prototype.convertPixelsToAxisPadding=function(a,b){var c=this.owner,d=c.config.axis_rotated?c.width:c.height;return b*(a/d)},f.prototype.generateTickValues=function(a,b,c){var d,e,f,g,h,i,j,k=a;if(b)if(d=n(b)?b():b,1===d)k=[a[0]];else if(2===d)k=[a[0],a[a.length-1]];else if(d>2){for(g=d-2,e=a[0],f=a[a.length-1],h=(f-e)/(g+1),k=[e],i=0;g>i;i++)j=+e+h*(i+1),k.push(c?new Date(j):j);k.push(f)}return c||(k=k.sort(function(a,b){return a-b})),k},f.prototype.generateTransitions=function(a){var b=this.owner,c=b.axes;return{axisX:a?c.x.transition().duration(a):c.x,axisY:a?c.y.transition().duration(a):c.y,axisY2:a?c.y2.transition().duration(a):c.y2,axisSubX:a?c.subx.transition().duration(a):c.subx}},f.prototype.redraw=function(a,b){var c=this.owner;c.axes.x.style("opacity",b?0:1),c.axes.y.style("opacity",b?0:1),c.axes.y2.style("opacity",b?0:1),c.axes.subx.style("opacity",b?0:1),a.axisX.call(c.xAxis),a.axisY.call(c.yAxis),a.axisY2.call(c.y2Axis),a.axisSubX.call(c.subXAxis)},i.getClipPath=function(b){var c=a.navigator.appVersion.toLowerCase().indexOf("msie 9.")>=0;return"url("+(c?"":document.URL.split("#")[0])+"#"+b+")"},i.appendClip=function(a,b){return a.append("clipPath").attr("id",b).append("rect")},i.getAxisClipX=function(a){var b=Math.max(30,this.margin.left);return a?-(1+b):-(b-1)},i.getAxisClipY=function(a){return a?-20:-this.margin.top},i.getXAxisClipX=function(){var a=this;return a.getAxisClipX(!a.config.axis_rotated)},i.getXAxisClipY=function(){var a=this;return a.getAxisClipY(!a.config.axis_rotated)},i.getYAxisClipX=function(){var a=this;return a.config.axis_y_inner?-1:a.getAxisClipX(a.config.axis_rotated)},i.getYAxisClipY=function(){var a=this;return a.getAxisClipY(a.config.axis_rotated)},i.getAxisClipWidth=function(a){var b=this,c=Math.max(30,b.margin.left),d=Math.max(30,b.margin.right);return a?b.width+2+c+d:b.margin.left+20},i.getAxisClipHeight=function(a){return(a?this.margin.bottom:this.margin.top+this.height)+20},i.getXAxisClipWidth=function(){var a=this;return a.getAxisClipWidth(!a.config.axis_rotated)},i.getXAxisClipHeight=function(){var a=this;return a.getAxisClipHeight(!a.config.axis_rotated)},i.getYAxisClipWidth=function(){var a=this;return a.getAxisClipWidth(a.config.axis_rotated)+(a.config.axis_y_inner?20:0)},i.getYAxisClipHeight=function(){var a=this;return a.getAxisClipHeight(a.config.axis_rotated)},i.initPie=function(){var a=this,b=a.d3,c=a.config;a.pie=b.layout.pie().value(function(a){return a.values.reduce(function(a,b){return a+b.value},0)}),c.data_order||a.pie.sort(null)},i.updateRadius=function(){var a=this,b=a.config,c=b.gauge_width||b.donut_width;a.radiusExpanded=Math.min(a.arcWidth,a.arcHeight)/2,a.radius=.95*a.radiusExpanded,a.innerRadiusRatio=c?(a.radius-c)/a.radius:.6,a.innerRadius=a.hasType("donut")||a.hasType("gauge")?a.radius*a.innerRadiusRatio:0},i.updateArc=function(){var a=this;a.svgArc=a.getSvgArc(),a.svgArcExpanded=a.getSvgArcExpanded(),a.svgArcExpandedSub=a.getSvgArcExpanded(.98)},i.updateAngle=function(a){var b,c,d,e,f=this,g=f.config,h=!1,i=0;return g?(f.pie(f.filterTargetsToShow(f.data.targets)).forEach(function(b){h||b.data.id!==a.data.id||(h=!0,a=b,a.index=i),i++}),isNaN(a.startAngle)&&(a.startAngle=0),isNaN(a.endAngle)&&(a.endAngle=a.startAngle),f.isGaugeType(a.data)&&(b=g.gauge_min,c=g.gauge_max,d=Math.PI*(g.gauge_fullCircle?2:1)/(c-b),e=a.value<b?0:a.value<c?a.value-b:c-b,a.startAngle=g.gauge_startingAngle,a.endAngle=a.startAngle+d*e),h?a:null):null},i.getSvgArc=function(){var a=this,b=a.d3.svg.arc().outerRadius(a.radius).innerRadius(a.innerRadius),c=function(c,d){var e;return d?b(c):(e=a.updateAngle(c),e?b(e):"M 0 0")};return c.centroid=b.centroid,c},i.getSvgArcExpanded=function(a){var b=this,c=b.d3.svg.arc().outerRadius(b.radiusExpanded*(a?a:1)).innerRadius(b.innerRadius);return function(a){var d=b.updateAngle(a);return d?c(d):"M 0 0"}},i.getArc=function(a,b,c){return c||this.isArcType(a.data)?this.svgArc(a,b):"M 0 0"},i.transformForArcLabel=function(a){var b,c,d,e,f,g=this,h=g.config,i=g.updateAngle(a),j="";return i&&!g.hasType("gauge")&&(b=this.svgArc.centroid(i),c=isNaN(b[0])?0:b[0],d=isNaN(b[1])?0:b[1],e=Math.sqrt(c*c+d*d),f=g.hasType("donut")&&h.donut_label_ratio?n(h.donut_label_ratio)?h.donut_label_ratio(a,g.radius,e):h.donut_label_ratio:g.hasType("pie")&&h.pie_label_ratio?n(h.pie_label_ratio)?h.pie_label_ratio(a,g.radius,e):h.pie_label_ratio:g.radius&&e?(36/g.radius>.375?1.175-36/g.radius:.8)*g.radius/e:0,j="translate("+c*f+","+d*f+")"),j},i.getArcRatio=function(a){var b=this,c=b.config,d=Math.PI*(b.hasType("gauge")&&!c.gauge_fullCircle?1:2);return a?(a.endAngle-a.startAngle)/d:null},i.convertToArcData=function(a){return this.addName({id:a.data.id,value:a.value,ratio:this.getArcRatio(a),index:a.index})},i.textForArcLabel=function(a){var b,c,d,e,f,g=this;return g.shouldShowArcLabel()?(b=g.updateAngle(a),c=b?b.value:null,d=g.getArcRatio(b),e=a.data.id,g.hasType("gauge")||g.meetsArcLabelThreshold(d)?(f=g.getArcLabelFormat(),f?f(c,d,e):g.defaultArcValueFormat(c,d)):""):""},i.expandArc=function(b){var c,d=this;return d.transiting?void(c=a.setInterval(function(){d.transiting||(a.clearInterval(c),d.legend.selectAll(".c3-legend-item-focused").size()>0&&d.expandArc(b))},10)):(b=d.mapToTargetIds(b),void d.svg.selectAll(d.selectorTargets(b,"."+l.chartArc)).each(function(a){d.shouldExpand(a.data.id)&&d.d3.select(this).selectAll("path").transition().duration(d.expandDuration(a.data.id)).attr("d",d.svgArcExpanded).transition().duration(2*d.expandDuration(a.data.id)).attr("d",d.svgArcExpandedSub).each(function(a){d.isDonutType(a.data)})}))},i.unexpandArc=function(a){var b=this;b.transiting||(a=b.mapToTargetIds(a),b.svg.selectAll(b.selectorTargets(a,"."+l.chartArc)).selectAll("path").transition().duration(function(a){return b.expandDuration(a.data.id)}).attr("d",b.svgArc),b.svg.selectAll("."+l.arc).style("opacity",1))},i.expandDuration=function(a){var b=this,c=b.config;return b.isDonutType(a)?c.donut_expand_duration:b.isGaugeType(a)?c.gauge_expand_duration:b.isPieType(a)?c.pie_expand_duration:50},i.shouldExpand=function(a){var b=this,c=b.config;return b.isDonutType(a)&&c.donut_expand||b.isGaugeType(a)&&c.gauge_expand||b.isPieType(a)&&c.pie_expand},i.shouldShowArcLabel=function(){var a=this,b=a.config,c=!0;return a.hasType("donut")?c=b.donut_label_show:a.hasType("pie")&&(c=b.pie_label_show),c},i.meetsArcLabelThreshold=function(a){var b=this,c=b.config,d=b.hasType("donut")?c.donut_label_threshold:c.pie_label_threshold;return a>=d},i.getArcLabelFormat=function(){var a=this,b=a.config,c=b.pie_label_format;return a.hasType("gauge")?c=b.gauge_label_format:a.hasType("donut")&&(c=b.donut_label_format),c},i.getArcTitle=function(){var a=this;return a.hasType("donut")?a.config.donut_title:""},i.updateTargetsForArc=function(a){var b,c,d=this,e=d.main,f=d.classChartArc.bind(d),g=d.classArcs.bind(d),h=d.classFocus.bind(d);b=e.select("."+l.chartArcs).selectAll("."+l.chartArc).data(d.pie(a)).attr("class",function(a){return f(a)+h(a.data)}),c=b.enter().append("g").attr("class",f),c.append("g").attr("class",g),c.append("text").attr("dy",d.hasType("gauge")?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none")},i.initArc=function(){var a=this;a.arcs=a.main.select("."+l.chart).append("g").attr("class",l.chartArcs).attr("transform",a.getTranslate("arc")),a.arcs.append("text").attr("class",l.chartArcsTitle).style("text-anchor","middle").text(a.getArcTitle())},i.redrawArc=function(a,b,c){var d,e=this,f=e.d3,g=e.config,h=e.main;d=h.selectAll("."+l.arcs).selectAll("."+l.arc).data(e.arcData.bind(e)),d.enter().append("path").attr("class",e.classArc.bind(e)).style("fill",function(a){return e.color(a.data)}).style("cursor",function(a){return g.interaction_enabled&&g.data_selection_isselectable(a)?"pointer":null}).style("opacity",0).each(function(a){e.isGaugeType(a.data)&&(a.startAngle=a.endAngle=g.gauge_startingAngle),this._current=a}),d.attr("transform",function(a){return!e.isGaugeType(a.data)&&c?"scale(0)":""}).style("opacity",function(a){return a===this._current?0:1}).on("mouseover",g.interaction_enabled?function(a){var b,c;e.transiting||(b=e.updateAngle(a),b&&(c=e.convertToArcData(b),e.expandArc(b.data.id),e.api.focus(b.data.id),e.toggleFocusLegend(b.data.id,!0),e.config.data_onmouseover(c,this)))}:null).on("mousemove",g.interaction_enabled?function(a){var b,c,d=e.updateAngle(a);d&&(b=e.convertToArcData(d),c=[b],e.showTooltip(c,this))}:null).on("mouseout",g.interaction_enabled?function(a){var b,c;e.transiting||(b=e.updateAngle(a),b&&(c=e.convertToArcData(b),e.unexpandArc(b.data.id),e.api.revert(),e.revertLegend(),e.hideTooltip(),e.config.data_onmouseout(c,this)))}:null).on("click",g.interaction_enabled?function(a,b){var c,d=e.updateAngle(a);d&&(c=e.convertToArcData(d),e.toggleShape&&e.toggleShape(this,c,b),e.config.data_onclick.call(e.api,c,this))}:null).each(function(){e.transiting=!0}).transition().duration(a).attrTween("d",function(a){var b,c=e.updateAngle(a);return c?(isNaN(this._current.startAngle)&&(this._current.startAngle=0),isNaN(this._current.endAngle)&&(this._current.endAngle=this._current.startAngle),b=f.interpolate(this._current,c),this._current=b(0),function(c){var d=b(c);return d.data=a.data,e.getArc(d,!0)}):function(){return"M 0 0"}}).attr("transform",c?"scale(1)":"").style("fill",function(a){return e.levelColor?e.levelColor(a.data.values[0].value):e.color(a.data.id)}).style("opacity",1).call(e.endall,function(){e.transiting=!1}),d.exit().transition().duration(b).style("opacity",0).remove(),h.selectAll("."+l.chartArc).select("text").style("opacity",0).attr("class",function(a){return e.isGaugeType(a.data)?l.gaugeValue:""}).text(e.textForArcLabel.bind(e)).attr("transform",e.transformForArcLabel.bind(e)).style("font-size",function(a){return e.isGaugeType(a.data)?Math.round(e.radius/5)+"px":""}).transition().duration(a).style("opacity",function(a){return e.isTargetToShow(a.data.id)&&e.isArcType(a.data)?1:0}),h.select("."+l.chartArcsTitle).style("opacity",e.hasType("donut")||e.hasType("gauge")?1:0),e.hasType("gauge")&&(e.arcs.select("."+l.chartArcsBackground).attr("d",function(){var a={data:[{value:g.gauge_max}],startAngle:g.gauge_startingAngle,endAngle:-1*g.gauge_startingAngle};return e.getArc(a,!0,!0)}),e.arcs.select("."+l.chartArcsGaugeUnit).attr("dy",".75em").text(g.gauge_label_show?g.gauge_units:""),e.arcs.select("."+l.chartArcsGaugeMin).attr("dx",-1*(e.innerRadius+(e.radius-e.innerRadius)/(g.gauge_fullCircle?1:2))+"px").attr("dy","1.2em").text(g.gauge_label_show?g.gauge_min:""),e.arcs.select("."+l.chartArcsGaugeMax).attr("dx",e.innerRadius+(e.radius-e.innerRadius)/(g.gauge_fullCircle?1:2)+"px").attr("dy","1.2em").text(g.gauge_label_show?g.gauge_max:""))},i.initGauge=function(){var a=this.arcs;this.hasType("gauge")&&(a.append("path").attr("class",l.chartArcsBackground),a.append("text").attr("class",l.chartArcsGaugeUnit).style("text-anchor","middle").style("pointer-events","none"),a.append("text").attr("class",l.chartArcsGaugeMin).style("text-anchor","middle").style("pointer-events","none"),a.append("text").attr("class",l.chartArcsGaugeMax).style("text-anchor","middle").style("pointer-events","none"))},i.getGaugeLabelHeight=function(){return this.config.gauge_label_show?20:0},i.initRegion=function(){var a=this;a.region=a.main.append("g").attr("clip-path",a.clipPath).attr("class",l.regions)},i.updateRegion=function(a){var b=this,c=b.config;b.region.style("visibility",b.hasArcType()?"hidden":"visible"),b.mainRegion=b.main.select("."+l.regions).selectAll("."+l.region).data(c.regions),b.mainRegion.enter().append("g").append("rect").style("fill-opacity",0),b.mainRegion.attr("class",b.classRegion.bind(b)),b.mainRegion.exit().transition().duration(a).style("opacity",0).remove()},i.redrawRegion=function(a){var b=this,c=b.mainRegion.selectAll("rect").each(function(){var a=b.d3.select(this.parentNode).datum();b.d3.select(this).datum(a)}),d=b.regionX.bind(b),e=b.regionY.bind(b),f=b.regionWidth.bind(b),g=b.regionHeight.bind(b);return[(a?c.transition():c).attr("x",d).attr("y",e).attr("width",f).attr("height",g).style("fill-opacity",function(a){return m(a.opacity)?a.opacity:.1})]},i.regionX=function(a){var b,c=this,d=c.config,e="y"===a.axis?c.y:c.y2;return b="y"===a.axis||"y2"===a.axis?d.axis_rotated&&"start"in a?e(a.start):0:d.axis_rotated?0:"start"in a?c.x(c.isTimeSeries()?c.parseDate(a.start):a.start):0},i.regionY=function(a){var b,c=this,d=c.config,e="y"===a.axis?c.y:c.y2;return b="y"===a.axis||"y2"===a.axis?d.axis_rotated?0:"end"in a?e(a.end):0:d.axis_rotated&&"start"in a?c.x(c.isTimeSeries()?c.parseDate(a.start):a.start):0},i.regionWidth=function(a){var b,c=this,d=c.config,e=c.regionX(a),f="y"===a.axis?c.y:c.y2;return b="y"===a.axis||"y2"===a.axis?d.axis_rotated&&"end"in a?f(a.end):c.width:d.axis_rotated?c.width:"end"in a?c.x(c.isTimeSeries()?c.parseDate(a.end):a.end):c.width,e>b?0:b-e},i.regionHeight=function(a){var b,c=this,d=c.config,e=this.regionY(a),f="y"===a.axis?c.y:c.y2;return b="y"===a.axis||"y2"===a.axis?d.axis_rotated?c.height:"start"in a?f(a.start):c.height:d.axis_rotated&&"end"in a?c.x(c.isTimeSeries()?c.parseDate(a.end):a.end):c.height,e>b?0:b-e},i.isRegionOnX=function(a){return!a.axis||"x"===a.axis},i.drag=function(a){var b,c,d,e,f,g,h,i,j=this,k=j.config,m=j.main,n=j.d3;j.hasArcType()||k.data_selection_enabled&&(k.zoom_enabled&&!j.zoom.altDomain||k.data_selection_multiple&&(b=j.dragStart[0],c=j.dragStart[1],d=a[0],e=a[1],f=Math.min(b,d),g=Math.max(b,d),h=k.data_selection_grouped?j.margin.top:Math.min(c,e),i=k.data_selection_grouped?j.height:Math.max(c,e),m.select("."+l.dragarea).attr("x",f).attr("y",h).attr("width",g-f).attr("height",i-h),m.selectAll("."+l.shapes).selectAll("."+l.shape).filter(function(a){return k.data_selection_isselectable(a)}).each(function(a,b){var c,d,e,k,m,o,p=n.select(this),q=p.classed(l.SELECTED),r=p.classed(l.INCLUDED),s=!1;if(p.classed(l.circle))c=1*p.attr("cx"),d=1*p.attr("cy"),m=j.togglePoint,s=c>f&&g>c&&d>h&&i>d;else{if(!p.classed(l.bar))return;o=z(this),c=o.x,d=o.y,e=o.width,k=o.height,m=j.togglePath,s=!(c>g||f>c+e||d>i||h>d+k)}s^r&&(p.classed(l.INCLUDED,!r),p.classed(l.SELECTED,!q),m.call(j,!q,p,a,b))})))},i.dragstart=function(a){var b=this,c=b.config;b.hasArcType()||c.data_selection_enabled&&(b.dragStart=a,b.main.select("."+l.chart).append("rect").attr("class",l.dragarea).style("opacity",.1),b.dragging=!0)},i.dragend=function(){var a=this,b=a.config;a.hasArcType()||b.data_selection_enabled&&(a.main.select("."+l.dragarea).transition().duration(100).style("opacity",0).remove(),a.main.selectAll("."+l.shape).classed(l.INCLUDED,!1),a.dragging=!1)},i.selectPoint=function(a,b,c){var d=this,e=d.config,f=(e.axis_rotated?d.circleY:d.circleX).bind(d),g=(e.axis_rotated?d.circleX:d.circleY).bind(d),h=d.pointSelectR.bind(d);e.data_onselected.call(d.api,b,a.node()),d.main.select("."+l.selectedCircles+d.getTargetSelectorSuffix(b.id)).selectAll("."+l.selectedCircle+"-"+c).data([b]).enter().append("circle").attr("class",function(){return d.generateClass(l.selectedCircle,c)}).attr("cx",f).attr("cy",g).attr("stroke",function(){return d.color(b)}).attr("r",function(a){return 1.4*d.pointSelectR(a)}).transition().duration(100).attr("r",h)},i.unselectPoint=function(a,b,c){var d=this;d.config.data_onunselected.call(d.api,b,a.node()),d.main.select("."+l.selectedCircles+d.getTargetSelectorSuffix(b.id)).selectAll("."+l.selectedCircle+"-"+c).transition().duration(100).attr("r",0).remove()},i.togglePoint=function(a,b,c,d){a?this.selectPoint(b,c,d):this.unselectPoint(b,c,d)},i.selectPath=function(a,b){var c=this;c.config.data_onselected.call(c,b,a.node()),c.config.interaction_brighten&&a.transition().duration(100).style("fill",function(){return c.d3.rgb(c.color(b)).brighter(.75)})},i.unselectPath=function(a,b){var c=this;c.config.data_onunselected.call(c,b,a.node()),c.config.interaction_brighten&&a.transition().duration(100).style("fill",function(){return c.color(b)})},i.togglePath=function(a,b,c,d){a?this.selectPath(b,c,d):this.unselectPath(b,c,d)},i.getToggle=function(a,b){var c,d=this;return"circle"===a.nodeName?c=d.isStepType(b)?function(){}:d.togglePoint:"path"===a.nodeName&&(c=d.togglePath),c},i.toggleShape=function(a,b,c){var d=this,e=d.d3,f=d.config,g=e.select(a),h=g.classed(l.SELECTED),i=d.getToggle(a,b).bind(d);f.data_selection_enabled&&f.data_selection_isselectable(b)&&(f.data_selection_multiple||d.main.selectAll("."+l.shapes+(f.data_selection_grouped?d.getTargetSelectorSuffix(b.id):"")).selectAll("."+l.shape).each(function(a,b){var c=e.select(this);c.classed(l.SELECTED)&&i(!1,c.classed(l.SELECTED,!1),a,b)}),g.classed(l.SELECTED,!h),i(!h,g,b,c))},i.initBrush=function(){var a=this,b=a.d3;a.brush=b.svg.brush().on("brush",function(){a.redrawForBrush()}),a.brush.update=function(){return a.context&&a.context.select("."+l.brush).call(this),this},a.brush.scale=function(b){return a.config.axis_rotated?this.y(b):this.x(b)}},i.initSubchart=function(){var a=this,b=a.config,c=a.context=a.svg.append("g").attr("transform",a.getTranslate("context")),d=b.subchart_show?"visible":"hidden";c.style("visibility",d),c.append("g").attr("clip-path",a.clipPathForSubchart).attr("class",l.chart),c.select("."+l.chart).append("g").attr("class",l.chartBars),c.select("."+l.chart).append("g").attr("class",l.chartLines),c.append("g").attr("clip-path",a.clipPath).attr("class",l.brush).call(a.brush),a.axes.subx=c.append("g").attr("class",l.axisX).attr("transform",a.getTranslate("subx")).attr("clip-path",b.axis_rotated?"":a.clipPathForXAxis).style("visibility",b.subchart_axis_x_show?d:"hidden")},i.updateTargetsForSubchart=function(a){var b,c,d,e,f=this,g=f.context,h=f.config,i=f.classChartBar.bind(f),j=f.classBars.bind(f),k=f.classChartLine.bind(f),m=f.classLines.bind(f),n=f.classAreas.bind(f);h.subchart_show&&(e=g.select("."+l.chartBars).selectAll("."+l.chartBar).data(a).attr("class",i),d=e.enter().append("g").style("opacity",0).attr("class",i),d.append("g").attr("class",j),c=g.select("."+l.chartLines).selectAll("."+l.chartLine).data(a).attr("class",k),b=c.enter().append("g").style("opacity",0).attr("class",k),b.append("g").attr("class",m),b.append("g").attr("class",n),g.selectAll("."+l.brush+" rect").attr(h.axis_rotated?"width":"height",h.axis_rotated?f.width2:f.height2))},i.updateBarForSubchart=function(a){var b=this;b.contextBar=b.context.selectAll("."+l.bars).selectAll("."+l.bar).data(b.barData.bind(b)),b.contextBar.enter().append("path").attr("class",b.classBar.bind(b)).style("stroke","none").style("fill",b.color),b.contextBar.style("opacity",b.initialOpacity.bind(b)),b.contextBar.exit().transition().duration(a).style("opacity",0).remove()},i.redrawBarForSubchart=function(a,b,c){(b?this.contextBar.transition(Math.random().toString()).duration(c):this.contextBar).attr("d",a).style("opacity",1)},i.updateLineForSubchart=function(a){var b=this;b.contextLine=b.context.selectAll("."+l.lines).selectAll("."+l.line).data(b.lineData.bind(b)),b.contextLine.enter().append("path").attr("class",b.classLine.bind(b)).style("stroke",b.color),b.contextLine.style("opacity",b.initialOpacity.bind(b)),b.contextLine.exit().transition().duration(a).style("opacity",0).remove()},i.redrawLineForSubchart=function(a,b,c){(b?this.contextLine.transition(Math.random().toString()).duration(c):this.contextLine).attr("d",a).style("opacity",1)},i.updateAreaForSubchart=function(a){var b=this,c=b.d3;b.contextArea=b.context.selectAll("."+l.areas).selectAll("."+l.area).data(b.lineData.bind(b)),b.contextArea.enter().append("path").attr("class",b.classArea.bind(b)).style("fill",b.color).style("opacity",function(){return b.orgAreaOpacity=+c.select(this).style("opacity"),0}),b.contextArea.style("opacity",0),b.contextArea.exit().transition().duration(a).style("opacity",0).remove()},i.redrawAreaForSubchart=function(a,b,c){(b?this.contextArea.transition(Math.random().toString()).duration(c):this.contextArea).attr("d",a).style("fill",this.color).style("opacity",this.orgAreaOpacity)},i.redrawSubchart=function(a,b,c,d,e,f,g){var h,i,j,k=this,l=k.d3,m=k.config;k.context.style("visibility",m.subchart_show?"visible":"hidden"),m.subchart_show&&(l.event&&"zoom"===l.event.type&&k.brush.extent(k.x.orgDomain()).update(),a&&(k.brush.empty()||k.brush.extent(k.x.orgDomain()).update(),h=k.generateDrawArea(e,!0),i=k.generateDrawBar(f,!0),j=k.generateDrawLine(g,!0),k.updateBarForSubchart(c),k.updateLineForSubchart(c),k.updateAreaForSubchart(c),k.redrawBarForSubchart(i,c,c),k.redrawLineForSubchart(j,c,c),k.redrawAreaForSubchart(h,c,c)))},i.redrawForBrush=function(){var a=this,b=a.x;a.redraw({withTransition:!1,withY:a.config.zoom_rescale,withSubchart:!1,withUpdateXDomain:!0,withDimension:!1}),a.config.subchart_onbrush.call(a.api,b.orgDomain())},i.transformContext=function(a,b){var c,d=this;b&&b.axisSubX?c=b.axisSubX:(c=d.context.select("."+l.axisX),a&&(c=c.transition())),d.context.attr("transform",d.getTranslate("context")),c.attr("transform",d.getTranslate("subx"))},i.getDefaultExtent=function(){var a=this,b=a.config,c=n(b.axis_x_extent)?b.axis_x_extent(a.getXDomain(a.data.targets)):b.axis_x_extent;return a.isTimeSeries()&&(c=[a.parseDate(c[0]),a.parseDate(c[1])]),c},i.initZoom=function(){var a,b=this,c=b.d3,d=b.config;b.zoom=c.behavior.zoom().on("zoomstart",function(){a=c.event.sourceEvent,b.zoom.altDomain=c.event.sourceEvent.altKey?b.x.orgDomain():null,d.zoom_onzoomstart.call(b.api,c.event.sourceEvent)}).on("zoom",function(){b.redrawForZoom.call(b)}).on("zoomend",function(){var e=c.event.sourceEvent;e&&a.clientX===e.clientX&&a.clientY===e.clientY||(b.redrawEventRect(),b.updateZoom(),d.zoom_onzoomend.call(b.api,b.x.orgDomain()))}),b.zoom.scale=function(a){return d.axis_rotated?this.y(a):this.x(a)},b.zoom.orgScaleExtent=function(){var a=d.zoom_extent?d.zoom_extent:[1,10];return[a[0],Math.max(b.getMaxDataCount()/a[1],a[1])]},b.zoom.updateScaleExtent=function(){var a=t(b.x.orgDomain())/t(b.getZoomDomain()),c=this.orgScaleExtent();return this.scaleExtent([c[0]*a,c[1]*a]),this}},i.getZoomDomain=function(){var a=this,b=a.config,c=a.d3,d=c.min([a.orgXDomain[0],b.zoom_x_min]),e=c.max([a.orgXDomain[1],b.zoom_x_max]);return[d,e]},i.updateZoom=function(){var a=this,b=a.config.zoom_enabled?a.zoom:function(){};a.main.select("."+l.zoomRect).call(b).on("dblclick.zoom",null),a.main.selectAll("."+l.eventRect).call(b).on("dblclick.zoom",null)},i.redrawForZoom=function(){var a=this,b=a.d3,c=a.config,d=a.zoom,e=a.x;if(c.zoom_enabled&&0!==a.filterTargetsToShow(a.data.targets).length){if("mousemove"===b.event.sourceEvent.type&&d.altDomain)return e.domain(d.altDomain),void d.scale(e).updateScaleExtent();a.isCategorized()&&e.orgDomain()[0]===a.orgXDomain[0]&&e.domain([a.orgXDomain[0]-1e-10,e.orgDomain()[1]]),a.redraw({withTransition:!1,withY:c.zoom_rescale,withSubchart:!1,withEventRect:!1,withDimension:!1}),"mousemove"===b.event.sourceEvent.type&&(a.cancelClick=!0),c.zoom_onzoom.call(a.api,e.orgDomain())}},i.generateColor=function(){var a=this,b=a.config,c=a.d3,d=b.data_colors,e=v(b.color_pattern)?b.color_pattern:c.scale.category10().range(),f=b.data_color,g=[];return function(a){var b,c=a.id||a.data&&a.data.id||a;return d[c]instanceof Function?b=d[c](a):d[c]?b=d[c]:(g.indexOf(c)<0&&g.push(c),b=e[g.indexOf(c)%e.length],d[c]=b),f instanceof Function?f(b,a):b}},i.generateLevelColor=function(){var a=this,b=a.config,c=b.color_pattern,d=b.color_threshold,e="value"===d.unit,f=d.values&&d.values.length?d.values:[],g=d.max||100;return v(b.color_threshold)?function(a){var b,d,h=c[c.length-1];for(b=0;b<f.length;b++)if(d=e?a:100*a/g,d<f[b]){h=c[b];break}return h}:null},i.getYFormat=function(a){var b=this,c=a&&!b.hasType("gauge")?b.defaultArcValueFormat:b.yFormat,d=a&&!b.hasType("gauge")?b.defaultArcValueFormat:b.y2Format;return function(a,e,f){var g="y2"===b.axis.getId(f)?d:c;return g.call(b,a,e)}},i.yFormat=function(a){var b=this,c=b.config,d=c.axis_y_tick_format?c.axis_y_tick_format:b.defaultValueFormat;return d(a)},i.y2Format=function(a){var b=this,c=b.config,d=c.axis_y2_tick_format?c.axis_y2_tick_format:b.defaultValueFormat;return d(a)},i.defaultValueFormat=function(a){return m(a)?+a:""},i.defaultArcValueFormat=function(a,b){return(100*b).toFixed(1)+"%"},i.dataLabelFormat=function(a){var b,c=this,d=c.config.data_labels,e=function(a){return m(a)?+a:""};return b="function"==typeof d.format?d.format:"object"==typeof d.format?d.format[a]?d.format[a]===!0?e:d.format[a]:function(){return""}:e},i.hasCaches=function(a){for(var b=0;b<a.length;b++)if(!(a[b]in this.cache))return!1;return!0},i.addCache=function(a,b){this.cache[a]=this.cloneTarget(b)},i.getCaches=function(a){var b,c=[];for(b=0;b<a.length;b++)a[b]in this.cache&&c.push(this.cloneTarget(this.cache[a[b]]));return c};var l=i.CLASS={target:"c3-target",chart:"c3-chart",chartLine:"c3-chart-line",chartLines:"c3-chart-lines",chartBar:"c3-chart-bar",chartBars:"c3-chart-bars",chartText:"c3-chart-text",chartTexts:"c3-chart-texts",chartArc:"c3-chart-arc",chartArcs:"c3-chart-arcs",chartArcsTitle:"c3-chart-arcs-title",chartArcsBackground:"c3-chart-arcs-background",chartArcsGaugeUnit:"c3-chart-arcs-gauge-unit",chartArcsGaugeMax:"c3-chart-arcs-gauge-max",chartArcsGaugeMin:"c3-chart-arcs-gauge-min",selectedCircle:"c3-selected-circle",selectedCircles:"c3-selected-circles",eventRect:"c3-event-rect",eventRects:"c3-event-rects",eventRectsSingle:"c3-event-rects-single",eventRectsMultiple:"c3-event-rects-multiple",zoomRect:"c3-zoom-rect",brush:"c3-brush",focused:"c3-focused",defocused:"c3-defocused",region:"c3-region",regions:"c3-regions",title:"c3-title",tooltipContainer:"c3-tooltip-container",tooltip:"c3-tooltip",tooltipName:"c3-tooltip-name",shape:"c3-shape",shapes:"c3-shapes",line:"c3-line",lines:"c3-lines",bar:"c3-bar",bars:"c3-bars",circle:"c3-circle",circles:"c3-circles",arc:"c3-arc",arcs:"c3-arcs",area:"c3-area",areas:"c3-areas",empty:"c3-empty",text:"c3-text",texts:"c3-texts",gaugeValue:"c3-gauge-value",grid:"c3-grid",gridLines:"c3-grid-lines",xgrid:"c3-xgrid",xgrids:"c3-xgrids",xgridLine:"c3-xgrid-line",xgridLines:"c3-xgrid-lines",xgridFocus:"c3-xgrid-focus",ygrid:"c3-ygrid",ygrids:"c3-ygrids",ygridLine:"c3-ygrid-line",ygridLines:"c3-ygrid-lines",axis:"c3-axis",axisX:"c3-axis-x",axisXLabel:"c3-axis-x-label",axisY:"c3-axis-y",axisYLabel:"c3-axis-y-label",axisY2:"c3-axis-y2",axisY2Label:"c3-axis-y2-label",legendBackground:"c3-legend-background",legendItem:"c3-legend-item",legendItemEvent:"c3-legend-item-event",legendItemTile:"c3-legend-item-tile",legendItemHidden:"c3-legend-item-hidden",legendItemFocused:"c3-legend-item-focused",dragarea:"c3-dragarea",EXPANDED:"_expanded_",SELECTED:"_selected_",INCLUDED:"_included_"};i.generateClass=function(a,b){return" "+a+" "+a+this.getTargetSelectorSuffix(b)},i.classText=function(a){return this.generateClass(l.text,a.index)},i.classTexts=function(a){return this.generateClass(l.texts,a.id)},i.classShape=function(a){return this.generateClass(l.shape,a.index)},i.classShapes=function(a){return this.generateClass(l.shapes,a.id)},i.classLine=function(a){return this.classShape(a)+this.generateClass(l.line,a.id)},i.classLines=function(a){return this.classShapes(a)+this.generateClass(l.lines,a.id)},i.classCircle=function(a){return this.classShape(a)+this.generateClass(l.circle,a.index)},i.classCircles=function(a){return this.classShapes(a)+this.generateClass(l.circles,a.id)},i.classBar=function(a){return this.classShape(a)+this.generateClass(l.bar,a.index)},i.classBars=function(a){return this.classShapes(a)+this.generateClass(l.bars,a.id)},i.classArc=function(a){return this.classShape(a.data)+this.generateClass(l.arc,a.data.id)},i.classArcs=function(a){return this.classShapes(a.data)+this.generateClass(l.arcs,a.data.id)},i.classArea=function(a){return this.classShape(a)+this.generateClass(l.area,a.id)},i.classAreas=function(a){return this.classShapes(a)+this.generateClass(l.areas,a.id)},i.classRegion=function(a,b){return this.generateClass(l.region,b)+" "+("class"in a?a["class"]:"")},i.classEvent=function(a){return this.generateClass(l.eventRect,a.index)},i.classTarget=function(a){var b=this,c=b.config.data_classes[a],d="";return c&&(d=" "+l.target+"-"+c),b.generateClass(l.target,a)+d},i.classFocus=function(a){return this.classFocused(a)+this.classDefocused(a)},i.classFocused=function(a){return" "+(this.focusedTargetIds.indexOf(a.id)>=0?l.focused:"")},i.classDefocused=function(a){return" "+(this.defocusedTargetIds.indexOf(a.id)>=0?l.defocused:"")},i.classChartText=function(a){return l.chartText+this.classTarget(a.id)},i.classChartLine=function(a){return l.chartLine+this.classTarget(a.id)},i.classChartBar=function(a){return l.chartBar+this.classTarget(a.id)},i.classChartArc=function(a){return l.chartArc+this.classTarget(a.data.id)},i.getTargetSelectorSuffix=function(a){return a||0===a?("-"+a).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g,"-"):""},i.selectorTarget=function(a,b){return(b||"")+"."+l.target+this.getTargetSelectorSuffix(a)},i.selectorTargets=function(a,b){var c=this;return a=a||[],a.length?a.map(function(a){return c.selectorTarget(a,b)}):null},i.selectorLegend=function(a){return"."+l.legendItem+this.getTargetSelectorSuffix(a)},i.selectorLegends=function(a){var b=this;return a&&a.length?a.map(function(a){return b.selectorLegend(a)}):null};var m=i.isValue=function(a){return a||0===a},n=i.isFunction=function(a){return"function"==typeof a},o=i.isString=function(a){return"string"==typeof a},p=i.isUndefined=function(a){return"undefined"==typeof a},q=i.isDefined=function(a){return"undefined"!=typeof a},r=i.ceil10=function(a){return 10*Math.ceil(a/10)},s=i.asHalfPixel=function(a){return Math.ceil(a)+.5},t=i.diffDomain=function(a){return a[1]-a[0]},u=i.isEmpty=function(a){return"undefined"==typeof a||null===a||o(a)&&0===a.length||"object"==typeof a&&0===Object.keys(a).length},v=i.notEmpty=function(a){return!i.isEmpty(a)},w=i.getOption=function(a,b,c){return q(a[b])?a[b]:c},x=i.hasValue=function(a,b){var c=!1;return Object.keys(a).forEach(function(d){a[d]===b&&(c=!0)}),c},y=i.sanitise=function(a){return"string"==typeof a?a.replace(/</g,"&lt;").replace(/>/g,"&gt;"):a},z=i.getPathBox=function(a){var b=a.getBoundingClientRect(),c=[a.pathSegList.getItem(0),a.pathSegList.getItem(1)],d=c[0].x,e=Math.min(c[0].y,c[1].y);return{x:d,y:e,width:b.width,height:b.height}};h.focus=function(a){var b,c=this.internal;a=c.mapToTargetIds(a),b=c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow,c))),this.revert(),this.defocus(),b.classed(l.focused,!0).classed(l.defocused,!1),
2315 2315 c.hasArcType()&&c.expandArc(a),c.toggleFocusLegend(a,!0),c.focusedTargetIds=a,c.defocusedTargetIds=c.defocusedTargetIds.filter(function(b){return a.indexOf(b)<0})},h.defocus=function(a){var b,c=this.internal;a=c.mapToTargetIds(a),b=c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow,c))),b.classed(l.focused,!1).classed(l.defocused,!0),c.hasArcType()&&c.unexpandArc(a),c.toggleFocusLegend(a,!1),c.focusedTargetIds=c.focusedTargetIds.filter(function(b){return a.indexOf(b)<0}),c.defocusedTargetIds=a},h.revert=function(a){var b,c=this.internal;a=c.mapToTargetIds(a),b=c.svg.selectAll(c.selectorTargets(a)),b.classed(l.focused,!1).classed(l.defocused,!1),c.hasArcType()&&c.unexpandArc(a),c.config.legend_show&&(c.showLegend(a.filter(c.isLegendToShow.bind(c))),c.legend.selectAll(c.selectorLegends(a)).filter(function(){return c.d3.select(this).classed(l.legendItemFocused)}).classed(l.legendItemFocused,!1)),c.focusedTargetIds=[],c.defocusedTargetIds=[]},h.show=function(a,b){var c,d=this.internal;a=d.mapToTargetIds(a),b=b||{},d.removeHiddenTargetIds(a),c=d.svg.selectAll(d.selectorTargets(a)),c.transition().style("opacity",1,"important").call(d.endall,function(){c.style("opacity",null).style("opacity",1)}),b.withLegend&&d.showLegend(a),d.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},h.hide=function(a,b){var c,d=this.internal;a=d.mapToTargetIds(a),b=b||{},d.addHiddenTargetIds(a),c=d.svg.selectAll(d.selectorTargets(a)),c.transition().style("opacity",0,"important").call(d.endall,function(){c.style("opacity",null).style("opacity",0)}),b.withLegend&&d.hideLegend(a),d.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},h.toggle=function(a,b){var c=this,d=this.internal;d.mapToTargetIds(a).forEach(function(a){d.isTargetToShow(a)?c.hide(a,b):c.show(a,b)})},h.zoom=function(a){var b=this.internal;return a&&(b.isTimeSeries()&&(a=a.map(function(a){return b.parseDate(a)})),b.brush.extent(a),b.redraw({withUpdateXDomain:!0,withY:b.config.zoom_rescale}),b.config.zoom_onzoom.call(this,b.x.orgDomain())),b.brush.extent()},h.zoom.enable=function(a){var b=this.internal;b.config.zoom_enabled=a,b.updateAndRedraw()},h.unzoom=function(){var a=this.internal;a.brush.clear().update(),a.redraw({withUpdateXDomain:!0})},h.zoom.max=function(a){var b=this.internal,c=b.config,d=b.d3;return 0===a||a?void(c.zoom_x_max=d.max([b.orgXDomain[1],a])):c.zoom_x_max},h.zoom.min=function(a){var b=this.internal,c=b.config,d=b.d3;return 0===a||a?void(c.zoom_x_min=d.min([b.orgXDomain[0],a])):c.zoom_x_min},h.zoom.range=function(a){return arguments.length?(q(a.max)&&this.domain.max(a.max),void(q(a.min)&&this.domain.min(a.min))):{max:this.domain.max(),min:this.domain.min()}},h.load=function(a){var b=this.internal,c=b.config;return a.xs&&b.addXs(a.xs),"names"in a&&h.data.names.bind(this)(a.names),"classes"in a&&Object.keys(a.classes).forEach(function(b){c.data_classes[b]=a.classes[b]}),"categories"in a&&b.isCategorized()&&(c.axis_x_categories=a.categories),"axes"in a&&Object.keys(a.axes).forEach(function(b){c.data_axes[b]=a.axes[b]}),"colors"in a&&Object.keys(a.colors).forEach(function(b){c.data_colors[b]=a.colors[b]}),"cacheIds"in a&&b.hasCaches(a.cacheIds)?void b.load(b.getCaches(a.cacheIds),a.done):void("unload"in a?b.unload(b.mapToTargetIds("boolean"==typeof a.unload&&a.unload?null:a.unload),function(){b.loadFromArgs(a)}):b.loadFromArgs(a))},h.unload=function(a){var b=this.internal;a=a||{},a instanceof Array?a={ids:a}:"string"==typeof a&&(a={ids:[a]}),b.unload(b.mapToTargetIds(a.ids),function(){b.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0}),a.done&&a.done()})},h.flow=function(a){var b,c,d,e,f,g,h,i,j=this.internal,k=[],l=j.getMaxDataCount(),n=0,o=0;if(a.json)c=j.convertJsonToData(a.json,a.keys);else if(a.rows)c=j.convertRowsToData(a.rows);else{if(!a.columns)return;c=j.convertColumnsToData(a.columns)}b=j.convertDataToTargets(c,!0),j.data.targets.forEach(function(a){var c,d,e=!1;for(c=0;c<b.length;c++)if(a.id===b[c].id){for(e=!0,a.values[a.values.length-1]&&(o=a.values[a.values.length-1].index+1),n=b[c].values.length,d=0;n>d;d++)b[c].values[d].index=o+d,j.isTimeSeries()||(b[c].values[d].x=o+d);a.values=a.values.concat(b[c].values),b.splice(c,1);break}e||k.push(a.id)}),j.data.targets.forEach(function(a){var b,c;for(b=0;b<k.length;b++)if(a.id===k[b])for(o=a.values[a.values.length-1].index+1,c=0;n>c;c++)a.values.push({id:a.id,index:o+c,x:j.isTimeSeries()?j.getOtherTargetX(o+c):o+c,value:null})}),j.data.targets.length&&b.forEach(function(a){var b,c=[];for(b=j.data.targets[0].values[0].index;o>b;b++)c.push({id:a.id,index:b,x:j.isTimeSeries()?j.getOtherTargetX(b):b,value:null});a.values.forEach(function(a){a.index+=o,j.isTimeSeries()||(a.x+=o)}),a.values=c.concat(a.values)}),j.data.targets=j.data.targets.concat(b),d=j.getMaxDataCount(),f=j.data.targets[0],g=f.values[0],q(a.to)?(n=0,i=j.isTimeSeries()?j.parseDate(a.to):a.to,f.values.forEach(function(a){a.x<i&&n++})):q(a.length)&&(n=a.length),l?1===l&&j.isTimeSeries()&&(h=(f.values[f.values.length-1].x-g.x)/2,e=[new Date(+g.x-h),new Date(+g.x+h)],j.updateXDomain(null,!0,!0,!1,e)):(h=j.isTimeSeries()?f.values.length>1?f.values[f.values.length-1].x-g.x:g.x-j.getXDomain(j.data.targets)[0]:1,e=[g.x-h,g.x],j.updateXDomain(null,!0,!0,!1,e)),j.updateTargets(j.data.targets),j.redraw({flow:{index:g.index,length:n,duration:m(a.duration)?a.duration:j.config.transition_duration,done:a.done,orgDataCount:l},withLegend:!0,withTransition:l>1,withTrimXDomain:!1,withUpdateXAxis:!0})},i.generateFlow=function(a){var b=this,c=b.config,d=b.d3;return function(){var e,f,g,h=a.targets,i=a.flow,j=a.drawBar,k=a.drawLine,m=a.drawArea,n=a.cx,o=a.cy,p=a.xv,q=a.xForText,r=a.yForText,s=a.duration,u=1,v=i.index,w=i.length,x=b.getValueOnIndex(b.data.targets[0].values,v),y=b.getValueOnIndex(b.data.targets[0].values,v+w),z=b.x.domain(),A=i.duration||s,B=i.done||function(){},C=b.generateWait(),D=b.xgrid||d.selectAll([]),E=b.xgridLines||d.selectAll([]),F=b.mainRegion||d.selectAll([]),G=b.mainText||d.selectAll([]),H=b.mainBar||d.selectAll([]),I=b.mainLine||d.selectAll([]),J=b.mainArea||d.selectAll([]),K=b.mainCircle||d.selectAll([]);b.flowing=!0,b.data.targets.forEach(function(a){a.values.splice(0,w)}),g=b.updateXDomain(h,!0,!0),b.updateXGrid&&b.updateXGrid(!0),i.orgDataCount?e=1===i.orgDataCount||(x&&x.x)===(y&&y.x)?b.x(z[0])-b.x(g[0]):b.isTimeSeries()?b.x(z[0])-b.x(g[0]):b.x(x.x)-b.x(y.x):1!==b.data.targets[0].values.length?e=b.x(z[0])-b.x(g[0]):b.isTimeSeries()?(x=b.getValueOnIndex(b.data.targets[0].values,0),y=b.getValueOnIndex(b.data.targets[0].values,b.data.targets[0].values.length-1),e=b.x(x.x)-b.x(y.x)):e=t(g)/2,u=t(z)/t(g),f="translate("+e+",0) scale("+u+",1)",b.hideXGridFocus(),d.transition().ease("linear").duration(A).each(function(){C.add(b.axes.x.transition().call(b.xAxis)),C.add(H.transition().attr("transform",f)),C.add(I.transition().attr("transform",f)),C.add(J.transition().attr("transform",f)),C.add(K.transition().attr("transform",f)),C.add(G.transition().attr("transform",f)),C.add(F.filter(b.isRegionOnX).transition().attr("transform",f)),C.add(D.transition().attr("transform",f)),C.add(E.transition().attr("transform",f))}).call(C,function(){var a,d=[],e=[],f=[];if(w){for(a=0;w>a;a++)d.push("."+l.shape+"-"+(v+a)),e.push("."+l.text+"-"+(v+a)),f.push("."+l.eventRect+"-"+(v+a));b.svg.selectAll("."+l.shapes).selectAll(d).remove(),b.svg.selectAll("."+l.texts).selectAll(e).remove(),b.svg.selectAll("."+l.eventRects).selectAll(f).remove(),b.svg.select("."+l.xgrid).remove()}D.attr("transform",null).attr(b.xgridAttr),E.attr("transform",null),E.select("line").attr("x1",c.axis_rotated?0:p).attr("x2",c.axis_rotated?b.width:p),E.select("text").attr("x",c.axis_rotated?b.width:0).attr("y",p),H.attr("transform",null).attr("d",j),I.attr("transform",null).attr("d",k),J.attr("transform",null).attr("d",m),K.attr("transform",null).attr("cx",n).attr("cy",o),G.attr("transform",null).attr("x",q).attr("y",r).style("fill-opacity",b.opacityForText.bind(b)),F.attr("transform",null),F.select("rect").filter(b.isRegionOnX).attr("x",b.regionX.bind(b)).attr("width",b.regionWidth.bind(b)),c.interaction_enabled&&b.redrawEventRect(),B(),b.flowing=!1})}},h.selected=function(a){var b=this.internal,c=b.d3;return c.merge(b.main.selectAll("."+l.shapes+b.getTargetSelectorSuffix(a)).selectAll("."+l.shape).filter(function(){return c.select(this).classed(l.SELECTED)}).map(function(a){return a.map(function(a){var b=a.__data__;return b.data?b.data:b})}))},h.select=function(a,b,c){var d=this.internal,e=d.d3,f=d.config;f.data_selection_enabled&&d.main.selectAll("."+l.shapes).selectAll("."+l.shape).each(function(g,h){var i=e.select(this),j=g.data?g.data.id:g.id,k=d.getToggle(this,g).bind(d),m=f.data_selection_grouped||!a||a.indexOf(j)>=0,n=!b||b.indexOf(h)>=0,o=i.classed(l.SELECTED);i.classed(l.line)||i.classed(l.area)||(m&&n?f.data_selection_isselectable(g)&&!o&&k(!0,i.classed(l.SELECTED,!0),g,h):q(c)&&c&&o&&k(!1,i.classed(l.SELECTED,!1),g,h))})},h.unselect=function(a,b){var c=this.internal,d=c.d3,e=c.config;e.data_selection_enabled&&c.main.selectAll("."+l.shapes).selectAll("."+l.shape).each(function(f,g){var h=d.select(this),i=f.data?f.data.id:f.id,j=c.getToggle(this,f).bind(c),k=e.data_selection_grouped||!a||a.indexOf(i)>=0,m=!b||b.indexOf(g)>=0,n=h.classed(l.SELECTED);h.classed(l.line)||h.classed(l.area)||k&&m&&e.data_selection_isselectable(f)&&n&&j(!1,h.classed(l.SELECTED,!1),f,g)})},h.transform=function(a,b){var c=this.internal,d=["pie","donut"].indexOf(a)>=0?{withTransform:!0}:null;c.transformTo(b,a,d)},i.transformTo=function(a,b,c){var d=this,e=!d.hasArcType(),f=c||{withTransitionForAxis:e};f.withTransitionForTransform=!1,d.transiting=!1,d.setTargetType(a,b),d.updateTargets(d.data.targets),d.updateAndRedraw(f)},h.groups=function(a){var b=this.internal,c=b.config;return p(a)?c.data_groups:(c.data_groups=a,b.redraw(),c.data_groups)},h.xgrids=function(a){var b=this.internal,c=b.config;return a?(c.grid_x_lines=a,b.redrawWithoutRescale(),c.grid_x_lines):c.grid_x_lines},h.xgrids.add=function(a){var b=this.internal;return this.xgrids(b.config.grid_x_lines.concat(a?a:[]))},h.xgrids.remove=function(a){var b=this.internal;b.removeGridLines(a,!0)},h.ygrids=function(a){var b=this.internal,c=b.config;return a?(c.grid_y_lines=a,b.redrawWithoutRescale(),c.grid_y_lines):c.grid_y_lines},h.ygrids.add=function(a){var b=this.internal;return this.ygrids(b.config.grid_y_lines.concat(a?a:[]))},h.ygrids.remove=function(a){var b=this.internal;b.removeGridLines(a,!1)},h.regions=function(a){var b=this.internal,c=b.config;return a?(c.regions=a,b.redrawWithoutRescale(),c.regions):c.regions},h.regions.add=function(a){var b=this.internal,c=b.config;return a?(c.regions=c.regions.concat(a),b.redrawWithoutRescale(),c.regions):c.regions},h.regions.remove=function(a){var b,c,d,e=this.internal,f=e.config;return a=a||{},b=e.getOption(a,"duration",f.transition_duration),c=e.getOption(a,"classes",[l.region]),d=e.main.select("."+l.regions).selectAll(c.map(function(a){return"."+a})),(b?d.transition().duration(b):d).style("opacity",0).remove(),f.regions=f.regions.filter(function(a){var b=!1;return a["class"]?(a["class"].split(" ").forEach(function(a){c.indexOf(a)>=0&&(b=!0)}),!b):!0}),f.regions},h.data=function(a){var b=this.internal.data.targets;return"undefined"==typeof a?b:b.filter(function(b){return[].concat(a).indexOf(b.id)>=0})},h.data.shown=function(a){return this.internal.filterTargetsToShow(this.data(a))},h.data.values=function(a){var b,c=null;return a&&(b=this.data(a),c=b[0]?b[0].values.map(function(a){return a.value}):null),c},h.data.names=function(a){return this.internal.clearLegendItemTextBoxCache(),this.internal.updateDataAttributes("names",a)},h.data.colors=function(a){return this.internal.updateDataAttributes("colors",a)},h.data.axes=function(a){return this.internal.updateDataAttributes("axes",a)},h.category=function(a,b){var c=this.internal,d=c.config;return arguments.length>1&&(d.axis_x_categories[a]=b,c.redraw()),d.axis_x_categories[a]},h.categories=function(a){var b=this.internal,c=b.config;return arguments.length?(c.axis_x_categories=a,b.redraw(),c.axis_x_categories):c.axis_x_categories},h.color=function(a){var b=this.internal;return b.color(a)},h.x=function(a){var b=this.internal;return arguments.length&&(b.updateTargetX(b.data.targets,a),b.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),b.data.xs},h.xs=function(a){var b=this.internal;return arguments.length&&(b.updateTargetXs(b.data.targets,a),b.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),b.data.xs},h.axis=function(){},h.axis.labels=function(a){var b=this.internal;arguments.length&&(Object.keys(a).forEach(function(c){b.axis.setLabelText(c,a[c])}),b.axis.updateLabels())},h.axis.max=function(a){var b=this.internal,c=b.config;return arguments.length?("object"==typeof a?(m(a.x)&&(c.axis_x_max=a.x),m(a.y)&&(c.axis_y_max=a.y),m(a.y2)&&(c.axis_y2_max=a.y2)):c.axis_y_max=c.axis_y2_max=a,void b.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:c.axis_x_max,y:c.axis_y_max,y2:c.axis_y2_max}},h.axis.min=function(a){var b=this.internal,c=b.config;return arguments.length?("object"==typeof a?(m(a.x)&&(c.axis_x_min=a.x),m(a.y)&&(c.axis_y_min=a.y),m(a.y2)&&(c.axis_y2_min=a.y2)):c.axis_y_min=c.axis_y2_min=a,void b.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:c.axis_x_min,y:c.axis_y_min,y2:c.axis_y2_min}},h.axis.range=function(a){return arguments.length?(q(a.max)&&this.axis.max(a.max),void(q(a.min)&&this.axis.min(a.min))):{max:this.axis.max(),min:this.axis.min()}},h.legend=function(){},h.legend.show=function(a){var b=this.internal;b.showLegend(b.mapToTargetIds(a)),b.updateAndRedraw({withLegend:!0})},h.legend.hide=function(a){var b=this.internal;b.hideLegend(b.mapToTargetIds(a)),b.updateAndRedraw({withLegend:!0})},h.resize=function(a){var b=this.internal,c=b.config;c.size_width=a?a.width:null,c.size_height=a?a.height:null,this.flush()},h.flush=function(){var a=this.internal;a.updateAndRedraw({withLegend:!0,withTransition:!1,withTransitionForTransform:!1})},h.destroy=function(){var b=this.internal;if(a.clearInterval(b.intervalForObserveInserted),void 0!==b.resizeTimeout&&a.clearTimeout(b.resizeTimeout),a.detachEvent)a.detachEvent("onresize",b.resizeFunction);else if(a.removeEventListener)a.removeEventListener("resize",b.resizeFunction);else{var c=a.onresize;c&&c.add&&c.remove&&c.remove(b.resizeFunction)}return b.selectChart.classed("c3",!1).html(""),Object.keys(b).forEach(function(a){b[a]=null}),null},h.tooltip=function(){},h.tooltip.show=function(a){var b,c,d=this.internal;a.mouse&&(c=a.mouse),a.data?d.isMultipleX()?(c=[d.x(a.data.x),d.getYScale(a.data.id)(a.data.value)],b=null):b=m(a.data.index)?a.data.index:d.getIndexByX(a.data.x):"undefined"!=typeof a.x?b=d.getIndexByX(a.x):"undefined"!=typeof a.index&&(b=a.index),d.dispatchEvent("mouseover",b,c),d.dispatchEvent("mousemove",b,c),d.config.tooltip_onshow.call(d,a.data)},h.tooltip.hide=function(){this.internal.dispatchEvent("mouseout",0),this.internal.config.tooltip_onhide.call(this)};var A;i.isSafari=function(){var b=a.navigator.userAgent;return b.indexOf("Safari")>=0&&b.indexOf("Chrome")<0},i.isChrome=function(){var b=a.navigator.userAgent;return b.indexOf("Chrome")>=0},Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),function(){"SVGPathSeg"in a||(a.SVGPathSeg=function(a,b,c){this.pathSegType=a,this.pathSegTypeAsLetter=b,this._owningPathSegList=c},SVGPathSeg.PATHSEG_UNKNOWN=0,SVGPathSeg.PATHSEG_CLOSEPATH=1,SVGPathSeg.PATHSEG_MOVETO_ABS=2,SVGPathSeg.PATHSEG_MOVETO_REL=3,SVGPathSeg.PATHSEG_LINETO_ABS=4,SVGPathSeg.PATHSEG_LINETO_REL=5,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS=6,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL=7,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS=8,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL=9,SVGPathSeg.PATHSEG_ARC_ABS=10,SVGPathSeg.PATHSEG_ARC_REL=11,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS=12,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL=13,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS=14,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL=15,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS=16,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL=17,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS=18,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL=19,SVGPathSeg.prototype._segmentChanged=function(){this._owningPathSegList&&this._owningPathSegList.segmentChanged(this)},a.SVGPathSegClosePath=function(a){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CLOSEPATH,"z",a)},SVGPathSegClosePath.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegClosePath.prototype.toString=function(){return"[object SVGPathSegClosePath]"},SVGPathSegClosePath.prototype._asPathString=function(){return this.pathSegTypeAsLetter},SVGPathSegClosePath.prototype.clone=function(){return new SVGPathSegClosePath(void 0)},a.SVGPathSegMovetoAbs=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_ABS,"M",a),this._x=b,this._y=c},SVGPathSegMovetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoAbs.prototype.toString=function(){return"[object SVGPathSegMovetoAbs]"},SVGPathSegMovetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoAbs.prototype.clone=function(){return new SVGPathSegMovetoAbs(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegMovetoAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegMovetoRel=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_REL,"m",a),this._x=b,this._y=c},SVGPathSegMovetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoRel.prototype.toString=function(){return"[object SVGPathSegMovetoRel]"},SVGPathSegMovetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoRel.prototype.clone=function(){return new SVGPathSegMovetoRel(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegMovetoRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoAbs=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_ABS,"L",a),this._x=b,this._y=c},SVGPathSegLinetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoAbs.prototype.toString=function(){return"[object SVGPathSegLinetoAbs]"},SVGPathSegLinetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoAbs.prototype.clone=function(){return new SVGPathSegLinetoAbs(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegLinetoAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoRel=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_REL,"l",a),this._x=b,this._y=c},SVGPathSegLinetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoRel.prototype.toString=function(){return"[object SVGPathSegLinetoRel]"},SVGPathSegLinetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoRel.prototype.clone=function(){return new SVGPathSegLinetoRel(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegLinetoRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoCubicAbs=function(a,b,c,d,e,f,g){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS,"C",a),this._x=b,this._y=c,this._x1=d,this._y1=e,this._x2=f,this._y2=g},SVGPathSegCurvetoCubicAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicAbs]"},SVGPathSegCurvetoCubicAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicAbs(void 0,this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x1",{get:function(){return this._x1},set:function(a){this._x1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y1",{get:function(){return this._y1},set:function(a){this._y1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x2",{get:function(){return this._x2},set:function(a){this._x2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y2",{get:function(){return this._y2},set:function(a){this._y2=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoCubicRel=function(a,b,c,d,e,f,g){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL,"c",a),this._x=b,this._y=c,this._x1=d,this._y1=e,this._x2=f,this._y2=g},SVGPathSegCurvetoCubicRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicRel]"},SVGPathSegCurvetoCubicRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicRel(void 0,this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x1",{get:function(){return this._x1},set:function(a){this._x1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y1",{get:function(){return this._y1},set:function(a){this._y1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x2",{get:function(){return this._x2},set:function(a){this._x2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y2",{get:function(){return this._y2},set:function(a){this._y2=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoQuadraticAbs=function(a,b,c,d,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS,"Q",a),this._x=b,this._y=c,this._x1=d,this._y1=e},SVGPathSegCurvetoQuadraticAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticAbs]"},SVGPathSegCurvetoQuadraticAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticAbs(void 0,this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x1",{get:function(){return this._x1},set:function(a){this._x1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y1",{get:function(){return this._y1},set:function(a){this._y1=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoQuadraticRel=function(a,b,c,d,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL,"q",a),this._x=b,this._y=c,this._x1=d,this._y1=e},SVGPathSegCurvetoQuadraticRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticRel]"},SVGPathSegCurvetoQuadraticRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticRel(void 0,this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x1",{get:function(){return this._x1},set:function(a){this._x1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y1",{get:function(){return this._y1},set:function(a){this._y1=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegArcAbs=function(a,b,c,d,e,f,g,h){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_ABS,"A",a),this._x=b,this._y=c,this._r1=d,this._r2=e,this._angle=f,this._largeArcFlag=g,this._sweepFlag=h},SVGPathSegArcAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcAbs.prototype.toString=function(){return"[object SVGPathSegArcAbs]"},SVGPathSegArcAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcAbs.prototype.clone=function(){return new SVGPathSegArcAbs(void 0,this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r1",{get:function(){return this._r1},set:function(a){this._r1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r2",{get:function(){return this._r2},set:function(a){this._r2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"angle",{get:function(){return this._angle},set:function(a){this._angle=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(a){this._largeArcFlag=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(a){this._sweepFlag=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegArcRel=function(a,b,c,d,e,f,g,h){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_REL,"a",a),this._x=b,this._y=c,this._r1=d,this._r2=e,this._angle=f,this._largeArcFlag=g,this._sweepFlag=h},SVGPathSegArcRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcRel.prototype.toString=function(){return"[object SVGPathSegArcRel]"},SVGPathSegArcRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcRel.prototype.clone=function(){return new SVGPathSegArcRel(void 0,this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r1",{get:function(){return this._r1},set:function(a){this._r1=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r2",{get:function(){return this._r2},set:function(a){this._r2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"angle",{get:function(){return this._angle},set:function(a){this._angle=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(a){this._largeArcFlag=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(a){this._sweepFlag=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoHorizontalAbs=function(a,b){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS,"H",a),this._x=b},SVGPathSegLinetoHorizontalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalAbs]"},SVGPathSegLinetoHorizontalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalAbs.prototype.clone=function(){return new SVGPathSegLinetoHorizontalAbs(void 0,this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoHorizontalRel=function(a,b){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL,"h",a),this._x=b},SVGPathSegLinetoHorizontalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalRel.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalRel]"},SVGPathSegLinetoHorizontalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalRel.prototype.clone=function(){return new SVGPathSegLinetoHorizontalRel(void 0,this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoVerticalAbs=function(a,b){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS,"V",a),this._y=b},SVGPathSegLinetoVerticalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalAbs]"},SVGPathSegLinetoVerticalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalAbs.prototype.clone=function(){return new SVGPathSegLinetoVerticalAbs(void 0,this._y)},Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegLinetoVerticalRel=function(a,b){
2316 2316 SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL,"v",a),this._y=b},SVGPathSegLinetoVerticalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalRel.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalRel]"},SVGPathSegLinetoVerticalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalRel.prototype.clone=function(){return new SVGPathSegLinetoVerticalRel(void 0,this._y)},Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoCubicSmoothAbs=function(a,b,c,d,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS,"S",a),this._x=b,this._y=c,this._x2=d,this._y2=e},SVGPathSegCurvetoCubicSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothAbs]"},SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothAbs(void 0,this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x2",{get:function(){return this._x2},set:function(a){this._x2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y2",{get:function(){return this._y2},set:function(a){this._y2=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoCubicSmoothRel=function(a,b,c,d,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL,"s",a),this._x=b,this._y=c,this._x2=d,this._y2=e},SVGPathSegCurvetoCubicSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothRel]"},SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothRel(void 0,this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x2",{get:function(){return this._x2},set:function(a){this._x2=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y2",{get:function(){return this._y2},set:function(a){this._y2=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoQuadraticSmoothAbs=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS,"T",a),this._x=b,this._y=c},SVGPathSegCurvetoQuadraticSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothAbs]"},SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothAbs(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),a.SVGPathSegCurvetoQuadraticSmoothRel=function(a,b,c){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL,"t",a),this._x=b,this._y=c},SVGPathSegCurvetoQuadraticSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothRel]"},SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothRel(void 0,this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"x",{get:function(){return this._x},set:function(a){this._x=a,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"y",{get:function(){return this._y},set:function(a){this._y=a,this._segmentChanged()},enumerable:!0}),SVGPathElement.prototype.createSVGPathSegClosePath=function(){return new SVGPathSegClosePath(void 0)},SVGPathElement.prototype.createSVGPathSegMovetoAbs=function(a,b){return new SVGPathSegMovetoAbs(void 0,a,b)},SVGPathElement.prototype.createSVGPathSegMovetoRel=function(a,b){return new SVGPathSegMovetoRel(void 0,a,b)},SVGPathElement.prototype.createSVGPathSegLinetoAbs=function(a,b){return new SVGPathSegLinetoAbs(void 0,a,b)},SVGPathElement.prototype.createSVGPathSegLinetoRel=function(a,b){return new SVGPathSegLinetoRel(void 0,a,b)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs=function(a,b,c,d,e,f){return new SVGPathSegCurvetoCubicAbs(void 0,a,b,c,d,e,f)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel=function(a,b,c,d,e,f){return new SVGPathSegCurvetoCubicRel(void 0,a,b,c,d,e,f)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs=function(a,b,c,d){return new SVGPathSegCurvetoQuadraticAbs(void 0,a,b,c,d)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel=function(a,b,c,d){return new SVGPathSegCurvetoQuadraticRel(void 0,a,b,c,d)},SVGPathElement.prototype.createSVGPathSegArcAbs=function(a,b,c,d,e,f,g){return new SVGPathSegArcAbs(void 0,a,b,c,d,e,f,g)},SVGPathElement.prototype.createSVGPathSegArcRel=function(a,b,c,d,e,f,g){return new SVGPathSegArcRel(void 0,a,b,c,d,e,f,g)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs=function(a){return new SVGPathSegLinetoHorizontalAbs(void 0,a)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel=function(a){return new SVGPathSegLinetoHorizontalRel(void 0,a)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs=function(a){return new SVGPathSegLinetoVerticalAbs(void 0,a)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel=function(a){return new SVGPathSegLinetoVerticalRel(void 0,a)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs=function(a,b,c,d){return new SVGPathSegCurvetoCubicSmoothAbs(void 0,a,b,c,d)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel=function(a,b,c,d){return new SVGPathSegCurvetoCubicSmoothRel(void 0,a,b,c,d)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs=function(a,b){return new SVGPathSegCurvetoQuadraticSmoothAbs(void 0,a,b)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel=function(a,b){return new SVGPathSegCurvetoQuadraticSmoothRel(void 0,a,b)}),"SVGPathSegList"in a||(a.SVGPathSegList=function(a){this._pathElement=a,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},Object.defineProperty(SVGPathSegList.prototype,"numberOfItems",{get:function(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"pathSegList",{get:function(){return this._pathSegList||(this._pathSegList=new SVGPathSegList(this)),this._pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"normalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedNormalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),SVGPathSegList.prototype._checkPathSynchronizedToList=function(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())},SVGPathSegList.prototype._updateListFromPathMutations=function(a){if(this._pathElement){var b=!1;a.forEach(function(a){"d"==a.attributeName&&(b=!0)}),b&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}},SVGPathSegList.prototype._writeListToPath=function(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},SVGPathSegList.prototype.segmentChanged=function(a){this._writeListToPath()},SVGPathSegList.prototype.clear=function(){this._checkPathSynchronizedToList(),this._list.forEach(function(a){a._owningPathSegList=null}),this._list=[],this._writeListToPath()},SVGPathSegList.prototype.initialize=function(a){return this._checkPathSynchronizedToList(),this._list=[a],a._owningPathSegList=this,this._writeListToPath(),a},SVGPathSegList.prototype._checkValidIndex=function(a){if(isNaN(a)||0>a||a>=this.numberOfItems)throw"INDEX_SIZE_ERR"},SVGPathSegList.prototype.getItem=function(a){return this._checkPathSynchronizedToList(),this._checkValidIndex(a),this._list[a]},SVGPathSegList.prototype.insertItemBefore=function(a,b){return this._checkPathSynchronizedToList(),b>this.numberOfItems&&(b=this.numberOfItems),a._owningPathSegList&&(a=a.clone()),this._list.splice(b,0,a),a._owningPathSegList=this,this._writeListToPath(),a},SVGPathSegList.prototype.replaceItem=function(a,b){return this._checkPathSynchronizedToList(),a._owningPathSegList&&(a=a.clone()),this._checkValidIndex(b),this._list[b]=a,a._owningPathSegList=this,this._writeListToPath(),a},SVGPathSegList.prototype.removeItem=function(a){this._checkPathSynchronizedToList(),this._checkValidIndex(a);var b=this._list[a];return this._list.splice(a,1),this._writeListToPath(),b},SVGPathSegList.prototype.appendItem=function(a){return this._checkPathSynchronizedToList(),a._owningPathSegList&&(a=a.clone()),this._list.push(a),a._owningPathSegList=this,this._writeListToPath(),a},SVGPathSegList._pathSegArrayAsString=function(a){var b="",c=!0;return a.forEach(function(a){c?(c=!1,b+=a._asPathString()):b+=" "+a._asPathString()}),b},SVGPathSegList.prototype._parsePath=function(a){if(!a||0==a.length)return[];var b=this,c=function(){this.pathSegList=[]};c.prototype.appendSegment=function(a){this.pathSegList.push(a)};var d=function(a){this._string=a,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()};d.prototype._isCurrentSpace=function(){var a=this._string[this._currentIndex];return" ">=a&&(" "==a||"\n"==a||" "==a||"\r"==a||"\f"==a)},d.prototype._skipOptionalSpaces=function(){for(;this._currentIndex<this._endIndex&&this._isCurrentSpace();)this._currentIndex++;return this._currentIndex<this._endIndex},d.prototype._skipOptionalSpacesOrDelimiter=function(){return this._currentIndex<this._endIndex&&!this._isCurrentSpace()&&","!=this._string.charAt(this._currentIndex)?!1:(this._skipOptionalSpaces()&&this._currentIndex<this._endIndex&&","==this._string.charAt(this._currentIndex)&&(this._currentIndex++,this._skipOptionalSpaces()),this._currentIndex<this._endIndex)},d.prototype.hasMoreData=function(){return this._currentIndex<this._endIndex},d.prototype.peekSegmentType=function(){var a=this._string[this._currentIndex];return this._pathSegTypeFromChar(a)},d.prototype._pathSegTypeFromChar=function(a){switch(a){case"Z":case"z":return SVGPathSeg.PATHSEG_CLOSEPATH;case"M":return SVGPathSeg.PATHSEG_MOVETO_ABS;case"m":return SVGPathSeg.PATHSEG_MOVETO_REL;case"L":return SVGPathSeg.PATHSEG_LINETO_ABS;case"l":return SVGPathSeg.PATHSEG_LINETO_REL;case"C":return SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;case"c":return SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;case"Q":return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;case"q":return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;case"A":return SVGPathSeg.PATHSEG_ARC_ABS;case"a":return SVGPathSeg.PATHSEG_ARC_REL;case"H":return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;case"h":return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;case"V":return SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;case"v":return SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;case"S":return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;case"s":return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;case"T":return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;case"t":return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;default:return SVGPathSeg.PATHSEG_UNKNOWN}},d.prototype._nextCommandHelper=function(a,b){return("+"==a||"-"==a||"."==a||a>="0"&&"9">=a)&&b!=SVGPathSeg.PATHSEG_CLOSEPATH?b==SVGPathSeg.PATHSEG_MOVETO_ABS?SVGPathSeg.PATHSEG_LINETO_ABS:b==SVGPathSeg.PATHSEG_MOVETO_REL?SVGPathSeg.PATHSEG_LINETO_REL:b:SVGPathSeg.PATHSEG_UNKNOWN},d.prototype.initialCommandIsMoveTo=function(){if(!this.hasMoreData())return!0;var a=this.peekSegmentType();return a==SVGPathSeg.PATHSEG_MOVETO_ABS||a==SVGPathSeg.PATHSEG_MOVETO_REL},d.prototype._parseNumber=function(){var a=0,b=0,c=1,d=0,e=1,f=1,g=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex<this._endIndex&&"+"==this._string.charAt(this._currentIndex)?this._currentIndex++:this._currentIndex<this._endIndex&&"-"==this._string.charAt(this._currentIndex)&&(this._currentIndex++,e=-1),!(this._currentIndex==this._endIndex||(this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")&&"."!=this._string.charAt(this._currentIndex))){for(var h=this._currentIndex;this._currentIndex<this._endIndex&&this._string.charAt(this._currentIndex)>="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!=h)for(var i=this._currentIndex-1,j=1;i>=h;)b+=j*(this._string.charAt(i--)-"0"),j*=10;if(this._currentIndex<this._endIndex&&"."==this._string.charAt(this._currentIndex)){if(this._currentIndex++,this._currentIndex>=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex<this._endIndex&&this._string.charAt(this._currentIndex)>="0"&&this._string.charAt(this._currentIndex)<="9";)d+=(this._string.charAt(this._currentIndex++)-"0")*(c*=.1)}if(this._currentIndex!=g&&this._currentIndex+1<this._endIndex&&("e"==this._string.charAt(this._currentIndex)||"E"==this._string.charAt(this._currentIndex))&&"x"!=this._string.charAt(this._currentIndex+1)&&"m"!=this._string.charAt(this._currentIndex+1)){if(this._currentIndex++,"+"==this._string.charAt(this._currentIndex)?this._currentIndex++:"-"==this._string.charAt(this._currentIndex)&&(this._currentIndex++,f=-1),this._currentIndex>=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex<this._endIndex&&this._string.charAt(this._currentIndex)>="0"&&this._string.charAt(this._currentIndex)<="9";)a*=10,a+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var k=b+d;if(k*=e,a&&(k*=Math.pow(10,f*a)),g!=this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),k}},d.prototype._parseArcFlag=function(){if(!(this._currentIndex>=this._endIndex)){var a=!1,b=this._string.charAt(this._currentIndex++);if("0"==b)a=!1;else{if("1"!=b)return;a=!0}return this._skipOptionalSpacesOrDelimiter(),a}},d.prototype.parseSegment=function(){var a=this._string[this._currentIndex],c=this._pathSegTypeFromChar(a);if(c==SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand==SVGPathSeg.PATHSEG_UNKNOWN)return null;if(c=this._nextCommandHelper(a,this._previousCommand),c==SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=c,c){case SVGPathSeg.PATHSEG_MOVETO_REL:return new SVGPathSegMovetoRel(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_MOVETO_ABS:return new SVGPathSegMovetoAbs(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_REL:return new SVGPathSegLinetoRel(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_ABS:return new SVGPathSegLinetoAbs(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new SVGPathSegLinetoHorizontalRel(b,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new SVGPathSegLinetoHorizontalAbs(b,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new SVGPathSegLinetoVerticalRel(b,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new SVGPathSegLinetoVerticalAbs(b,this._parseNumber());case SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new SVGPathSegClosePath(b);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var d={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicRel(b,d.x,d.y,d.x1,d.y1,d.x2,d.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:var d={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicAbs(b,d.x,d.y,d.x1,d.y1,d.x2,d.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:var d={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothRel(b,d.x,d.y,d.x2,d.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:var d={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothAbs(b,d.x,d.y,d.x2,d.y2);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:var d={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticRel(b,d.x,d.y,d.x1,d.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:var d={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticAbs(b,d.x,d.y,d.x1,d.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new SVGPathSegCurvetoQuadraticSmoothRel(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new SVGPathSegCurvetoQuadraticSmoothAbs(b,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_ARC_REL:var d={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcRel(b,d.x,d.y,d.x1,d.y1,d.arcAngle,d.arcLarge,d.arcSweep);case SVGPathSeg.PATHSEG_ARC_ABS:var d={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcAbs(b,d.x,d.y,d.x1,d.y1,d.arcAngle,d.arcLarge,d.arcSweep);default:throw"Unknown path seg type."}};var e=new c,f=new d(a);if(!f.initialCommandIsMoveTo())return[];for(;f.hasMoreData();){var g=f.parseSegment();if(!g)return[];e.appendSegment(g)}return e.pathSegList})}(),"function"==typeof define&&define.amd?define("c3",["d3"],function(){return k}):"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=k:a.c3=k}(window);
2317 2317 ;/**
2318 2318 * @version 2.1.8
2319 2319 * @license MIT
2320 2320 */
2321 2321 !function(t,e){"use strict";t.module("smart-table",[]).run(["$templateCache",function(t){t.put("template/smart-table/pagination.html",'<nav ng-if="numPages && pages.length >= 2"><ul class="pagination"><li ng-repeat="page in pages" ng-class="{active: page==currentPage}"><a href="javascript: void(0);" ng-click="selectPage(page)">{{page}}</a></li></ul></nav>')}]),t.module("smart-table").constant("stConfig",{pagination:{template:"template/smart-table/pagination.html",itemsByPage:10,displayedPages:5},search:{delay:400,inputEvent:"input"},select:{mode:"single",selectedClass:"st-selected"},sort:{ascentClass:"st-sort-ascent",descentClass:"st-sort-descent",descendingFirst:!1,skipNatural:!1,delay:300},pipe:{delay:100}}),t.module("smart-table").controller("stTableController",["$scope","$parse","$filter","$attrs",function(a,n,s,i){function r(t){return t?[].concat(t):[]}function l(){b=r(o(a)),v===!0&&S.pipe()}function c(t,e){if(-1!=e.indexOf(".")){var a=e.split("."),s=a.pop(),i=a.join("."),r=n(i)(t);delete r[s],0==Object.keys(r).length&&c(t,i)}else delete t[e]}var o,u,p,g=i.stTable,d=n(g),f=d.assign,m=s("orderBy"),h=s("filter"),b=r(d(a)),P={sort:{},search:{},pagination:{start:0,totalItemCount:0}},v=!0,S=this;i.stSafeSrc&&(o=n(i.stSafeSrc),a.$watch(function(){var t=o(a);return t&&t.length?t[0]:e},function(t,e){t!==e&&l()}),a.$watch(function(){var t=o(a);return t?t.length:0},function(t){t!==b.length&&l()}),a.$watch(function(){return o(a)},function(t,e){t!==e&&(P.pagination.start=0,l())})),this.sortBy=function(e,a){return P.sort.predicate=e,P.sort.reverse=a===!0,t.isFunction(e)?P.sort.functionName=e.name:delete P.sort.functionName,P.pagination.start=0,this.pipe()},this.search=function(e,a){var s=P.search.predicateObject||{},i=a?a:"$";return e=t.isString(e)?e.trim():e,n(i).assign(s,e),e||c(s,i),P.search.predicateObject=s,P.pagination.start=0,this.pipe()},this.pipe=function(){var t,n=P.pagination;u=P.search.predicateObject?h(b,P.search.predicateObject):b,P.sort.predicate&&(u=m(u,P.sort.predicate,P.sort.reverse)),n.totalItemCount=u.length,n.number!==e&&(n.numberOfPages=u.length>0?Math.ceil(u.length/n.number):1,n.start=n.start>=u.length?(n.numberOfPages-1)*n.number:n.start,t=u.slice(n.start,n.start+parseInt(n.number))),f(a,t||u)},this.select=function(t,n){var s=r(d(a)),i=s.indexOf(t);-1!==i&&("single"===n?(t.isSelected=t.isSelected!==!0,p&&(p.isSelected=!1),p=t.isSelected===!0?t:e):s[i].isSelected=!s[i].isSelected)},this.slice=function(t,e){return P.pagination.start=t,P.pagination.number=e,this.pipe()},this.tableState=function(){return P},this.getFilteredCollection=function(){return u||b},this.setFilterFunction=function(t){h=s(t)},this.setSortFunction=function(t){m=s(t)},this.preventPipeOnWatch=function(){v=!1}}]).directive("stTable",function(){return{restrict:"A",controller:"stTableController",link:function(t,e,a,n){a.stSetFilter&&n.setFilterFunction(a.stSetFilter),a.stSetSort&&n.setSortFunction(a.stSetSort)}}}),t.module("smart-table").directive("stSearch",["stConfig","$timeout","$parse",function(t,e,a){return{require:"^stTable",link:function(n,s,i,r){var l=r,c=null,o=i.stDelay||t.search.delay,u=i.stInputEvent||t.search.inputEvent;i.$observe("stSearch",function(t,e){var a=s[0].value;t!==e&&a&&(r.tableState().search={},l.search(a,t))}),n.$watch(function(){return r.tableState().search},function(t){var e=i.stSearch||"$";t.predicateObject&&a(e)(t.predicateObject)!==s[0].value&&(s[0].value=a(e)(t.predicateObject)||"")},!0),s.bind(u,function(t){t=t.originalEvent||t,null!==c&&e.cancel(c),c=e(function(){l.search(t.target.value,i.stSearch||""),c=null},o)})}}}]),t.module("smart-table").directive("stSelectRow",["stConfig",function(t){return{restrict:"A",require:"^stTable",scope:{row:"=stSelectRow"},link:function(e,a,n,s){var i=n.stSelectMode||t.select.mode;a.bind("click",function(){e.$apply(function(){s.select(e.row,i)})}),e.$watch("row.isSelected",function(e){e===!0?a.addClass(t.select.selectedClass):a.removeClass(t.select.selectedClass)})}}}]),t.module("smart-table").directive("stSort",["stConfig","$parse","$timeout",function(a,n,s){return{restrict:"A",require:"^stTable",link:function(i,r,l,c){function o(){P?d=0===d?2:d-1:d++;var e;p=t.isFunction(g(i))||t.isArray(g(i))?g(i):l.stSort,d%3===0&&!!b!=!0?(d=0,c.tableState().sort={},c.tableState().pagination.start=0,e=c.pipe.bind(c)):e=c.sortBy.bind(c,p,d%2===0),null!==v&&s.cancel(v),0>S?e():v=s(e,S)}var u,p=l.stSort,g=n(p),d=0,f=l.stClassAscent||a.sort.ascentClass,m=l.stClassDescent||a.sort.descentClass,h=[f,m],b=l.stSkipNatural!==e?l.stSkipNatural:a.sort.skipNatural,P=l.stDescendingFirst!==e?l.stDescendingFirst:a.sort.descendingFirst,v=null,S=l.stDelay||a.sort.delay;l.stSortDefault&&(u=i.$eval(l.stSortDefault)!==e?i.$eval(l.stSortDefault):l.stSortDefault),r.bind("click",function(){p&&i.$apply(o)}),u&&(d="reverse"===u?1:0,o()),i.$watch(function(){return c.tableState().sort},function(t){t.predicate!==p?(d=0,r.removeClass(f).removeClass(m)):(d=t.reverse===!0?2:1,r.removeClass(h[d%2]).addClass(h[d-1]))},!0)}}}]),t.module("smart-table").directive("stPagination",["stConfig",function(t){return{restrict:"EA",require:"^stTable",scope:{stItemsByPage:"=?",stDisplayedPages:"=?",stPageChange:"&"},templateUrl:function(e,a){return a.stTemplate?a.stTemplate:t.pagination.template},link:function(e,a,n,s){function i(){var t,a,n=s.tableState().pagination,i=1,r=e.currentPage;for(e.totalItemCount=n.totalItemCount,e.currentPage=Math.floor(n.start/n.number)+1,i=Math.max(i,e.currentPage-Math.abs(Math.floor(e.stDisplayedPages/2))),t=i+e.stDisplayedPages,t>n.numberOfPages&&(t=n.numberOfPages+1,i=Math.max(1,t-e.stDisplayedPages)),e.pages=[],e.numPages=n.numberOfPages,a=i;t>a;a++)e.pages.push(a);r!==e.currentPage&&e.stPageChange({newPage:e.currentPage})}e.stItemsByPage=e.stItemsByPage?+e.stItemsByPage:t.pagination.itemsByPage,e.stDisplayedPages=e.stDisplayedPages?+e.stDisplayedPages:t.pagination.displayedPages,e.currentPage=1,e.pages=[],e.$watch(function(){return s.tableState().pagination},i,!0),e.$watch("stItemsByPage",function(t,a){t!==a&&e.selectPage(1)}),e.$watch("stDisplayedPages",i),e.selectPage=function(t){t>0&&t<=e.numPages&&s.slice((t-1)*e.stItemsByPage,e.stItemsByPage)},s.tableState().pagination.number||s.slice(0,e.stItemsByPage)}}}]),t.module("smart-table").directive("stPipe",["stConfig","$timeout",function(e,a){return{require:"stTable",scope:{stPipe:"="},link:{pre:function(n,s,i,r){var l=null;t.isFunction(n.stPipe)&&(r.preventPipeOnWatch(),r.pipe=function(){return null!==l&&a.cancel(l),l=a(function(){n.stPipe(r.tableState(),r)},e.pipe.delay)})},post:function(t,e,a,n){n.pipe()}}}}])}(angular);
2322 2322 //# sourceMappingURL=smart-table.min.js.map
2323 2323
2324 2324 ;"use strict";angular.module("mentio",[]).directive("mentio",["mentioUtil","$document","$compile","$log","$timeout",function(e,t,n,r,i){return{restrict:"A",scope:{macros:"=mentioMacros",search:"&mentioSearch",select:"&mentioSelect",items:"=mentioItems",typedTerm:"=mentioTypedTerm",altId:"=mentioId",iframeElement:"=mentioIframeElement",requireLeadingSpace:"=mentioRequireLeadingSpace",selectNotFound:"=mentioSelectNotFound",trimTerm:"=mentioTrimTerm",ngModel:"="},controller:["$scope","$timeout","$attrs",function(n,r,i){n.query=function(e,t){var r=n.triggerCharMap[e];(void 0===n.trimTerm||n.trimTerm)&&(t=t.trim()),r.showMenu(),r.search({term:t}),r.typedTerm=t},n.defaultSearch=function(e){var t=[];angular.forEach(n.items,function(n){n.label.toUpperCase().indexOf(e.term.toUpperCase())>=0&&t.push(n)}),n.localItems=t},n.bridgeSearch=function(e){var t=i.mentioSearch?n.search:n.defaultSearch;t({term:e})},n.defaultSelect=function(e){return n.defaultTriggerChar+e.item.label},n.bridgeSelect=function(e){var t=i.mentioSelect?n.select:n.defaultSelect;return t({item:e})},n.setTriggerText=function(e){n.syncTriggerText&&(n.typedTerm=void 0===n.trimTerm||n.trimTerm?e.trim():e)},n.context=function(){return n.iframeElement?{iframe:n.iframeElement}:void 0},n.replaceText=function(t,i){if(n.hideAll(),e.replaceTriggerText(n.context(),n.targetElement,n.targetElementPath,n.targetElementSelectedOffset,n.triggerCharSet,t,n.requireLeadingSpace,i),!i&&(n.setTriggerText(""),angular.element(n.targetElement).triggerHandler("change"),n.isContentEditable())){n.contentEditableMenuPasted=!0;var o=r(function(){n.contentEditableMenuPasted=!1},200);n.$on("$destroy",function(){r.cancel(o)})}},n.hideAll=function(){for(var e in n.triggerCharMap)n.triggerCharMap.hasOwnProperty(e)&&n.triggerCharMap[e].hideMenu()},n.getActiveMenuScope=function(){for(var e in n.triggerCharMap)if(n.triggerCharMap.hasOwnProperty(e)&&n.triggerCharMap[e].visible)return n.triggerCharMap[e];return null},n.selectActive=function(){for(var e in n.triggerCharMap)n.triggerCharMap.hasOwnProperty(e)&&n.triggerCharMap[e].visible&&n.triggerCharMap[e].selectActive()},n.isActive=function(){for(var e in n.triggerCharMap)if(n.triggerCharMap.hasOwnProperty(e)&&n.triggerCharMap[e].visible)return!0;return!1},n.isContentEditable=function(){return"INPUT"!==n.targetElement.nodeName&&"TEXTAREA"!==n.targetElement.nodeName},n.replaceMacro=function(t,i){i?e.replaceMacroText(n.context(),n.targetElement,n.targetElementPath,n.targetElementSelectedOffset,n.macros,n.macros[t]):(n.replacingMacro=!0,n.timer=r(function(){e.replaceMacroText(n.context(),n.targetElement,n.targetElementPath,n.targetElementSelectedOffset,n.macros,n.macros[t]),angular.element(n.targetElement).triggerHandler("change"),n.replacingMacro=!1},300),n.$on("$destroy",function(){r.cancel(n.timer)}))},n.addMenu=function(e){e.parentScope&&n.triggerCharMap.hasOwnProperty(e.triggerChar)||(n.triggerCharMap[e.triggerChar]=e,void 0===n.triggerCharSet&&(n.triggerCharSet=[]),n.triggerCharSet.push(e.triggerChar),e.setParent(n))},n.$on("menuCreated",function(e,t){(void 0!==i.id||void 0!==i.mentioId)&&(i.id===t.targetElement||void 0!==i.mentioId&&n.altId===t.targetElement)&&n.addMenu(t.scope)}),t.on("click",function(){n.isActive()&&n.$apply(function(){n.hideAll()})}),t.on("keydown keypress paste",function(e){var t=n.getActiveMenuScope();t&&((9===e.which||13===e.which)&&(e.preventDefault(),t.selectActive()),27===e.which&&(e.preventDefault(),t.$apply(function(){t.hideMenu()})),40===e.which&&(e.preventDefault(),t.$apply(function(){t.activateNextItem()}),t.adjustScroll(1)),38===e.which&&(e.preventDefault(),t.$apply(function(){t.activatePreviousItem()}),t.adjustScroll(-1)),(37===e.which||39===e.which)&&e.preventDefault())})}],link:function(t,o,a){function c(e){function n(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()}var r=t.getActiveMenuScope();if(r){if(9===e.which||13===e.which)return n(e),r.selectActive(),!1;if(27===e.which)return n(e),r.$apply(function(){r.hideMenu()}),!1;if(40===e.which)return n(e),r.$apply(function(){r.activateNextItem()}),r.adjustScroll(1),!1;if(38===e.which)return n(e),r.$apply(function(){r.activatePreviousItem()}),r.adjustScroll(-1),!1;if(37===e.which||39===e.which)return n(e),!1}}if(t.triggerCharMap={},t.targetElement=o,a.$set("autocomplete","off"),a.mentioItems){t.localItems=[],t.parentScope=t;var l=a.mentioSearch?' mentio-items="items"':' mentio-items="localItems"';t.defaultTriggerChar=a.mentioTriggerChar?t.$eval(a.mentioTriggerChar):"@";var s='<mentio-menu mentio-search="bridgeSearch(term)" mentio-select="bridgeSelect(item)"'+l;a.mentioTemplateUrl&&(s=s+' mentio-template-url="'+a.mentioTemplateUrl+'"'),s=s+" mentio-trigger-char=\"'"+t.defaultTriggerChar+'\'" mentio-parent-scope="parentScope"/>';var m=n(s),u=m(t);o.parent().append(u),t.$on("$destroy",function(){u.remove()})}a.mentioTypedTerm&&(t.syncTriggerText=!0),t.$watch("iframeElement",function(e){if(e){var n=e.contentWindow.document;n.addEventListener("click",function(){t.isActive()&&t.$apply(function(){t.hideAll()})}),n.addEventListener("keydown",c,!0),t.$on("$destroy",function(){n.removeEventListener("keydown",c)})}}),t.$watch("ngModel",function(n){if(n&&""!==n||t.isActive()){if(void 0===t.triggerCharSet)return void r.error("Error, no mentio-items attribute was provided, and no separate mentio-menus were specified. Nothing to do.");if(t.contentEditableMenuPasted)return void(t.contentEditableMenuPasted=!1);t.replacingMacro&&(i.cancel(t.timer),t.replacingMacro=!1);var o=t.isActive(),a=t.isContentEditable(),c=e.getTriggerInfo(t.context(),t.triggerCharSet,t.requireLeadingSpace,o);if(void 0!==c&&(!o||o&&(a&&c.mentionTriggerChar===t.currentMentionTriggerChar||!a&&c.mentionPosition===t.currentMentionPosition)))c.mentionSelectedElement&&(t.targetElement=c.mentionSelectedElement,t.targetElementPath=c.mentionSelectedPath,t.targetElementSelectedOffset=c.mentionSelectedOffset),t.setTriggerText(c.mentionText),t.currentMentionPosition=c.mentionPosition,t.currentMentionTriggerChar=c.mentionTriggerChar,t.query(c.mentionTriggerChar,c.mentionText);else{var l=t.typedTerm;t.setTriggerText(""),t.hideAll();var s=e.getMacroMatch(t.context(),t.macros);if(void 0!==s)t.targetElement=s.macroSelectedElement,t.targetElementPath=s.macroSelectedPath,t.targetElementSelectedOffset=s.macroSelectedOffset,t.replaceMacro(s.macroText,s.macroHasTrailingSpace);else if(t.selectNotFound&&l&&""!==l){var m=t.triggerCharMap[t.currentMentionTriggerChar];if(m){var u=m.select({item:{label:l}});"function"==typeof u.then?u.then(t.replaceText):t.replaceText(u,!0)}}}}})}}}]).directive("mentioMenu",["mentioUtil","$rootScope","$log","$window","$document",function(e,t,n,r,i){return{restrict:"E",scope:{search:"&mentioSearch",select:"&mentioSelect",items:"=mentioItems",triggerChar:"=mentioTriggerChar",forElem:"=mentioFor",parentScope:"=mentioParentScope"},templateUrl:function(e,t){return void 0!==t.mentioTemplateUrl?t.mentioTemplateUrl:"mentio-menu.tpl.html"},controller:["$scope",function(e){e.visible=!1,this.activate=e.activate=function(t){e.activeItem=t},this.isActive=e.isActive=function(t){return e.activeItem===t},this.selectItem=e.selectItem=function(t){var n=e.select({item:t});"function"==typeof n.then?n.then(e.parentMentio.replaceText):e.parentMentio.replaceText(n)},e.activateNextItem=function(){var t=e.items.indexOf(e.activeItem);this.activate(e.items[(t+1)%e.items.length])},e.activatePreviousItem=function(){var t=e.items.indexOf(e.activeItem);this.activate(e.items[0===t?e.items.length-1:t-1])},e.isFirstItemActive=function(){var t=e.items.indexOf(e.activeItem);return 0===t},e.isLastItemActive=function(){var t=e.items.indexOf(e.activeItem);return t===e.items.length-1},e.selectActive=function(){e.selectItem(e.activeItem)},e.isVisible=function(){return e.visible},e.showMenu=function(){e.visible||(e.requestVisiblePendingSearch=!0)},e.setParent=function(t){e.parentMentio=t,e.targetElement=t.targetElement}}],link:function(o,a){if(a[0].parentNode.removeChild(a[0]),i[0].body.appendChild(a[0]),o.menuElement=a,o.parentScope)o.parentScope.addMenu(o);else{if(!o.forElem)return void n.error("mentio-menu requires a target element in tbe mentio-for attribute");if(!o.triggerChar)return void n.error("mentio-menu requires a trigger char");t.$broadcast("menuCreated",{targetElement:o.forElem,scope:o})}angular.element(r).bind("resize",function(){if(o.isVisible()){var t=[];t.push(o.triggerChar),e.popUnderMention(o.parentMentio.context(),t,a,o.requireLeadingSpace)}}),o.$watch("items",function(e){e&&e.length>0?(o.activate(e[0]),!o.visible&&o.requestVisiblePendingSearch&&(o.visible=!0,o.requestVisiblePendingSearch=!1)):o.hideMenu()}),o.$watch("isVisible()",function(t){if(t){var n=[];n.push(o.triggerChar),e.popUnderMention(o.parentMentio.context(),n,a,o.requireLeadingSpace)}}),o.parentMentio.$on("$destroy",function(){a.remove()}),o.hideMenu=function(){o.visible=!1,a.css("display","none")},o.adjustScroll=function(e){var t=a[0],n=t.querySelector("ul"),r=t.querySelector("[mentio-menu-item].active")||t.querySelector("[data-mentio-menu-item].active");return o.isFirstItemActive()?n.scrollTop=0:o.isLastItemActive()?n.scrollTop=n.scrollHeight:void(1===e?n.scrollTop+=r.offsetHeight:n.scrollTop-=r.offsetHeight)}}}}]).directive("mentioMenuItem",function(){return{restrict:"A",scope:{item:"=mentioMenuItem"},require:"^mentioMenu",link:function(e,t,n,r){e.$watch(function(){return r.isActive(e.item)},function(e){e?t.addClass("active"):t.removeClass("active")}),t.bind("mouseenter",function(){e.$apply(function(){r.activate(e.item)})}),t.bind("click",function(){return r.selectItem(e.item),!1})}}}).filter("unsafe",["$sce",function(e){return function(t){return e.trustAsHtml(t)}}]).filter("mentioHighlight",function(){function e(e){return e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(t,n,r){if(n){var i=r?'<span class="'+r+'">$&</span>':"<strong>$&</strong>";return(""+t).replace(new RegExp(e(n),"gi"),i)}return t}}),angular.module("mentio").factory("mentioUtil",["$window","$location","$anchorScroll","$timeout",function(e,t,n,r){function i(e,t,n,i){var c,l=h(e,t,i,!1);void 0!==l?(c=a(e)?b(e,v(e).activeElement,l.mentionPosition):S(e,l.mentionPosition),n.css({top:c.top+"px",left:c.left+"px",position:"absolute",zIndex:1e4,display:"block"}),r(function(){o(e,n)},0)):n.css({display:"none"})}function o(t,n){for(var r,i=20,o=100,a=n[0];void 0===r||0===r.height;)if(r=a.getBoundingClientRect(),0===r.height&&(a=a.childNodes[0],void 0===a||!a.getBoundingClientRect))return;var c=r.top,l=c+r.height;if(0>c)e.scrollTo(0,e.pageYOffset+r.top-i);else if(l>e.innerHeight){var s=e.pageYOffset+r.top-i;s-e.pageYOffset>o&&(s=e.pageYOffset+o);var m=e.pageYOffset-(e.innerHeight-l);m>s&&(m=s),e.scrollTo(0,m)}}function a(e){var t=v(e).activeElement;if(null!==t){var n=t.nodeName,r=t.getAttribute("type");return"INPUT"===n&&"text"===r||"TEXTAREA"===n}return!1}function c(e,t,n,r){var i,o=t;if(n)for(var a=0;a<n.length;a++){if(o=o.childNodes[n[a]],void 0===o)return;for(;o.length<r;)r-=o.length,o=o.nextSibling;0!==o.childNodes.length||o.length||(o=o.previousSibling)}var c=p(e);i=v(e).createRange(),i.setStart(o,r),i.setEnd(o,r),i.collapse(!0);try{c.removeAllRanges()}catch(l){}c.addRange(i),t.focus()}function l(e,t,n,r){var i,o;o=p(e),i=v(e).createRange(),i.setStart(o.anchorNode,n),i.setEnd(o.anchorNode,r),i.deleteContents();var a=v(e).createElement("div");a.innerHTML=t;for(var c,l,s=v(e).createDocumentFragment();c=a.firstChild;)l=s.appendChild(c);i.insertNode(s),l&&(i=i.cloneRange(),i.setStartAfter(l),i.collapse(!0),o.removeAllRanges(),o.addRange(i))}function s(e,t,n,r){var i=t.nodeName;"INPUT"===i||"TEXTAREA"===i?t!==v(e).activeElement&&t.focus():c(e,t,n,r)}function m(e,t,n,r,i,o){s(e,t,n,r);var c=d(e,i);if(c.macroHasTrailingSpace&&(c.macroText=c.macroText+"Β ",o+="Β "),void 0!==c){var m=v(e).activeElement;if(a(e)){var u=c.macroPosition,g=c.macroPosition+c.macroText.length;m.value=m.value.substring(0,u)+o+m.value.substring(g,m.value.length),m.selectionStart=u+o.length,m.selectionEnd=u+o.length}else l(e,o,c.macroPosition,c.macroPosition+c.macroText.length)}}function u(e,t,n,r,i,o,c,m){s(e,t,n,r);var u=h(e,i,c,!0,m);if(void 0!==u)if(a()){var g=v(e).activeElement;o+=" ";var d=u.mentionPosition,f=u.mentionPosition+u.mentionText.length+1;g.value=g.value.substring(0,d)+o+g.value.substring(f,g.value.length),g.selectionStart=d+o.length,g.selectionEnd=d+o.length}else o+="Β ",l(e,o,u.mentionPosition,u.mentionPosition+u.mentionText.length+1)}function g(e,t){if(null===t.parentNode)return 0;for(var n=0;n<t.parentNode.childNodes.length;n++){var r=t.parentNode.childNodes[n];if(r===t)return n}}function d(e,t){var n,r,i=[];if(a(e))n=v(e).activeElement;else{var o=f(e);o&&(n=o.selected,i=o.path,r=o.offset)}var c=T(e);if(void 0!==c&&null!==c){var l,s=!1;if(c.length>0&&("Β "===c.charAt(c.length-1)||" "===c.charAt(c.length-1))&&(s=!0,c=c.substring(0,c.length-1)),angular.forEach(t,function(e,t){var o=c.toUpperCase().lastIndexOf(t.toUpperCase());if(o>=0&&t.length+o===c.length){var a=o-1;(0===o||"Β "===c.charAt(a)||" "===c.charAt(a))&&(l={macroPosition:o,macroText:t,macroSelectedElement:n,macroSelectedPath:i,macroSelectedOffset:r,macroHasTrailingSpace:s})}}),l)return l}}function f(e){var t,n=p(e),r=n.anchorNode,i=[];if(null!=r){for(var o,a=r.contentEditable;null!==r&&"true"!==a;)o=g(e,r),i.push(o),r=r.parentNode,null!==r&&(a=r.contentEditable);return i.reverse(),t=n.getRangeAt(0).startOffset,{selected:r,path:i,offset:t}}}function h(e,t,n,r,i){var o,c,l;if(a(e))o=v(e).activeElement;else{var s=f(e);s&&(o=s.selected,c=s.path,l=s.offset)}var m=T(e);if(void 0!==m&&null!==m){var u,g=-1;if(t.forEach(function(e){var t=m.lastIndexOf(e);t>g&&(g=t,u=e)}),g>=0&&(0===g||!n||/[\xA0\s]/g.test(m.substring(g-1,g)))){var d=m.substring(g+1,m.length);u=m.substring(g,g+1);var h=d.substring(0,1),p=d.length>0&&(" "===h||"Β "===h);if(i&&(d=d.trim()),!p&&(r||!/[\xA0\s]/g.test(d)))return{mentionPosition:g,mentionText:d,mentionSelectedElement:o,mentionSelectedPath:c,mentionSelectedOffset:l,mentionTriggerChar:u}}}}function p(e){return e?e.iframe.contentWindow.getSelection():window.getSelection()}function v(e){return e?e.iframe.contentWindow.document:document}function T(e){var t;if(a(e)){var n=v(e).activeElement,r=n.selectionStart;t=n.value.substring(0,r)}else{var i=p(e).anchorNode;if(null!=i){var o=i.textContent,c=p(e).getRangeAt(0).startOffset;c>=0&&(t=o.substring(0,c))}}return t}function S(e,t){var n,r,i="ο»Ώ",o="sel_"+(new Date).getTime()+"_"+Math.random().toString().substr(2),a=p(e),c=a.getRangeAt(0);r=v(e).createRange(),r.setStart(a.anchorNode,t),r.setEnd(a.anchorNode,t),r.collapse(!1),n=v(e).createElement("span"),n.id=o,n.appendChild(v(e).createTextNode(i)),r.insertNode(n),a.removeAllRanges(),a.addRange(c);var l={left:0,top:n.offsetHeight};return E(e,n,l),n.parentNode.removeChild(n),l}function E(e,t,n){for(var r=t,i=e?e.iframe:null;r;)n.left+=r.offsetLeft+r.clientLeft,n.top+=r.offsetTop+r.clientTop,r=r.offsetParent,!r&&i&&(r=i,i=null);for(r=t,i=e?e.iframe:null;r!==v().body;)r.scrollTop&&r.scrollTop>0&&(n.top-=r.scrollTop),r.scrollLeft&&r.scrollLeft>0&&(n.left-=r.scrollLeft),r=r.parentNode,!r&&i&&(r=i,i=null)}function b(e,t,n){var r=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing"],i=null!==window.mozInnerScreenX,o=v(e).createElement("div");o.id="input-textarea-caret-position-mirror-div",v(e).body.appendChild(o);var a=o.style,c=window.getComputedStyle?getComputedStyle(t):t.currentStyle;a.whiteSpace="pre-wrap","INPUT"!==t.nodeName&&(a.wordWrap="break-word"),a.position="absolute",a.visibility="hidden",r.forEach(function(e){a[e]=c[e]}),i?(a.width=parseInt(c.width)-2+"px",t.scrollHeight>parseInt(c.height)&&(a.overflowY="scroll")):a.overflow="hidden",o.textContent=t.value.substring(0,n),"INPUT"===t.nodeName&&(o.textContent=o.textContent.replace(/\s/g,"Β "));var l=v(e).createElement("span");l.textContent=t.value.substring(n)||".",o.appendChild(l);var s={top:l.offsetTop+parseInt(c.borderTopWidth)+parseInt(c.fontSize),left:l.offsetLeft+parseInt(c.borderLeftWidth)};return E(e,t,s),v(e).body.removeChild(o),s}return{popUnderMention:i,replaceMacroText:m,replaceTriggerText:u,getMacroMatch:d,getTriggerInfo:h,selectElement:c,getTextAreaOrInputUnderlinePosition:b,getTextPrecedingCurrentSelection:T,getContentEditableSelectedPath:f,getNodePositionInParent:g,getContentEditableCaretPosition:S,pasteHtml:l,resetSelection:s,scrollIntoView:o}}]),angular.module("mentio").run(["$templateCache",function(e){e.put("mentio-menu.tpl.html",'<style>\n.scrollable-menu {\n height: auto;\n max-height: 300px;\n overflow: auto;\n}\n\n.menu-highlighted {\n font-weight: bold;\n}\n</style>\n<ul class="dropdown-menu scrollable-menu" style="display:block">\n <li mentio-menu-item="item" ng-repeat="item in items track by $index">\n <a class="text-primary" ng-bind-html="item.label | mentioHighlight:typedTerm:\'menu-highlighted\' | unsafe"></a>\n </li>\n</ul>')}]);
2325 2325 ;moment.defaultFormat = 'YYYY-MM-DDTHH:mm';
2326 2326
2327 2327 ;// MIT License:
2328 2328 //
2329 2329 // Copyright (c) 2010-2012, Joe Walnes
2330 2330 //
2331 2331 // Permission is hereby granted, free of charge, to any person obtaining a copy
2332 2332 // of this software and associated documentation files (the "Software"), to deal
2333 2333 // in the Software without restriction, including without limitation the rights
2334 2334 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2335 2335 // copies of the Software, and to permit persons to whom the Software is
2336 2336 // furnished to do so, subject to the following conditions:
2337 2337 //
2338 2338 // The above copyright notice and this permission notice shall be included in
2339 2339 // all copies or substantial portions of the Software.
2340 2340 //
2341 2341 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2342 2342 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2343 2343 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2344 2344 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2345 2345 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2346 2346 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2347 2347 // THE SOFTWARE.
2348 2348
2349 2349 /**
2350 2350 * This behaves like a WebSocket in every way, except if it fails to connect,
2351 2351 * or it gets disconnected, it will repeatedly poll until it succesfully connects
2352 2352 * again.
2353 2353 *
2354 2354 * It is API compatible, so when you have:
2355 2355 * ws = new WebSocket('ws://....');
2356 2356 * you can replace with:
2357 2357 * ws = new ReconnectingWebSocket('ws://....');
2358 2358 *
2359 2359 * The event stream will typically look like:
2360 2360 * onconnecting
2361 2361 * onopen
2362 2362 * onmessage
2363 2363 * onmessage
2364 2364 * onclose // lost connection
2365 2365 * onconnecting
2366 2366 * onopen // sometime later...
2367 2367 * onmessage
2368 2368 * onmessage
2369 2369 * etc...
2370 2370 *
2371 2371 * It is API compatible with the standard WebSocket API.
2372 2372 *
2373 2373 * Latest version: https://github.com/joewalnes/reconnecting-websocket/
2374 2374 * - Joe Walnes
2375 2375 */
2376 2376 function ReconnectingWebSocket(url, protocols) {
2377 2377 protocols = protocols || [];
2378 2378
2379 2379 // These can be altered by calling code.
2380 2380 this.debug = false;
2381 2381 this.reconnectInterval = 1000;
2382 2382 this.timeoutInterval = 2000;
2383 2383
2384 2384 var self = this;
2385 2385 var ws;
2386 2386 var forcedClose = false;
2387 2387 var timedOut = false;
2388 2388
2389 2389 this.url = url;
2390 2390 this.protocols = protocols;
2391 2391 this.readyState = WebSocket.CONNECTING;
2392 2392 this.URL = url; // Public API
2393 2393
2394 2394 this.onopen = function(event) {
2395 2395 };
2396 2396
2397 2397 this.onclose = function(event) {
2398 2398 };
2399 2399
2400 2400 this.onconnecting = function(event) {
2401 2401 };
2402 2402
2403 2403 this.onmessage = function(event) {
2404 2404 };
2405 2405
2406 2406 this.onerror = function(event) {
2407 2407 };
2408 2408
2409 2409 function connect(reconnectAttempt) {
2410 2410 ws = new WebSocket(url, protocols);
2411 2411
2412 2412 self.onconnecting();
2413 2413 if (self.debug || ReconnectingWebSocket.debugAll) {
2414 2414 console.debug('ReconnectingWebSocket', 'attempt-connect', url);
2415 2415 }
2416 2416
2417 2417 var localWs = ws;
2418 2418 var timeout = setTimeout(function() {
2419 2419 if (self.debug || ReconnectingWebSocket.debugAll) {
2420 2420 console.debug('ReconnectingWebSocket', 'connection-timeout', url);
2421 2421 }
2422 2422 timedOut = true;
2423 2423 localWs.close();
2424 2424 timedOut = false;
2425 2425 }, self.timeoutInterval);
2426 2426
2427 2427 ws.onopen = function(event) {
2428 2428 clearTimeout(timeout);
2429 2429 if (self.debug || ReconnectingWebSocket.debugAll) {
2430 2430 console.debug('ReconnectingWebSocket', 'onopen', url);
2431 2431 }
2432 2432 self.readyState = WebSocket.OPEN;
2433 2433 reconnectAttempt = false;
2434 2434 self.onopen(event);
2435 2435 };
2436 2436
2437 2437 ws.onclose = function(event) {
2438 2438 clearTimeout(timeout);
2439 2439 ws = null;
2440 2440 if (forcedClose) {
2441 2441 self.readyState = WebSocket.CLOSED;
2442 2442 self.onclose(event);
2443 2443 } else {
2444 2444 self.readyState = WebSocket.CONNECTING;
2445 2445 self.onconnecting();
2446 2446 if (!reconnectAttempt && !timedOut) {
2447 2447 if (self.debug || ReconnectingWebSocket.debugAll) {
2448 2448 console.debug('ReconnectingWebSocket', 'onclose', url);
2449 2449 }
2450 2450 self.onclose(event);
2451 2451 }
2452 2452 setTimeout(function() {
2453 2453 connect(true);
2454 2454 }, self.reconnectInterval);
2455 2455 }
2456 2456 };
2457 2457 ws.onmessage = function(event) {
2458 2458 if (self.debug || ReconnectingWebSocket.debugAll) {
2459 2459 console.debug('ReconnectingWebSocket', 'onmessage', url, event.data);
2460 2460 }
2461 2461 self.onmessage(event);
2462 2462 };
2463 2463 ws.onerror = function(event) {
2464 2464 if (self.debug || ReconnectingWebSocket.debugAll) {
2465 2465 console.debug('ReconnectingWebSocket', 'onerror', url, event);
2466 2466 }
2467 2467 self.onerror(event);
2468 2468 };
2469 2469 }
2470 2470 connect(url);
2471 2471
2472 2472 this.send = function(data) {
2473 2473 if (ws) {
2474 2474 if (self.debug || ReconnectingWebSocket.debugAll) {
2475 2475 console.debug('ReconnectingWebSocket', 'send', url, data);
2476 2476 }
2477 2477 return ws.send(data);
2478 2478 } else {
2479 2479 throw 'INVALID_STATE_ERR : Pausing to reconnect websocket';
2480 2480 }
2481 2481 };
2482 2482
2483 2483 this.close = function() {
2484 2484 if (ws) {
2485 2485 forcedClose = true;
2486 2486 ws.close();
2487 2487 }
2488 2488 };
2489 2489
2490 2490 /**
2491 2491 * Additional public API method to refresh the connection if still open (close, re-open).
2492 2492 * For example, if the app suspects bad data / missed heart beats, it can try to refresh.
2493 2493 */
2494 2494 this.refresh = function() {
2495 2495 if (ws) {
2496 2496 ws.close();
2497 2497 }
2498 2498 };
2499 2499 }
2500 2500
2501 2501 /**
2502 2502 * Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true.
2503 2503 */
2504 2504 ReconnectingWebSocket.debugAll = false;
2505 2505
2506 2506
2507 2507 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
2508 2508 // #
2509 2509 // # This program is free software: you can redistribute it and/or modify
2510 2510 // # it under the terms of the GNU Affero General Public License, version 3
2511 2511 // # (only), as published by the Free Software Foundation.
2512 2512 // #
2513 2513 // # This program is distributed in the hope that it will be useful,
2514 2514 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
2515 2515 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2516 2516 // # GNU General Public License for more details.
2517 2517 // #
2518 2518 // # You should have received a copy of the GNU Affero General Public License
2519 2519 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
2520 2520 // #
2521 2521 // # This program is dual-licensed. If you wish to learn more about the
2522 2522 // # AppEnlight Enterprise Edition, including its added features, Support
2523 2523 // # services, and proprietary license terms, please see
2524 2524 // # https://rhodecode.com/licenses/
2525 2525
2526 2526 if (!String.prototype.trim) {
2527 2527 String.prototype.trim = function () {
2528 2528 return this.replace(/^\s+|\s+$/g, '');
2529 2529 };
2530 2530
2531 2531 String.prototype.ltrim = function () {
2532 2532 return this.replace(/^\s+/, '');
2533 2533 };
2534 2534
2535 2535 String.prototype.rtrim = function () {
2536 2536 return this.replace(/\s+$/, '');
2537 2537 };
2538 2538
2539 2539 String.prototype.fulltrim = function () {
2540 2540 return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, '').replace(/\s+/g, ' ');
2541 2541 };
2542 2542 }
2543 2543
2544 2544 function decodeEncodedJSON (input){
2545 2545 try{
2546 2546 var val = JSON.parse(input);
2547 2547 delete doc;
2548 2548 return val;
2549 2549 }catch(exc){
2550 2550
2551 2551 delete doc;
2552 2552 }
2553 2553 }
2554 2554
2555 2555 function parseTagsToSearch(searchParams) {
2556 2556 var params = {};
2557 2557 _.each(searchParams.tags, function (t) {
2558 2558 if (!_.has(params, t.type)) {
2559 2559 params[t.type] = [];
2560 2560 }
2561 2561 params[t.type].push(t.value);
2562 2562 });
2563 2563 if (searchParams.page > 1){
2564 2564 params.page = searchParams.page;
2565 2565 }
2566 2566 return params;
2567 2567 }
2568 2568
2569 2569 function parseSearchToTags(search) {
2570 2570 var config = {page: 1, tags: [], type:''};
2571 2571 _.each(_.pairs(search), function (obj) {
2572 2572 if (_.isArray(obj[1])) {
2573 2573 _.each(obj[1], function (obj2) {
2574 2574 config.tags.push({type: obj[0], value: obj2});
2575 2575 })
2576 2576 } else {
2577 2577 if (obj[0] == 'page') {
2578 2578 config.page = obj[1];
2579 2579 }
2580 2580 else if (obj[0] == 'type') {
2581 2581 config.type = obj[1];
2582 2582 }
2583 2583 else {
2584 2584 config.tags.push({type: obj[0], value: obj[1]});
2585 2585 }
2586 2586
2587 2587 }
2588 2588 });
2589 2589 return config;
2590 2590 }
2591 2591
2592 2592
2593 2593 /* returns ISO date string from UTC now - timespan */
2594 2594 function timeSpanToStartDate(timeSpan){
2595 2595 var amount = Number(timeSpan.slice(0,-1));
2596 2596 var unit = timeSpan.slice(-1);
2597 2597 return moment.utc().subtract(amount, unit).format();
2598 2598 }
2599 2599
2600 2600 /* Sets server validation messages on form using angular machinery +
2601 2601 * custom key holding actual error messages */
2602 2602 function setServerValidation(form, errors){
2603 2603
2604 2604 if (typeof form.ae_validation === 'undefined'){
2605 2605 form.ae_validation = {};
2606 2606
2607 2607 }
2608 2608 for (var key in form.ae_validation){
2609 2609 form.ae_validation[key] = [];
2610 2610
2611 2611 }
2612 2612
2613 2613
2614 2614 for (var key in form){
2615 2615 if (key[0] !== '$' && key !== 'ae_validation'){
2616 2616 form[key].$setValidity('ae_validation', true);
2617 2617 }
2618 2618 }
2619 2619 if (typeof errors !== undefined){
2620 2620 for (var key in errors){
2621 2621 if (typeof form[key] !== 'undefined'){
2622 2622 form[key].$setValidity('ae_validation', false);
2623 2623 }
2624 2624 // handle wtforms and colander errors based on
2625 2625 // whether we have list of erors or a single error in a key
2626 2626 if (angular.isArray(errors[key])){
2627 2627 form.ae_validation[key] = errors[key];
2628 2628 }
2629 2629 else{
2630 2630 form.ae_validation[key] = [errors[key]];
2631 2631 }
2632 2632 }
2633 2633 }
2634 2634 return form;
2635 2635 }
2636 2636
2637 2637 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
2638 2638 // #
2639 2639 // # This program is free software: you can redistribute it and/or modify
2640 2640 // # it under the terms of the GNU Affero General Public License, version 3
2641 2641 // # (only), as published by the Free Software Foundation.
2642 2642 // #
2643 2643 // # This program is distributed in the hope that it will be useful,
2644 2644 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
2645 2645 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2646 2646 // # GNU General Public License for more details.
2647 2647 // #
2648 2648 // # You should have received a copy of the GNU Affero General Public License
2649 2649 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
2650 2650 // #
2651 2651 // # This program is dual-licensed. If you wish to learn more about the
2652 2652 // # AppEnlight Enterprise Edition, including its added features, Support
2653 2653 // # services, and proprietary license terms, please see
2654 2654 // # https://rhodecode.com/licenses/
2655 2655
2656 2656 'use strict';
2657 2657
2658 2658 // Declare app level module which depends on filters, and services
2659 2659 angular.module('appenlight.base', [
2660 2660 'ngRoute',
2661 2661 'ui.router',
2662 2662 'ui.router.router',
2663 2663 'underscore',
2664 2664 'ui.bootstrap',
2665 2665 'ngResource',
2666 2666 'ngAnimate',
2667 2667 'ngCookies',
2668 2668 'smart-table',
2669 2669 'angular-toArrayFilter',
2670 2670 'mentio'
2671 2671 ]);
2672 2672
2673 2673 angular.module('appenlight.filters', []);
2674 2674 angular.module('appenlight.templates', []);
2675 2675 angular.module('appenlight.controllers', [
2676 2676 'appenlight.base'
2677 2677 ]);
2678 2678 angular.module('appenlight.components', [
2679 2679 'appenlight.components.channelstream',
2680 2680 'appenlight.components.appenlightApp',
2681 2681 'appenlight.components.appenlightHeader',
2682 2682 'appenlight.components.indexDashboardView',
2683 2683 'appenlight.components.logsBrowserView',
2684 2684 'appenlight.components.reportView',
2685 2685 'appenlight.components.reportsBrowserView',
2686 2686 'appenlight.components.reportsSlowBrowserView',
2687 2687 'appenlight.components.eventBrowserView',
2688 2688 'appenlight.components.userProfileView',
2689 2689 'appenlight.components.userIdentitiesView',
2690 2690 'appenlight.components.userPasswordView',
2691 2691 'appenlight.components.userAuthTokensView',
2692 2692 'appenlight.components.userAlertChannelsListView',
2693 2693 'appenlight.components.userAlertChannelsEmailNewView',
2694 2694 'appenlight.components.applicationsListView',
2695 2695 'appenlight.components.applicationsPurgeLogsView',
2696 2696 'appenlight.components.applicationsUpdateView',
2697 2697 'appenlight.components.integrationsListView',
2698 2698 'appenlight.components.bitbucketIntegrationConfigView',
2699 2699 'appenlight.components.campfireIntegrationConfigView',
2700 2700 'appenlight.components.flowdockIntegrationConfigView',
2701 2701 'appenlight.components.githubIntegrationConfigView',
2702 2702 'appenlight.components.hipchatIntegrationConfigView',
2703 2703 'appenlight.components.jiraIntegrationConfigView',
2704 2704 'appenlight.components.slackIntegrationConfigView',
2705 2705 'appenlight.components.webhooksIntegrationConfigView',
2706 2706 'appenlight.components.adminView',
2707 2707 'appenlight.components.adminApplicationsListView',
2708 2708 'appenlight.components.adminUsersListView',
2709 2709 'appenlight.components.adminUsersCreateView',
2710 2710 'appenlight.components.adminGroupsListView',
2711 2711 'appenlight.components.adminGroupsCreateView',
2712 2712 'appenlight.components.adminConfigurationView',
2713 2713 'appenlight.components.adminSystemView',
2714 2714 'appenlight.components.adminPartitionsView',
2715 2715 'appenlight.components.settingsView'
2716 2716 ]);
2717 2717 angular.module('appenlight.directives', [
2718 2718 'appenlight.directives.c3chart',
2719 2719 'appenlight.directives.confirmValidate',
2720 2720 'appenlight.directives.focus',
2721 2721 'appenlight.directives.formErrors',
2722 2722 'appenlight.directives.humanFormat',
2723 2723 'appenlight.directives.isoToRelativeTime',
2724 2724 'appenlight.directives.permissionsForm',
2725 2725 'appenlight.directives.smallReportGroupList',
2726 2726 'appenlight.directives.smallReportList',
2727 2727 'appenlight.directives.pluginConfig',
2728 2728 'appenlight.directives.recursive',
2729 2729 'appenlight.directives.reportAlertAction',
2730 2730 'appenlight.directives.postProcessAction',
2731 2731 'appenlight.directives.rule',
2732 2732 'appenlight.directives.ruleReadOnly'
2733 2733 ]);
2734 2734 angular.module('appenlight.services', [
2735 2735 'appenlight.services.chartResultParser',
2736 2736 'appenlight.services.resources',
2737 2737 'appenlight.services.stateHolder',
2738 2738 'appenlight.services.typeAheadTagHelper',
2739 2739 'appenlight.services.UUIDProvider'
2740 2740 ]).value('version', '0.1');
2741 2741
2742 2742
2743 2743 var pluginsToLoad = _.map(decodeEncodedJSON(window.AE.plugins),
2744 2744 function(item){
2745 2745 return item.config.angular_module
2746 2746 });
2747 console.info(pluginsToLoad);
2747 2748
2748 2749 angular.module('appenlight.plugins', pluginsToLoad);
2749 2750
2750 2751 var app = angular.module('appenlight', [
2751 2752 'appenlight.base',
2752 2753 'appenlight.config',
2753 2754 'appenlight.templates',
2754 2755 'appenlight.filters',
2755 2756 'appenlight.services',
2756 2757 'appenlight.directives',
2757 2758 'appenlight.controllers',
2758 2759 'appenlight.components',
2759 2760 'appenlight.plugins'
2760 2761 ]);
2761 2762
2762 2763 // needs manual execution because of plugin files
2763 2764 function kickstartAE(initialUserData) {
2764 2765 app.config(['$httpProvider', '$uibTooltipProvider', '$locationProvider', function ($httpProvider, $uibTooltipProvider, $locationProvider) {
2765 2766 $locationProvider.html5Mode(true);
2766 2767 $httpProvider.interceptors.push(['$q', '$rootScope', '$timeout', 'stateHolder', function ($q, $rootScope, $timeout, stateHolder) {
2767 2768 return {
2768 2769 'response': function (response) {
2769 2770 var flashMessages = angular.fromJson(response.headers('x-flash-messages'));
2770 2771 if (flashMessages && flashMessages.length > 0) {
2771 2772 stateHolder.flashMessages.extend(flashMessages);
2772 2773 }
2773 2774 return response;
2774 2775 },
2775 2776 'responseError': function (rejection) {
2776 2777 if (rejection.status > 299 && rejection.status !== 422) {
2777 2778 stateHolder.flashMessages.extend([{
2778 2779 msg: 'Response status code: ' + rejection.status + ', "' + rejection.statusText + '", url: ' + rejection.config.url,
2779 2780 type: 'error'
2780 2781 }]);
2781 2782 }
2782 2783 if (rejection.status == 0) {
2783 2784 stateHolder.flashMessages.extend([{
2784 2785 msg: 'Response timeout',
2785 2786 type: 'error'
2786 2787 }]);
2787 2788 }
2788 2789 var flashMessages = angular.fromJson(rejection.headers('x-flash-messages'));
2789 2790 if (flashMessages && flashMessages.length > 0) {
2790 2791 stateHolder.flashMessages.extend(flashMessages);
2791 2792 }
2792 2793
2793 2794 return $q.reject(rejection);
2794 2795 }
2795 2796 }
2796 2797 }]);
2797 2798
2798 2799 $uibTooltipProvider.options({appendToBody: true});
2799 2800
2800 2801 }]);
2801 2802
2802 2803
2803 2804 app.config(function ($provide) {
2804 2805 $provide.decorator("$exceptionHandler", function ($delegate) {
2805 2806 return function (exception, cause) {
2806 2807 $delegate(exception, cause);
2807 2808 if (typeof AppEnlight !== 'undefined') {
2808 2809 AppEnlight.grabError(exception);
2809 2810 }
2810 2811 };
2811 2812 });
2812 2813 });
2813 2814
2814 2815 app.run(['$rootScope', '$timeout', 'stateHolder', '$state', '$location', '$transitions', '$window', 'AeConfig',
2815 2816 function ($rootScope, $timeout, stateHolder, $state, $location, $transitions, $window, AeConfig) {
2816 2817 if (initialUserData){
2817 2818 stateHolder.AeUser.update(initialUserData);
2819
2820 if (stateHolder.AeUser.hasAppPermission('root_administration'
2821 )){
2822 AeConfig.topNav.menuAdminItems.push(
2823 {'sref': 'admin', 'label': 'Admin Settings'}
2824 )
2825 }
2826
2818 2827 }
2819 2828 $rootScope.$state = $state;
2820 2829 $rootScope.stateHolder = stateHolder;
2821 2830 $rootScope.flash = stateHolder.flashMessages.list;
2822 2831 $rootScope.closeAlert = stateHolder.flashMessages.closeAlert;
2823 2832 $rootScope.AeConfig = AeConfig;
2824 2833
2825 2834 var transitionApp = function($transition$, $state) {
2826 2835 // redirect user to /register unless its one of open views
2827 2836 var isGuestState = [
2828 2837 'report.view_detail',
2829 2838 'report.view_group',
2830 2839 'dashboard.view'
2831 2840 ].indexOf($transition$.to().name) !== -1;
2832 2841
2833 2842 var path = $window.location.pathname;
2834 2843 // strip trailing slash
2835 2844 if (path.substr(path.length - 1) === '/') {
2836 2845 path = path.substr(0, path.length - 1);
2837 2846 }
2838 2847 var isOpenView = false;
2839 2848 var openViews = [
2840 2849 AeConfig.urls.otherRoutes.lostPassword,
2841 2850 AeConfig.urls.otherRoutes.lostPasswordGenerate
2842 2851 ];
2843 2852
2844 2853 _.each(openViews, function (url) {
2845 2854 var url = '/' + url.split('/').slice(3).join('/');
2846 2855 if (url === path) {
2847 2856 isOpenView = true;
2848 2857 }
2849 2858 });
2850 2859 if (stateHolder.AeUser.id === null && !isGuestState && !isOpenView) {
2851 2860 if (window.location.toString().indexOf(AeConfig.urls.otherRoutes.register) === -1) {
2852 2861
2853 2862 var newLocation = AeConfig.urls.otherRoutes.register + '?came_from=' + encodeURIComponent(window.location);
2854 2863 // fix infinite digest here
2855 2864 $rootScope.$on('$locationChangeStart',
2856 2865 function(event, toState, toParams, fromState, fromParams, options){
2857 2866 event.preventDefault();
2858 2867 $window.location = newLocation;
2859 2868 });
2860 2869 $window.location = newLocation;
2861 2870 return false;
2862 2871 }
2863 2872 return false;
2864 2873 }
2865 2874 return true;
2866 2875 };
2867 2876 $transitions.onBefore({}, transitionApp);
2868 2877
2869 2878 }]);
2870 2879 }
2871 2880
2872 2881 ;angular.module('appenlight.templates').run(['$templateCache', function($templateCache) {
2873 2882 'use strict';
2874 2883
2875 2884 $templateCache.put('components/appenlight-app/appenlight-app.html',
2876 2885 "<channelstream config=\"AeConfig\"></channelstream>\n" +
2877 2886 "<appenlight-header></appenlight-header>\n" +
2878 2887 "<div class=\"container\" data-ng-if=\"flash.length\">\n" +
2879 2888 " <div class=\"row\" style=\"margin-bottom: 10px\">\n" +
2880 2889 " <div class=\"col-xs-12\">\n" +
2881 2890 " <uib-alert data-ng-repeat=\"message in flash\"\n" +
2882 2891 " type=\"{{ message.type }}\"\n" +
2883 2892 " close=\"closeAlert($index)\" class=\"animate-repeat\">\n" +
2884 2893 " {{ message.msg }}</uib-alert>\n" +
2885 2894 " </div>\n" +
2886 2895 " </div>\n" +
2887 2896 "</div>\n" +
2888 2897 "\n" +
2889 2898 "<div id=\"outer-content\">\n" +
2890 2899 " <div ui-view class=\"container\"></div>\n" +
2891 2900 "</div>\n"
2892 2901 );
2893 2902
2894 2903
2895 2904 $templateCache.put('components/appenlight-header/appenlight-header.html',
2896 2905 "<!-- Fixed navbar -->\n" +
2897 2906 "<div id=\"top-navbar\" class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n" +
2898 2907 " <div class=\"pattern\">\n" +
2899 2908 " <div class=\"container\">\n" +
2900 2909 " <div class=\"navbar-header pull-left\">\n" +
2901 2910 " <a data-ui-sref=\"front_dashboard\" class=\"navbar-brand\">\n" +
2902 2911 " <div id=\"logo-normal\" class=\"hidden-sm hidden-xs\"></div>\n" +
2903 2912 " <div id=\"logo-icon\" class=\"visible-sm visible-xs\"></div>\n" +
2904 2913 " </a>\n" +
2905 2914 " </div>\n" +
2906 2915 "\n" +
2907 2916 " <div class=\"container-fluid\">\n" +
2908 2917 " <div>\n" +
2909 2918 " <ul class=\"nav navbar-nav navbar-right\" ng-if=\"$ctrl.stateHolder.AeUser.id !== null\">\n" +
2910 2919 " <li id=\"user-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown>\n" +
2911 2920 "\n" +
2912 2921 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
2913 2922 " <span class=\"badge\">{{$ctrl.assignedReports.length}}</span>\n" +
2914 2923 " <span class=\"fa fa-envelope-o\"></span>\n" +
2915 2924 " </a>\n" +
2916 2925 " <ul class=\"dropdown-menu\">\n" +
2917 2926 " <li role=\"presentation\" class=\"dropdown-header\">Assigned reports</li>\n" +
2918 2927 " <li data-ng-repeat=\"report in $ctrl.assignedReports\" role=\"presentation\">\n" +
2919 2928 " <a href=\"{{report.front_url}}\" role=\"menuitem\" tabindex=\"-1\">\n" +
2920 2929 " <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>\n" +
2921 2930 " </a>\n" +
2922 2931 "\n" +
2923 2932 " </li>\n" +
2924 2933 " <li data-ng-if=\"$ctrl.assignedReports.length == 0\"><a><small>No reports</small></a></li>\n" +
2925 2934 " </ul>\n" +
2926 2935 " </li>\n" +
2927 2936 " <li id=\"alert-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown auto-close=\"outsideClick\">\n" +
2928 2937 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
2929 2938 " <span class=\"badge {{ activeEvents ? 'danger' : '' }}\">{{$ctrl.activeEvents}}</span>\n" +
2930 2939 " <span class=\"fa fa-bell-o\"></span></a>\n" +
2931 2940 " <ul class=\"dropdown-menu\">\n" +
2932 2941 " <li role=\"presentation\" class=\"dropdown-header\">\n" +
2933 2942 " <a data-ui-sref=\"events\" class=\"btn btn-xs btn-default\">Show me more</a></li>\n" +
2934 2943 " <li role=\"presentation\" class=\"dropdown-header\">Latest events</li>\n" +
2935 2944 " <li data-ng-repeat=\"event in $ctrl.latestEvents\" role=\"presentation\">\n" +
2936 2945 " <a data-ng-click=\"$ctrl.clickedEvent(event)\"><small class=\"resource-name\">For {{ event.resource_name }}</small><br/>\n" +
2937 2946 " <small>{{ event.text |truncate:65}}</small><br/>\n" +
2938 2947 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\">created: <iso-to-relative-time time=\"{{event.start_date}}\"/></small>\n" +
2939 2948 " <small class=\"date\" data-ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\">closed: <iso-to-relative-time time=\"{{event.end_date}}\"/></small>\n" +
2940 2949 " </a>\n" +
2941 2950 " </li>\n" +
2942 2951 " <li data-ng-if=\"$ctrl.latestEvents.length == 0\"><a><small>No events</small></a></li>\n" +
2943 2952 " </ul>\n" +
2944 2953 " </li>\n" +
2945 2954 "\n" +
2946 2955 " <li id=\"dashboards\" class=\"dropdown\" data-uib-dropdown>\n" +
2947 2956 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Dashboards\">\n" +
2948 2957 " <span class=\"fa fa-bar-chart-o \"></span></a>\n" +
2949 2958 " <ul class=\"dropdown-menu\">\n" +
2950 2959 " <li role=\"presentation\"><a data-ui-sref=\"front_dashboard\">Main dashboard</a></li>\n" +
2951 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menu_dashboards_items\">\n" +
2960 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menuDashboardsItems\">\n" +
2952 2961 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
2953 2962 " </li>\n" +
2954 2963 " </ul>\n" +
2955 2964 " </li>\n" +
2956 2965 "\n" +
2957 2966 " <li class=\"dropdown\" data-uib-dropdown>\n" +
2958 2967 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Reports\">\n" +
2959 2968 " <span class=\"fa fa-exclamation-triangle\"></span></a>\n" +
2960 2969 " <ul class=\"dropdown-menu\">\n" +
2961 2970 " <li role=\"presentation\">\n" +
2962 2971 " <a data-ui-sref=\"report.list({resource:$ctrl.stateHolder.resource})\">Error Reports</a>\n" +
2963 2972 " </li>\n" +
2964 2973 " <li role=\"presentation\">\n" +
2965 2974 " <a data-ui-sref=\"report.list_slow({resource:$ctrl.stateHolder.resource})\">Slowness Reports</a>\n" +
2966 2975 " </li>\n" +
2967 2976 "\n" +
2968 2977 " </ul>\n" +
2969 2978 " </li>\n" +
2970 2979 "\n" +
2971 2980 " <li>\n" +
2972 2981 " <a data-ui-sref=\"logs({resource:$ctrl.stateHolder.resource})\" data-uib-tooltip=\"Logs\" tooltip-placement=\"bottom\"><span class=\"fa fa-list-alt \"></span></a></li>\n" +
2973 2982 " <li>\n" +
2974 2983 " <a data-ui-sref=\"user\" data-uib-tooltip=\"Settings\" tooltip-placement=\"bottom\"><span class=\"fa fa-cog \"></span></a>\n" +
2975 2984 " </li>\n" +
2976 " <li class=\"dropdown\" data-uib-dropdown data-ng-if=\"$ctrl.AeConfig.topNav.menu_admin_items.length\">\n" +
2985 " <li class=\"dropdown\" data-uib-dropdown data-ng-if=\"$ctrl.AeConfig.topNav.menuAdminItems.length\">\n" +
2977 2986 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Admin Settings\">\n" +
2978 2987 " <span class=\"fa fa-wrench\"></span></a>\n" +
2979 2988 " <ul class=\"dropdown-menu\">\n" +
2980 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menu_admin_items\">\n" +
2989 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menuAdminItems\">\n" +
2981 2990 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
2982 2991 " </li>\n" +
2983 2992 " </ul>\n" +
2984 2993 " </li>\n" +
2985 2994 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.signOut }}\" target=\"_self\"\n" +
2986 2995 " data-uib-tooltip=\"Sign out\" tooltip-placement=\"bottom\">\n" +
2987 2996 " <span class=\"fa fa-power-off \"></span></a></li>\n" +
2988 2997 " </ul>\n" +
2989 2998 " <ul class=\"nav navbar-nav pull-right\" ng-if=\"$ctrl.stateHolder.AeUser.id === null\">\n" +
2990 2999 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.register }}\" target=\"_self\" class=\"btn btn-orange\">Sign In</a></li>\n" +
2991 3000 " </ul>\n" +
2992 3001 " </div><!-- /.navbar-collapse -->\n" +
2993 3002 " </div><!-- /.container-fluid -->\n" +
2994 3003 " </div>\n" +
2995 3004 " </div>\n" +
2996 3005 "</div>\n"
2997 3006 );
2998 3007
2999 3008
3000 3009 $templateCache.put('components/views/admin-applications-list-view/admin-applications-list-view.html',
3001 3010 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3002 3011 "\n" +
3003 3012 "<div class=\"panel panel-default\" ng-if=\"!$ctrl.loading.applications\">\n" +
3004 3013 " <div class=\"panel-heading\">\n" +
3005 3014 "\n" +
3006 3015 " Currently active applications: {{$ctrl.applications.length}}\n" +
3007 3016 "\n" +
3008 3017 " </div>\n" +
3009 3018 "\n" +
3010 3019 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.applications\" class=\"table table-striped\">\n" +
3011 3020 " <thead>\n" +
3012 3021 " <tr>\n" +
3013 3022 " <th st-sort=\"resource_name\"><a>Application name</a></th>\n" +
3014 3023 " <th st-sort=\"owner_user_name\"><a>Owner User</a></th>\n" +
3015 3024 " <th st-sort=\"owner_group_name\"><a>Owner Group</a></th>\n" +
3016 3025 " <th class=\"options\"></th>\n" +
3017 3026 " </tr>\n" +
3018 3027 " <tr>\n" +
3019 3028 " <th><input st-search=\"resource_name\" placeholder=\"search for application\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3020 3029 " <th><input st-search=\"owner_user_name\" placeholder=\"search for user\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3021 3030 " <th><input st-search=\"owner_group_name\" placeholder=\"search for group\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3022 3031 " <th></th>\n" +
3023 3032 " </tr>\n" +
3024 3033 " </thead>\n" +
3025 3034 " <tbody>\n" +
3026 3035 "\n" +
3027 3036 " <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
3028 3037 " <td> {{resource.resource_name}}</td>\n" +
3029 3038 " <td>{{resource.owner_user_name}}</td>\n" +
3030 3039 " <td>{{resource.owner_group_name}}</td>\n" +
3031 3040 " <td>\n" +
3032 3041 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"applications.update({resourceId:resource.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span></a>\n" +
3033 3042 " </td>\n" +
3034 3043 " </tr>\n" +
3035 3044 " <tfoot>\n" +
3036 3045 " <tr>\n" +
3037 3046 " <td colspan=\"4\" class=\"text-center\">\n" +
3038 3047 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3039 3048 " </td>\n" +
3040 3049 " </tr>\n" +
3041 3050 " </tfoot>\n" +
3042 3051 " </tbody>\n" +
3043 3052 " </table>\n" +
3044 3053 "\n" +
3045 3054 "</div>\n"
3046 3055 );
3047 3056
3048 3057
3049 3058 $templateCache.put('components/views/admin-configuration-view/admin-configuration-view.html',
3050 3059 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.config\"></ng-include>\n" +
3051 3060 "\n" +
3052 3061 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.config\">\n" +
3053 3062 " <div class=\"panel-heading\">\n" +
3054 3063 " <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
3055 3064 " </div>\n" +
3056 3065 " <div class=\"panel-body\">\n" +
3057 3066 " <h2>Visual</h2>\n" +
3058 3067 " <form class=\"form-horizontal\">\n" +
3059 3068 " <div class=\"form-group\">\n" +
3060 3069 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3061 3070 " Footer HTML\n" +
3062 3071 " </label>\n" +
3063 3072 " <div class=\"col-sm-8 col-lg-9\">\n" +
3064 3073 " <textarea class=\"form-control\" type=\"text\" ng-model=\"$ctrl.configs.global.template_footer_html.value\" style=\"min-height: 150px\"></textarea>\n" +
3065 3074 " </div>\n" +
3066 3075 " </div>\n" +
3067 3076 " </form>\n" +
3068 3077 "\n" +
3069 3078 " <h2>Functional</h2>\n" +
3070 3079 "\n" +
3071 3080 " <form class=\"form-horizontal\">\n" +
3072 3081 " <div class=\"form-group\">\n" +
3073 3082 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3074 3083 " Show user groups to non-admin users\n" +
3075 3084 " </label>\n" +
3076 3085 " <div class=\"col-sm-8 col-lg-9\">\n" +
3077 3086 " <button type=\"button\" class=\"btn btn-default\" ng-model=\"$ctrl.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
3078 3087 " Enable\n" +
3079 3088 " </button>\n" +
3080 3089 " </div>\n" +
3081 3090 " </div>\n" +
3082 3091 " </form>\n" +
3083 3092 "\n" +
3084 3093 " <h2>Global Rate Limiting</h2>\n" +
3085 3094 "\n" +
3086 3095 " <form class=\"form-horizontal\">\n" +
3087 3096 " <div class=\"form-group\">\n" +
3088 3097 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3089 3098 " Ignore reports per minute/per application\n" +
3090 3099 " </label>\n" +
3091 3100 " <div class=\"col-sm-8 col-lg-9\">\n" +
3092 3101 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_reports_rate_limit.value\" />\n" +
3093 3102 " </div>\n" +
3094 3103 " </div>\n" +
3095 3104 "\n" +
3096 3105 " <div class=\"form-group\">\n" +
3097 3106 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3098 3107 " Ignore logs per minute/per application\n" +
3099 3108 " </label>\n" +
3100 3109 " <div class=\"col-sm-8 col-lg-9\">\n" +
3101 3110 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_logs_rate_limit.value\" />\n" +
3102 3111 " </div>\n" +
3103 3112 " </div>\n" +
3104 3113 "\n" +
3105 3114 " <div class=\"form-group\">\n" +
3106 3115 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3107 3116 " Ignore metrics per minute/per application\n" +
3108 3117 " </label>\n" +
3109 3118 " <div class=\"col-sm-8 col-lg-9\">\n" +
3110 3119 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_metrics_rate_limit.value\" />\n" +
3111 3120 " </div>\n" +
3112 3121 " </div>\n" +
3113 3122 "\n" +
3114 3123 " </form>\n" +
3115 3124 "\n" +
3116 3125 " <hr/>\n" +
3117 3126 "\n" +
3118 3127 " <a class=\"btn btn-primary\" ng-click=\"$ctrl.save()\">Save configuration</a>\n" +
3119 3128 " </div>\n" +
3120 3129 "\n" +
3121 3130 "</div>\n" +
3122 3131 "\n" +
3123 3132 "\n" +
3124 3133 "<div class=\"panel panel-default\">\n" +
3125 3134 " <div class=\"panel-heading\">\n" +
3126 3135 " <h3 class=\"panel-title\">Plugin Configuration</h3>\n" +
3127 3136 " </div>\n" +
3128 3137 " <div class=\"panel-body\">\n" +
3129 3138 " <plugin-config section=\"'admin.config'\">\n" +
3130 3139 " </plugin-config>\n" +
3131 3140 " </div>\n" +
3132 3141 "</div>\n"
3133 3142 );
3134 3143
3135 3144
3136 3145 $templateCache.put('components/views/admin-groups-create-view/admin-groups-create-view.html',
3137 3146 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.group\"></ng-include>\n" +
3138 3147 "\n" +
3139 3148 "<div ng-show=\"!$ctrl.loading.group\">\n" +
3140 3149 "\n" +
3141 3150 " <div class=\"panel panel-default\">\n" +
3142 3151 " <div class=\"panel-body\">\n" +
3143 3152 " <form name=\"$ctrl.groupForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.createGroup()\">\n" +
3144 3153 " <div class=\"form-group\" id=\"row-group_name\">\n" +
3145 3154 " <data-form-errors errors=\"$ctrl.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
3146 3155 " <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3147 3156 " Group name\n" +
3148 3157 " <span class=\"required\">*</span>\n" +
3149 3158 " </label>\n" +
3150 3159 " <div class=\"col-sm-8 col-lg-9\">\n" +
3151 3160 " <input class=\"form-control\" id=\"group_name\" name=\"group_name\" type=\"text\" ng-model=\"$ctrl.group.group_name\">\n" +
3152 3161 " </div>\n" +
3153 3162 " </div>\n" +
3154 3163 "\n" +
3155 3164 " <div class=\"form-group\" id=\"row-description\">\n" +
3156 3165 " <data-form-errors errors=\"$ctrl.groupForm.ae_validation.description\"></data-form-errors>\n" +
3157 3166 " <label for=\"description\" id=\"label-description\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3158 3167 " Description\n" +
3159 3168 " <span class=\"required\">*</span>\n" +
3160 3169 " </label>\n" +
3161 3170 " <div class=\"col-sm-8 col-lg-9\">\n" +
3162 3171 " <input class=\"form-control\" id=\"description\" name=\"description\" type=\"text\" ng-model=\"$ctrl.group.description\">\n" +
3163 3172 " </div>\n" +
3164 3173 " </div>\n" +
3165 3174 "\n" +
3166 3175 "\n" +
3167 3176 " <div class=\"form-group\" id=\"row-submit\">\n" +
3168 3177 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3169 3178 " </label>\n" +
3170 3179 " <div class=\"col-sm-8 col-lg-9\">\n" +
3171 3180 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
3172 3181 " </div>\n" +
3173 3182 " </div>\n" +
3174 3183 " </form>\n" +
3175 3184 " </div>\n" +
3176 3185 " </div>\n" +
3177 3186 "\n" +
3178 3187 "\n" +
3179 3188 " <div class=\"panel panel-default\" ng-if=\"$ctrl.group.id\">\n" +
3180 3189 " <div class=\"panel-heading\">\n" +
3181 3190 " <h3 class=\"panel-title\">Permissions summary</h3>\n" +
3182 3191 " </div>\n" +
3183 3192 " <div class=\"panel-body\">\n" +
3184 3193 " <h3>Direct application permissions</h3>\n" +
3185 3194 "\n" +
3186 3195 " <ul class=\"list-group\">\n" +
3187 3196 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
3188 3197 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3189 3198 "\n" +
3190 3199 " <div class=\"pull-right\">\n" +
3191 3200 "\n" +
3192 3201 " <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
3193 3202 "\n" +
3194 3203 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
3195 3204 " <span class=\"fa fa-cog\"></span>\n" +
3196 3205 " </a>\n" +
3197 3206 " </div>\n" +
3198 3207 " </li>\n" +
3199 3208 " </ul>\n" +
3200 3209 "\n" +
3201 3210 " <h3>Direct dashboard permissions</h3>\n" +
3202 3211 "\n" +
3203 3212 " <ul class=\"list-group\">\n" +
3204 3213 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.group.dashboard\" class=\"animate-repeat list-group-item\">\n" +
3205 3214 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3206 3215 "\n" +
3207 3216 " <div class=\"pull-right\">\n" +
3208 3217 " <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
3209 3218 "\n" +
3210 3219 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
3211 3220 " <span class=\"fa fa-cog\"></span>\n" +
3212 3221 " </a>\n" +
3213 3222 " </div>\n" +
3214 3223 " </li>\n" +
3215 3224 " </ul>\n" +
3216 3225 "\n" +
3217 3226 " </div>\n" +
3218 3227 "\n" +
3219 3228 " </div>\n" +
3220 3229 "\n" +
3221 3230 "\n" +
3222 3231 " <div class=\"panel panel-default\" ng-if=\"$ctrl.group.id\">\n" +
3223 3232 " <div class=\"panel-heading\">\n" +
3224 3233 " <h3 class=\"panel-title\">User list</h3>\n" +
3225 3234 " </div>\n" +
3226 3235 " <div class=\"panel-body\">\n" +
3227 3236 "\n" +
3228 3237 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"$ctrl.addUser()\">\n" +
3229 3238 " <div class=\"form-group\">\n" +
3230 3239 " <input placeholder=\"Username or email\" type=\"text\" class=\"autocomplete form-control\" ng-model=\"$ctrl.form.autocompleteUser\" uib-typeahead=\"u for u in $ctrl.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"searchingUsers\" typeahead-wait-ms=\"250\"/>\n" +
3231 3240 " </div>\n" +
3232 3241 " <div class=\"form-group\">\n" +
3233 3242 " <button class=\"btn btn-info\" ng-disabled=\"!$ctrl.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Add user</button>\n" +
3234 3243 " </div>\n" +
3235 3244 " </form>\n" +
3236 3245 "\n" +
3237 3246 " </div>\n" +
3238 3247 "\n" +
3239 3248 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.users\" class=\"table table-striped\">\n" +
3240 3249 " <thead>\n" +
3241 3250 " <tr>\n" +
3242 3251 " <th st-sort=\"user_name\"><a>Username</a></th>\n" +
3243 3252 " <th st-sort=\"email\"><a>Email</a></th>\n" +
3244 3253 " <th st-sort=\"status\"><a>Status</a></th>\n" +
3245 3254 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
3246 3255 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
3247 3256 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
3248 3257 " <th class=\"options\" style=\"width: 130px\"></th>\n" +
3249 3258 " </tr>\n" +
3250 3259 " <tr>\n" +
3251 3260 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3252 3261 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3253 3262 " <th></th>\n" +
3254 3263 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3255 3264 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3256 3265 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3257 3266 " <th></th>\n" +
3258 3267 " </tr>\n" +
3259 3268 " </thead>\n" +
3260 3269 " <tbody>\n" +
3261 3270 "\n" +
3262 3271 " <tr ng-repeat=\"user in displayedCollection\">\n" +
3263 3272 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
3264 3273 " <td>{{user.email}}</td>\n" +
3265 3274 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
3266 3275 " <td>{{user.first_name}}</td>\n" +
3267 3276 " <td>{{user.last_name}}</td>\n" +
3268 3277 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
3269 3278 " <td>\n" +
3270 3279 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3271 3280 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3272 3281 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3273 3282 " <ul class=\"dropdown-menu\">\n" +
3274 3283 " <li><a>No</a></li>\n" +
3275 3284 " <li><a ng-click=\"$ctrl.removeUser(user)\">Yes</a></li>\n" +
3276 3285 " </ul>\n" +
3277 3286 " </span>\n" +
3278 3287 " </tr>\n" +
3279 3288 " <tfoot>\n" +
3280 3289 " <tr>\n" +
3281 3290 " <td colspan=\"7\" class=\"text-center\">\n" +
3282 3291 " <div st-pagination=\"\" st-items-by-page=\"50\" st-displayed-pages=\"7\"></div>\n" +
3283 3292 " </td>\n" +
3284 3293 " </tr>\n" +
3285 3294 " </tfoot>\n" +
3286 3295 " </tbody>\n" +
3287 3296 " </table>\n" +
3288 3297 "\n" +
3289 3298 " </div>\n" +
3290 3299 "\n" +
3291 3300 "\n" +
3292 3301 "</div>\n"
3293 3302 );
3294 3303
3295 3304
3296 3305 $templateCache.put('components/views/admin-groups-list-view/admin-groups-list-view.html',
3297 3306 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.groups\"></ng-include>\n" +
3298 3307 "\n" +
3299 3308 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.groups\">\n" +
3300 3309 "\n" +
3301 3310 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.groups\" class=\"table table-striped\">\n" +
3302 3311 " <thead>\n" +
3303 3312 " <tr>\n" +
3304 3313 " <th st-sort=\"group_name\"><a>Group name</a></th>\n" +
3305 3314 " <th st-sort=\"description\"><a>Description</a></th>\n" +
3306 3315 " <th st-sort=\"members\"><a>Member count</a></th>\n" +
3307 3316 " <th class=\"options\"></th>\n" +
3308 3317 " </tr>\n" +
3309 3318 " <tr>\n" +
3310 3319 " <th><input st-search=\"group_name\" placeholder=\"search for group name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3311 3320 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3312 3321 " <th></th>\n" +
3313 3322 " <th></th>\n" +
3314 3323 " </tr>\n" +
3315 3324 " </thead>\n" +
3316 3325 " <tbody>\n" +
3317 3326 "\n" +
3318 3327 " <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
3319 3328 " <td>{{group.group_name}}</td>\n" +
3320 3329 " <td>{{group.description}}</td>\n" +
3321 3330 " <td>{{group.member_count}}</td>\n" +
3322 3331 " <td>\n" +
3323 3332 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.group.update({groupId:group.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3324 3333 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3325 3334 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3326 3335 " <ul class=\"dropdown-menu\">\n" +
3327 3336 " <li><a>No</a></li>\n" +
3328 3337 " <li><a ng-click=\"$ctrl.removeGroup(group)\">Yes</a></li>\n" +
3329 3338 " </ul>\n" +
3330 3339 " </span>\n" +
3331 3340 " </tr>\n" +
3332 3341 " <tfoot>\n" +
3333 3342 " <tr>\n" +
3334 3343 " <td colspan=\"4\" class=\"text-center\">\n" +
3335 3344 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3336 3345 " </td>\n" +
3337 3346 " </tr>\n" +
3338 3347 " </tfoot>\n" +
3339 3348 " </tbody>\n" +
3340 3349 " </table>\n" +
3341 3350 "\n" +
3342 3351 "</div>\n" +
3343 3352 "\n"
3344 3353 );
3345 3354
3346 3355
3347 3356 $templateCache.put('components/views/admin-partitions-view/admin-partitions-view.html',
3348 3357 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.partitions\"></ng-include>\n" +
3349 3358 "\n" +
3350 3359 "<div ng-show=\"!$ctrl.loading.partitions\">\n" +
3351 3360 "\n" +
3352 3361 " <div class=\"panel panel-default\">\n" +
3353 3362 " <div class=\"panel-heading\">\n" +
3354 3363 " DELETE Daily Partitions\n" +
3355 3364 " </div>\n" +
3356 3365 "\n" +
3357 3366 " <form name=\"$ctrl.dailyPartitionsForm\"\n" +
3358 3367 " novalidate ng-submit=\"$ctrl.partitionsDelete('dailyPartitions')\"\n" +
3359 3368 " class=\"form-inline\"\n" +
3360 3369 " ng-class=\"{'has-error':$ctrl.dailyPartitionsForm.$invalid}\">\n" +
3361 3370 "\n" +
3362 3371 " <div class=\"panel-body\">\n" +
3363 3372 "\n" +
3364 3373 " <input type=\"text\" name=\"confirm\"\n" +
3365 3374 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control input-autosize\" confirm-validate required ng-model=\"$ctrl.dailyConfirm\">\n" +
3366 3375 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"$ctrl.dailyPartitionsForm.$invalid\">\n" +
3367 3376 " <input type=\"checkbox\" ng-model=\"$ctrl.dailyChecked\" ng-change=\"$ctrl.setCheckedList('dailyPartitions')\"> Check All\n" +
3368 3377 "\n" +
3369 3378 " </div>\n" +
3370 3379 "\n" +
3371 3380 " <table class=\"table table-striped\">\n" +
3372 3381 " <tr>\n" +
3373 3382 " <th class=\"c1 date\">Date</th>\n" +
3374 3383 " <th class=\"c2 indices\">Indices</th>\n" +
3375 3384 " </tr>\n" +
3376 3385 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.dailyPartitions\">\n" +
3377 3386 " <td class=\"c1\">{{row[0]}}</td>\n" +
3378 3387 " <td class=\"c2\">\n" +
3379 3388 " <ul class=\"list-group\">\n" +
3380 3389 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
3381 3390 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
3382 3391 " </li>\n" +
3383 3392 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
3384 3393 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
3385 3394 " </li>\n" +
3386 3395 " </ul>\n" +
3387 3396 " </td>\n" +
3388 3397 " </tr>\n" +
3389 3398 " </table>\n" +
3390 3399 " </form>\n" +
3391 3400 "\n" +
3392 3401 " </div>\n" +
3393 3402 "\n" +
3394 3403 " <div class=\"panel panel-default\">\n" +
3395 3404 " <div class=\"panel-heading\">\n" +
3396 3405 " DELETE Permanent Partitions\n" +
3397 3406 " </div>\n" +
3398 3407 "\n" +
3399 3408 " <form name=\"$ctrl.permanentPartitionsForm\" novalidate\n" +
3400 3409 " ng-submit=\"$ctrl.partitionsDelete('permanentPartitions')\"\n" +
3401 3410 " class=\"form-inline\"\n" +
3402 3411 " ng-class=\"{'has-error':$ctrl.permanentPartitionsForm.$invalid}\">\n" +
3403 3412 "\n" +
3404 3413 "\n" +
3405 3414 " <div class=\"panel-body\">\n" +
3406 3415 "\n" +
3407 3416 " <div class=\"form-group\">\n" +
3408 3417 " <input type=\"text\" name=\"confirm\"\n" +
3409 3418 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"$ctrl.permConfirm\">\n" +
3410 3419 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"$ctrl.permanentPartitionsForm.$invalid\">\n" +
3411 3420 " <input type=\"checkbox\" ng-model=\"$ctrl.permChecked\" ng-change=\"$ctrl.setCheckedList('permanentPartitions')\"> Check All\n" +
3412 3421 " </div>\n" +
3413 3422 "\n" +
3414 3423 " </div>\n" +
3415 3424 "\n" +
3416 3425 " <table class=\"table table-striped\">\n" +
3417 3426 " <tr>\n" +
3418 3427 " <th class=\"c1 date\">Date</th>\n" +
3419 3428 " <th class=\"c2 indices\">Indices</th>\n" +
3420 3429 " </tr>\n" +
3421 3430 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.permanentPartitions\">\n" +
3422 3431 " <td class=\"c1\">{{row[0]}}</td>\n" +
3423 3432 " <td class=\"c2\">\n" +
3424 3433 " <ul class=\"list-group\">\n" +
3425 3434 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
3426 3435 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
3427 3436 " </li>\n" +
3428 3437 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
3429 3438 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
3430 3439 " </li>\n" +
3431 3440 " </ul>\n" +
3432 3441 " </td>\n" +
3433 3442 " </tr>\n" +
3434 3443 " </table>\n" +
3435 3444 " </form>\n" +
3436 3445 "\n" +
3437 3446 " </div>\n" +
3438 3447 "\n" +
3439 3448 "</div>\n"
3440 3449 );
3441 3450
3442 3451
3443 3452 $templateCache.put('components/views/admin-system-view/admin-system-view.html',
3444 3453 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.system\"></ng-include>\n" +
3445 3454 "\n" +
3446 3455 "<div ng-if=\"$ctrl.loading.system == false\">\n" +
3447 3456 " <div class=\"row\">\n" +
3448 3457 " <div class=\"col-sm-12\">\n" +
3449 3458 " <div class=\"panel panel-default\">\n" +
3450 3459 " <div class=\"panel-heading\">\n" +
3451 3460 " <h3 class=\"panel-title\">\n" +
3452 3461 " System Info\n" +
3453 3462 " </h3>\n" +
3454 3463 " </div>\n" +
3455 3464 " <div class=\"panel-body\">\n" +
3456 3465 "\n" +
3457 3466 " <p><strong>System Load:</strong>\n" +
3458 3467 " 1min: {{$ctrl.systemLoad[0]}}, 5min: {{$ctrl.systemLoad[1]}}, 15min: {{$ctrl.systemLoad[2]}}\n" +
3459 3468 " </p>\n" +
3460 3469 " <p><strong>Awaiting tasks:</strong>\n" +
3461 3470 " <ul>\n" +
3462 3471 " <li>reports: {{$ctrl.queueStats.waiting_reports}}</li>\n" +
3463 3472 " <li>logs: {{$ctrl.queueStats.waiting_logs}}</li>\n" +
3464 3473 " <li>metrics: {{$ctrl.queueStats.waiting_metrics}}</li>\n" +
3465 3474 " <li>other: {{$ctrl.queueStats.waiting_other}}</li>\n" +
3466 3475 " </ul>\n" +
3467 3476 " </p>\n" +
3468 3477 " <p><strong>Queue stats from last minute:</strong>\n" +
3469 3478 " <ul>\n" +
3470 3479 " <li>Processed reports: {{$ctrl.queueStats.processed_reports}}</li>\n" +
3471 3480 " <li>Processed logs: {{$ctrl.queueStats.processed_logs}}</li>\n" +
3472 3481 " <li>Processed metrics: {{$ctrl.queueStats.processed_metrics}}</li>\n" +
3473 3482 " </ul>\n" +
3474 3483 " </p>\n" +
3475 3484 "\n" +
3476 3485 " <p><strong>Disks:</strong>\n" +
3477 3486 " <ul>\n" +
3478 3487 " <li ng-repeat=\"disk in $ctrl.disks\">\n" +
3479 3488 " <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
3480 3489 " </li>\n" +
3481 3490 " </ul>\n" +
3482 3491 " </p>\n" +
3483 3492 "\n" +
3484 3493 " <p><strong>Process stats:</strong>\n" +
3485 3494 " <ul>\n" +
3486 3495 " <li>FD soft limits: {{$ctrl.selfInfo.fds.soft}}</li>\n" +
3487 3496 " <li>FD hard limits: {{$ctrl.selfInfo.fds.hard}}</li>\n" +
3488 3497 " <li>Memlock soft limits: {{$ctrl.selfInfo.memlock.soft}}</li>\n" +
3489 3498 " <li>Memlock hard limits: {{$ctrl.selfInfo.memlock.hard}}</li>\n" +
3490 3499 " </ul>\n" +
3491 3500 " </p>\n" +
3492 3501 "\n" +
3493 3502 " </div>\n" +
3494 3503 " </div>\n" +
3495 3504 " </div>\n" +
3496 3505 " </div>\n" +
3497 3506 " <div class=\"row\">\n" +
3498 3507 " <div class=\"col-sm-12\">\n" +
3499 3508 "\n" +
3500 3509 " <div class=\"panel panel-default\">\n" +
3501 3510 " <div class=\"panel-body\">\n" +
3502 3511 "\n" +
3503 3512 " <uib-tabset>\n" +
3504 3513 " <uib-tab>\n" +
3505 3514 " <uib-tab-heading>\n" +
3506 3515 " Postgresql Tables\n" +
3507 3516 " </uib-tab-heading>\n" +
3508 3517 "\n" +
3509 3518 " <table class=\"table table-striped\">\n" +
3510 3519 " <thead>\n" +
3511 3520 " <tr>\n" +
3512 3521 " <th class=\"c1 tablename\">Table name</th>\n" +
3513 3522 " <th class=\"c2 size_human\">Size</th>\n" +
3514 3523 " </tr>\n" +
3515 3524 " </thead>\n" +
3516 3525 " <tbody>\n" +
3517 3526 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.DBtables\">\n" +
3518 3527 " <td class=\"c1\">{{row.table_name}}</td>\n" +
3519 3528 " <td class=\"c2\">{{row.size_human}}</td>\n" +
3520 3529 " </tr>\n" +
3521 3530 " </tbody>\n" +
3522 3531 " </table>\n" +
3523 3532 "\n" +
3524 3533 " </uib-tab>\n" +
3525 3534 "\n" +
3526 3535 " <uib-tab>\n" +
3527 3536 " <uib-tab-heading>\n" +
3528 3537 " Elasticsearch Indices\n" +
3529 3538 " </uib-tab-heading>\n" +
3530 3539 "\n" +
3531 3540 " <table class=\"table table-striped\">\n" +
3532 3541 " <thead>\n" +
3533 3542 " <tr>\n" +
3534 3543 " <th class=\"c1 tablename\">Index name</th>\n" +
3535 3544 " <th class=\"c2 size_human\">Size</th>\n" +
3536 3545 " </tr>\n" +
3537 3546 " </thead>\n" +
3538 3547 " <tbody>\n" +
3539 3548 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.ESIndices\">\n" +
3540 3549 " <td class=\"c1\">{{row.name}}</td>\n" +
3541 3550 " <td class=\"c2\">{{row.size_human}}</td>\n" +
3542 3551 " </tr>\n" +
3543 3552 " </tbody>\n" +
3544 3553 " </table>\n" +
3545 3554 "\n" +
3546 3555 " </uib-tab>\n" +
3547 3556 "\n" +
3548 3557 " <uib-tab>\n" +
3549 3558 " <uib-tab-heading>\n" +
3550 3559 " Processes\n" +
3551 3560 " </uib-tab-heading>\n" +
3552 3561 "\n" +
3553 3562 " <table class=\"table table-striped\">\n" +
3554 3563 " <thead>\n" +
3555 3564 " <tr>\n" +
3556 3565 " <th class=\"c1 tablename\">Owner</th>\n" +
3557 3566 " <th class=\"c2 tablename\">PID</th>\n" +
3558 3567 " <th class=\"c3 tablename\">CPU</th>\n" +
3559 3568 " <th class=\"c4 tablename\">MEM</th>\n" +
3560 3569 " <th class=\"c4 tablename\">Name</th>\n" +
3561 3570 " </tr>\n" +
3562 3571 " </thead>\n" +
3563 3572 " <tbody>\n" +
3564 3573 " <tr class=\"r{{$index}}\" ng-repeat-start=\"row in $ctrl.processInfo\">\n" +
3565 3574 " <td class=\"c1\">{{row.owner}}</td>\n" +
3566 3575 " <td class=\"c2\">{{row.pid}}</td>\n" +
3567 3576 " <td class=\"c3\">{{row.cpu}}</td>\n" +
3568 3577 " <td class=\"c4\">{{row.mem_usage}} ({{row.mem_percentage}}%)</td>\n" +
3569 3578 " <td class=\"c5\"><strong>{{row.name}}</strong></td>\n" +
3570 3579 " </tr>\n" +
3571 3580 " <tr ng-repeat-end>\n" +
3572 3581 " <td colspan=\"5\" class=\"word-wrap\">{{row.command}}</td>\n" +
3573 3582 " </tr>\n" +
3574 3583 " </tbody>\n" +
3575 3584 " </table>\n" +
3576 3585 "\n" +
3577 3586 " </uib-tab>\n" +
3578 3587 "\n" +
3579 3588 " <uib-tab>\n" +
3580 3589 " <uib-tab-heading>\n" +
3581 3590 " Python packages\n" +
3582 3591 " </uib-tab-heading>\n" +
3583 3592 "\n" +
3584 3593 " <table class=\"table\">\n" +
3585 3594 " <tr ng-repeat=\"package in $ctrl.packages\">\n" +
3586 3595 " <td>{{package.name}}</td>\n" +
3587 3596 " <td>{{package.version}}</td>\n" +
3588 3597 " </tr>\n" +
3589 3598 " </table>\n" +
3590 3599 " </p>\n" +
3591 3600 "\n" +
3592 3601 " </uib-tab>\n" +
3593 3602 "\n" +
3594 3603 " </uib-tabset>\n" +
3595 3604 " </div>\n" +
3596 3605 " </div>\n" +
3597 3606 " </div>\n" +
3598 3607 " </div>\n" +
3599 3608 "</div>\n"
3600 3609 );
3601 3610
3602 3611
3603 3612 $templateCache.put('components/views/admin-users-create-view/admin-users-create-view.html',
3604 3613 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.user\"></ng-include>\n" +
3605 3614 "\n" +
3606 3615 "<div ng-show=\"!$ctrl.loading.user\">\n" +
3607 3616 "\n" +
3608 3617 " <div class=\"panel panel-default\">\n" +
3609 3618 " <div class=\"panel-body\">\n" +
3610 3619 "\n" +
3611 3620 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"$ctrl.user.id\">\n" +
3612 3621 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
3613 3622 " <ul class=\"dropdown-menu\">\n" +
3614 3623 " <li><a>No</a></li>\n" +
3615 3624 " <li><a ng-click=\"$ctrl.reloginUser(user)\">Yes</a></li>\n" +
3616 3625 " </ul>\n" +
3617 3626 " </span>\n" +
3618 3627 "\n" +
3619 3628 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.createUser()\">\n" +
3620 3629 " <div class=\"form-group\" id=\"row-user_name\">\n" +
3621 3630 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.user_name\"></data-form-errors>\n" +
3622 3631 " <label for=\"user_name\" id=\"label-user_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3623 3632 " User name\n" +
3624 3633 " <span class=\"required\">*</span>\n" +
3625 3634 " </label>\n" +
3626 3635 " <div class=\"col-sm-8 col-lg-9\">\n" +
3627 3636 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.user.user_name\">\n" +
3628 3637 " </div>\n" +
3629 3638 " </div>\n" +
3630 3639 "\n" +
3631 3640 " <div class=\"form-group\" id=\"row-user_password\">\n" +
3632 3641 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
3633 3642 " <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3634 3643 " Password\n" +
3635 3644 " <span class=\"required\">*</span>\n" +
3636 3645 " </label>\n" +
3637 3646 " <div class=\"col-sm-8 col-lg-9\">\n" +
3638 3647 " <input class=\"form-control\" id=\"user_password\" name=\"user_password\" type=\"password\" ng-model=\"$ctrl.user.user_password\">\n" +
3639 3648 "\n" +
3640 3649 " <p class=\"m-t-1\"><a class=\"btn btn-info btn-sm\" ng-click=\"$ctrl.generatePassword()\"><span class=\"fa fa-lock\"></span> Generate password</a>\n" +
3641 3650 " <span ng-show=\"$ctrl.gen_pass.length > 0\">(generated password: {{$ctrl.gen_pass}})</span>\n" +
3642 3651 " </p>\n" +
3643 3652 "\n" +
3644 3653 " </div>\n" +
3645 3654 " </div>\n" +
3646 3655 "\n" +
3647 3656 "\n" +
3648 3657 " <div class=\"form-group\" id=\"row-email\">\n" +
3649 3658 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
3650 3659 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3651 3660 " Email Address\n" +
3652 3661 " <span class=\"required\">*</span>\n" +
3653 3662 " </label>\n" +
3654 3663 " <div class=\"col-sm-8 col-lg-9\">\n" +
3655 3664 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
3656 3665 " </div>\n" +
3657 3666 " </div>\n" +
3658 3667 "\n" +
3659 3668 " <div class=\"form-group\" id=\"row-first_name\">\n" +
3660 3669 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
3661 3670 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3662 3671 " First Name\n" +
3663 3672 " </label>\n" +
3664 3673 " <div class=\"col-sm-8 col-lg-9\">\n" +
3665 3674 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
3666 3675 " </div>\n" +
3667 3676 " </div>\n" +
3668 3677 " <div class=\"form-group\" id=\"row-last_name\">\n" +
3669 3678 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
3670 3679 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3671 3680 " Last Name\n" +
3672 3681 " </label>\n" +
3673 3682 " <div class=\"col-sm-8 col-lg-9\">\n" +
3674 3683 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
3675 3684 " </div>\n" +
3676 3685 " </div>\n" +
3677 3686 "\n" +
3678 3687 " <div class=\"form-group\" id=\"row-status\">\n" +
3679 3688 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.status\"></data-form-errors>\n" +
3680 3689 " <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3681 3690 " Active\n" +
3682 3691 " </label>\n" +
3683 3692 " <div class=\"col-sm-8 col-lg-9\">\n" +
3684 3693 " <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"$ctrl.user.status\">\n" +
3685 3694 " </div>\n" +
3686 3695 " </div>\n" +
3687 3696 "\n" +
3688 3697 " <div class=\"form-group\" id=\"row-submit\">\n" +
3689 3698 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3690 3699 " </label>\n" +
3691 3700 " <div class=\"col-sm-8 col-lg-9\">\n" +
3692 3701 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.$state.params.userId ? 'Update' : 'Add'}} User\">\n" +
3693 3702 " </div>\n" +
3694 3703 " </div>\n" +
3695 3704 " </form>\n" +
3696 3705 " </div>\n" +
3697 3706 " </div>\n" +
3698 3707 "\n" +
3699 3708 "\n" +
3700 3709 " <div class=\"panel panel-default\" ng-if=\"$ctrl.user.id\">\n" +
3701 3710 " <div class=\"panel-heading\">\n" +
3702 3711 " <h3 class=\"panel-title\">Permission Summary</h3>\n" +
3703 3712 " </div>\n" +
3704 3713 " <div class=\"panel-body\">\n" +
3705 3714 " <h3>Direct application permissions</h3>\n" +
3706 3715 "\n" +
3707 3716 " <ul class=\"list-group\">\n" +
3708 3717 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
3709 3718 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3710 3719 " <div class=\"pull-right\">\n" +
3711 3720 "\n" +
3712 3721 " <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
3713 3722 "\n" +
3714 3723 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
3715 3724 " <span class=\"fa fa-cog\"></span>\n" +
3716 3725 " </a>\n" +
3717 3726 " </div>\n" +
3718 3727 " </li>\n" +
3719 3728 " </ul>\n" +
3720 3729 "\n" +
3721 3730 " <h3>Direct dashboard permissions</h3>\n" +
3722 3731 "\n" +
3723 3732 " <ul class=\"list-group\">\n" +
3724 3733 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
3725 3734 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3726 3735 " <div class=\"pull-right\">\n" +
3727 3736 "\n" +
3728 3737 " <span class=\"btn btn-primary btn-xs m-r-1\" disabled ng-repeat=\"perm_name in perm.permissions\">{{ perm.self.owner ? 'Resource owner' : perm_name }}</span>\n" +
3729 3738 "\n" +
3730 3739 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
3731 3740 " <span class=\"fa fa-cog\"></span>\n" +
3732 3741 " </a>\n" +
3733 3742 " </div>\n" +
3734 3743 " </li>\n" +
3735 3744 " </ul>\n" +
3736 3745 "\n" +
3737 3746 " </div>\n" +
3738 3747 "\n" +
3739 3748 " </div>\n" +
3740 3749 "\n" +
3741 3750 "\n" +
3742 3751 "</div>\n"
3743 3752 );
3744 3753
3745 3754
3746 3755 $templateCache.put('components/views/admin-users-list-view/admin-users-list-view.html',
3747 3756 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.users\"></ng-include>\n" +
3748 3757 "\n" +
3749 3758 "<div ng-show=\"!$ctrl.loading.users\">\n" +
3750 3759 "\n" +
3751 3760 " <div class=\"panel panel-default\">\n" +
3752 3761 "\n" +
3753 3762 " <div class=\"panel-heading\">\n" +
3754 3763 " {{$ctrl.activeUsers}} active out of {{$ctrl.users.length}} users\n" +
3755 3764 " </div>\n" +
3756 3765 "\n" +
3757 3766 "\n" +
3758 3767 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.users\" class=\"table table-striped\">\n" +
3759 3768 " <thead>\n" +
3760 3769 " <tr>\n" +
3761 3770 " <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
3762 3771 " <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
3763 3772 " <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
3764 3773 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
3765 3774 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
3766 3775 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
3767 3776 " <th class=\"options\"></th>\n" +
3768 3777 " </tr>\n" +
3769 3778 " <tr>\n" +
3770 3779 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3771 3780 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3772 3781 " <th></th>\n" +
3773 3782 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3774 3783 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3775 3784 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3776 3785 " <th></th>\n" +
3777 3786 " </tr>\n" +
3778 3787 " </thead>\n" +
3779 3788 " <tbody>\n" +
3780 3789 "\n" +
3781 3790 " <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
3782 3791 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
3783 3792 " <td class=\"word-wrap small\">{{user.email}}</td>\n" +
3784 3793 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
3785 3794 " <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
3786 3795 " <td class=\"word-wrap small\">{{user.last_name}}</td>\n" +
3787 3796 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\" class=\"small\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
3788 3797 " <td>\n" +
3789 3798 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3790 3799 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3791 3800 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3792 3801 " <ul class=\"dropdown-menu\">\n" +
3793 3802 " <li><a>No</a></li>\n" +
3794 3803 " <li><a ng-click=\"$ctrl.removeUser(user)\">Yes</a></li>\n" +
3795 3804 " </ul>\n" +
3796 3805 " </span>\n" +
3797 3806 " </tr>\n" +
3798 3807 " <tfoot>\n" +
3799 3808 " <tr>\n" +
3800 3809 " <td colspan=\"6\" class=\"text-center\">\n" +
3801 3810 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3802 3811 " </td>\n" +
3803 3812 " </tr>\n" +
3804 3813 " </tfoot>\n" +
3805 3814 " </tbody>\n" +
3806 3815 " </table>\n" +
3807 3816 "\n" +
3808 3817 "\n" +
3809 3818 " </div>\n" +
3810 3819 "</div>\n"
3811 3820 );
3812 3821
3813 3822
3814 3823 $templateCache.put('components/views/admin-view/admin-view.html',
3815 3824 "<div class=\"row\">\n" +
3816 3825 " <div class=\"col-sm-3\" id=\"menu\">\n" +
3817 3826 " <div class=\"panel panel-default\">\n" +
3818 3827 " <div class=\"panel-heading\">Users and groups</div>\n" +
3819 3828 " <ul class=\"list-group\">\n" +
3820 3829 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.list\"> Users</a></li>\n" +
3821 3830 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.create\"> Create user</a></li>\n" +
3822 3831 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.list\"> Groups</a></li>\n" +
3823 3832 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.create\"> Create group</a></li>\n" +
3824 3833 " </ul>\n" +
3825 3834 " </div>\n" +
3826 3835 " <div class=\"panel panel-default\">\n" +
3827 3836 " <div class=\"panel-heading\">Resources</div>\n" +
3828 3837 " <ul class=\"list-group\">\n" +
3829 3838 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.application.list\"> List applications</a></li>\n" +
3830 3839 " </ul>\n" +
3831 3840 " </div>\n" +
3832 3841 "\n" +
3833 3842 " <div class=\"panel panel-default\">\n" +
3834 3843 " <div class=\"panel-heading\">System</div>\n" +
3835 3844 " <ul class=\"list-group\">\n" +
3836 3845 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.configs.list\"> Config variables</a></li>\n" +
3837 3846 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.system\"> System</a></li>\n" +
3838 3847 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.partitions\"> Partition Management</a></li>\n" +
3839 3848 " </ul>\n" +
3840 3849 " </div>\n" +
3841 3850 " </div>\n" +
3842 3851 "\n" +
3843 3852 " <div class=\"col-sm-9\" ui-view></div>\n" +
3844 3853 "</div>\n"
3845 3854 );
3846 3855
3847 3856
3848 3857 $templateCache.put('components/views/applications-integrations-view/applications-integrations-view.html',
3849 3858 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application && $state.is('applications.integrations')\"></ng-include>\n" +
3850 3859 "\n" +
3851 3860 "<ui-view>\n" +
3852 3861 " <div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application\">\n" +
3853 3862 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3854 3863 " <div class=\"panel-body\">\n" +
3855 3864 "\n" +
3856 3865 " <a class=\"btn btn-default integration\"\n" +
3857 3866 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'bitbucket'})\">\n" +
3858 3867 " <span class=\"fa fa-fw fa-bitbucket fa-3x pull-left\"></span>\n" +
3859 3868 " <strong>Bitbucket</strong>\n" +
3860 3869 "\n" +
3861 3870 " <p>Send issues and reports to Bitbucket</p>\n" +
3862 3871 " </a>\n" +
3863 3872 "\n" +
3864 3873 " <a class=\"btn btn-default integration\"\n" +
3865 3874 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'campfire'})\">\n" +
3866 3875 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3867 3876 " <strong>Campfire</strong>\n" +
3868 3877 "\n" +
3869 3878 " <p>Receive reports and alerts in your Campfire rooms</p>\n" +
3870 3879 " </a>\n" +
3871 3880 "\n" +
3872 3881 " <a class=\"btn btn-default integration\"\n" +
3873 3882 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'flowdock'})\">\n" +
3874 3883 " <span class=\"fa fa-fw fa-envelope fa-3x pull-left\"></span>\n" +
3875 3884 " <strong>Flowdock</strong>\n" +
3876 3885 "\n" +
3877 3886 " <p>Receive reports and alerts on your Flowdock team\n" +
3878 3887 " inbox</p>\n" +
3879 3888 " </a>\n" +
3880 3889 "\n" +
3881 3890 " <a class=\"btn btn-default integration\"\n" +
3882 3891 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'github'})\">\n" +
3883 3892 " <span class=\"fa fa-fw fa-github fa-3x pull-left\"></span>\n" +
3884 3893 " <strong>Github</strong>\n" +
3885 3894 "\n" +
3886 3895 " <p>Send issues and reports to Github</p>\n" +
3887 3896 " </a>\n" +
3888 3897 "\n" +
3889 3898 " <a class=\"btn btn-default integration\"\n" +
3890 3899 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'hipchat'})\">\n" +
3891 3900 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3892 3901 " <strong>HipChat</strong>\n" +
3893 3902 "\n" +
3894 3903 " <p>Receive reports and alerts in your Hipchat chanels</p>\n" +
3895 3904 " </a>\n" +
3896 3905 "\n" +
3897 3906 " <a class=\"btn btn-default integration\"\n" +
3898 3907 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'jira'})\">\n" +
3899 3908 " <span class=\"fa fa-fw fa-ticket fa-3x pull-left\"></span>\n" +
3900 3909 " <strong>Jira</strong>\n" +
3901 3910 "\n" +
3902 3911 " <p>Send issues and reports to Jira</p>\n" +
3903 3912 " </a>\n" +
3904 3913 "\n" +
3905 3914 " <a class=\"btn btn-default integration\"\n" +
3906 3915 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'slack'})\">\n" +
3907 3916 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3908 3917 " <strong>Slack</strong>\n" +
3909 3918 "\n" +
3910 3919 " <p>Receive reports and alerts in your Slack chanels</p>\n" +
3911 3920 " </a>\n" +
3912 3921 "\n" +
3913 3922 " <a class=\"btn btn-default integration\"\n" +
3914 3923 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'webhooks'})\">\n" +
3915 3924 " <span class=\"fa fa-fw fa-cloud-upload fa-3x pull-left\"></span>\n" +
3916 3925 " <strong>Webhooks</strong>\n" +
3917 3926 "\n" +
3918 3927 " <p>Notify third party API's of your reports and alerts</p>\n" +
3919 3928 " </a>\n" +
3920 3929 " </div>\n" +
3921 3930 " </div>\n" +
3922 3931 "</ui-view>\n"
3923 3932 );
3924 3933
3925 3934
3926 3935 $templateCache.put('components/views/applications-list-view/applications-list-view.html',
3927 3936 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3928 3937 "\n" +
3929 3938 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.applications\">\n" +
3930 3939 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3931 3940 " <div class=\"panel-body\" ng-if=\"$ctrl.applications.length === 0 \">\n" +
3932 3941 "\n" +
3933 3942 " <p>You have to create a new application first.</p>\n" +
3934 3943 "\n" +
3935 3944 " </div>\n" +
3936 3945 "\n" +
3937 3946 " <table class=\"table table-striped\" ng-if=\"$ctrl.applications.length > 0\">\n" +
3938 3947 " <thead>\n" +
3939 3948 " <tr>\n" +
3940 3949 " <th class=\"resource_name\">Resource Name</th>\n" +
3941 3950 " <th class=\"domains\">Domains</th>\n" +
3942 3951 " <th class=\"options\">Options</th>\n" +
3943 3952 " </tr>\n" +
3944 3953 " </thead>\n" +
3945 3954 " <tbody>\n" +
3946 3955 " <tr class=\"r{{$index+1}}\" ng-repeat=\"application in $ctrl.applications\">\n" +
3947 3956 " <td>{{application.resource_name}}</td>\n" +
3948 3957 " <td>{{application.domains}}</td>\n" +
3949 3958 " <td class=\"options\">\n" +
3950 3959 " <a class=\"btn btn-default\" data-ui-sref=\"applications.update({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Update application\"><span class=\"fa fa-cog\"></span> Update</a>\n" +
3951 3960 " <a class=\"btn btn-default\" data-ui-sref=\"applications.integrations({resourceId:application.resource_id})\" data-toggle=\"tooltip\" title=\"Manage Integrations\"><span class=\"fa fa-wrench\"></span> Integrations</a>\n" +
3952 3961 " </td>\n" +
3953 3962 " </tr>\n" +
3954 3963 " </tbody>\n" +
3955 3964 " </table>\n" +
3956 3965 "\n" +
3957 3966 "</div>\n"
3958 3967 );
3959 3968
3960 3969
3961 3970 $templateCache.put('components/views/applications-purge-logs-view/applications-purge-logs-view.html',
3962 3971 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3963 3972 "\n" +
3964 3973 "<div ng-show=\"!$ctrl.loading.applications\">\n" +
3965 3974 " <div class=\"panel panel-default\">\n" +
3966 3975 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3967 3976 " <div class=\"panel-body\">\n" +
3968 3977 "\n" +
3969 3978 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.form\" ng-submit=\"$ctrl.purgeLogs()\">\n" +
3970 3979 " <div class=\"form-group\">\n" +
3971 3980 " <label class=\"control-label col-sm-3 col-lg-2\">Application:</label>\n" +
3972 3981 "\n" +
3973 3982 " <div class=\"col-sm-9 col-lg-10 form-inline\">\n" +
3974 3983 " <select ng-model=\"$ctrl.selectedResource\" ng-change=\"$ctrl.getCommonKeys()\"\n" +
3975 3984 " ng-options=\"r.resource_id as r.resource_name for r in $ctrl.applications\" class=\"form-control\"></select>\n" +
3976 3985 " </div>\n" +
3977 3986 " </div>\n" +
3978 3987 "\n" +
3979 3988 " <div class=\"form-group\">\n" +
3980 3989 " <label class=\"control-label col-sm-3 col-lg-2\">Namespace:</label>\n" +
3981 3990 "\n" +
3982 3991 " <div class=\"col-sm-9 col-lg-10\">\n" +
3983 3992 " <input type=\"text\" name=\"namespace\" ng-model=\"$ctrl.namespace\"\n" +
3984 3993 " placeholder=\"Namespace to filter on\" uib-typeahead=\"ns for ns in $ctrl.commonNamespaces\"\n" +
3985 3994 " class=\"form-control\">\n" +
3986 3995 " </div>\n" +
3987 3996 " </div>\n" +
3988 3997 "\n" +
3989 3998 " <div class=\"form-group\">\n" +
3990 3999 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
3991 4000 "\n" +
3992 4001 " <div class=\"col-sm-8 col-lg-9 \">\n" +
3993 4002 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Purge logs meeting the criteria\">\n" +
3994 4003 " </div>\n" +
3995 4004 " </div>\n" +
3996 4005 "\n" +
3997 4006 " </form>\n" +
3998 4007 " </div>\n" +
3999 4008 " </div>\n" +
4000 4009 "</div>\n"
4001 4010 );
4002 4011
4003 4012
4004 4013 $templateCache.put('components/views/applications-update-view/applications-update-view.html',
4005 4014 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application\"></ng-include>\n" +
4006 4015 "\n" +
4007 4016 "<div ng-show=\"!$ctrl.loading.application\">\n" +
4008 4017 "\n" +
4009 4018 " <div class=\"panel panel-default\">\n" +
4010 4019 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4011 4020 " <div class=\"panel-body\">\n" +
4012 4021 "\n" +
4013 4022 " <div class=\"row\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4014 4023 " <div class=\"col-sm-6\">\n" +
4015 4024 "\n" +
4016 4025 " <uib-tabset>\n" +
4017 4026 " <uib-tab>\n" +
4018 4027 " <uib-tab-heading>\n" +
4019 4028 " API keys\n" +
4020 4029 " </uib-tab-heading>\n" +
4021 4030 "\n" +
4022 4031 " <p><strong>PRIVATE API KEY:</strong></p>\n" +
4023 4032 " <p>\n" +
4024 4033 " <div class=\"well well-sm\">{{ $ctrl.resource.api_key }}</div>\n" +
4025 4034 " </p>\n" +
4026 4035 " <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>\n" +
4027 4036 " <p>\n" +
4028 4037 " <div class=\"well well-sm\">{{ $ctrl.resource.public_key }}</div>\n" +
4029 4038 " </p>\n" +
4030 4039 " <p><small>Your key will be used to identify to which application your data\n" +
4031 4040 " belongs to please keep them private at all times.</small></p>\n" +
4032 4041 "\n" +
4033 4042 " </uib-tab>\n" +
4034 4043 "\n" +
4035 4044 " <uib-tab>\n" +
4036 4045 " <uib-tab-heading>\n" +
4037 4046 " <span class=\"btn btn-danger btn-xs\"><span class=\"fa fa-exclamation-triangle\"></span></span> Regenerate API keys\n" +
4038 4047 " </uib-tab-heading>\n" +
4039 4048 " <p>Are you sure you want to regenerate API KEY for this application?</p>\n" +
4040 4049 " <p>All client application keys will need to be updated.</p>\n" +
4041 4050 " <form ng-submit=\"$ctrl.regenerateAPIKeys()\" name=\"$ctrl.regenerateAPIKeysForm\" class=\"form-inline\">\n" +
4042 4051 " <data-form-errors errors=\"$ctrl.regenerateAPIKeysForm.ae_validation.password\"></data-form-errors>\n" +
4043 4052 " <div class=\"form-group\">\n" +
4044 4053 " <input type=\"password\" name=\"confirm\"\n" +
4045 4054 " placeholder=\"Enter your password to proceed\" class=\"form-control\" ng-model=\"$ctrl.regenerateAPIKeysPassword\">\n" +
4046 4055 " <input type=\"submit\" class=\"btn btn-danger\" value=\"Confirm\">\n" +
4047 4056 " </div>\n" +
4048 4057 " </form>\n" +
4049 4058 " </uib-tab>\n" +
4050 4059 " </uib-tabset>\n" +
4051 4060 " </div>\n" +
4052 4061 " <div class=\"col-sm-6 text-center\">\n" +
4053 4062 " <h2 class=\"m-t-0\">How to connect your application?</h2>\n" +
4054 4063 " <p>Visit our <a href=\"{{AeConfig.urls.docs}}\"><strong>developer documentation</strong></a> for step-by-step integration instructions.</p>\n" +
4055 4064 " <div class=\"clearfix\"></div>\n" +
4056 4065 " <p class=\"text-center\">\n" +
4057 4066 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/django_small.png\" alt=\"Django Logo\">\n" +
4058 4067 " <img src=\"/static/appenlight/images/logos/pyramid_small.png\" alt=\"Pyramid Logo\">\n" +
4059 4068 " <img src=\"/static/appenlight/images/logos/flask_small.png\" alt=\"Flask Logo\"></a>\n" +
4060 4069 "\n" +
4061 4070 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/js_small.png\" alt=\"Javascript Logo\">\n" +
4062 4071 " <img src=\"/static/appenlight/images/logos/nodejs.png\" alt=\"Node.js\"></a>\n" +
4063 4072 " <img src=\"/static/appenlight/images/logos/ruby_small.png\" alt=\"Ruby Logo\">\n" +
4064 4073 " <img src=\"/static/appenlight/images/logos/php_small.png\" alt=\"PHP Logo\">\n" +
4065 4074 " </a>\n" +
4066 4075 "\n" +
4067 4076 " </p>\n" +
4068 4077 " </div>\n" +
4069 4078 " </div>\n" +
4070 4079 "\n" +
4071 4080 " <hr ng-show=\"$ctrl.resource.resource_id\">\n" +
4072 4081 "\n" +
4073 4082 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.BasicForm\" ng-submit=\"$ctrl.updateBasicForm()\" novalidate>\n" +
4074 4083 " <div class=\"form-group\">\n" +
4075 4084 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.resource_name\"></data-form-errors>\n" +
4076 4085 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4077 4086 " Application name\n" +
4078 4087 " <span class=\"required\">*</span>\n" +
4079 4088 " </label>\n" +
4080 4089 "\n" +
4081 4090 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4082 4091 " <input class=\"form-control\" name=\"resource_name\" placeholder=\"Application Name\" type=\"text\" ng-model=\"$ctrl.resource.resource_name\">\n" +
4083 4092 " </div>\n" +
4084 4093 "\n" +
4085 4094 "\n" +
4086 4095 " </div>\n" +
4087 4096 "\n" +
4088 4097 " <div class=\"form-group\">\n" +
4089 4098 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.domains\"></data-form-errors>\n" +
4090 4099 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4091 4100 " Domain names for CORS headers\n" +
4092 4101 " </label>\n" +
4093 4102 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4094 4103 " <textarea class=\"form-control\" name=\"domains\" ng-model=\"$ctrl.resource.domains\"></textarea>\n" +
4095 4104 " <p class=\"description\">Required for Javascript error tracking (one line one domain, skip http:// part)</p>\n" +
4096 4105 " </div>\n" +
4097 4106 "\n" +
4098 4107 "\n" +
4099 4108 " </div>\n" +
4100 4109 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4101 4110 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.default_grouping\"></data-form-errors>\n" +
4102 4111 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4103 4112 " Default grouping for errors\n" +
4104 4113 " </label>\n" +
4105 4114 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4106 4115 " <select class=\"form-control\" name=\"default_grouping\" ng-model=\"$ctrl.resource.default_grouping\" ng-options=\"i[0] as i[1] for i in $ctrl.groupingOptions\"></select>\n" +
4107 4116 " </div>\n" +
4108 4117 "\n" +
4109 4118 " </div>\n" +
4110 4119 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4111 4120 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.error_report_threshold\"></data-form-errors>\n" +
4112 4121 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4113 4122 " Alert on error reports\n" +
4114 4123 " <span class=\"required\">*</span>\n" +
4115 4124 " </label>\n" +
4116 4125 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4117 4126 " <input class=\"form-control\" name=\"error_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.error_report_threshold\">\n" +
4118 4127 " <p class=\"description\">Application requires to send at least this amount of error reports per minute to open alert</p>\n" +
4119 4128 " </div>\n" +
4120 4129 " </div>\n" +
4121 4130 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4122 4131 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.slow_report_threshold\"></data-form-errors>\n" +
4123 4132 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4124 4133 " Alert on slow reports\n" +
4125 4134 " <span class=\"required\">*</span>\n" +
4126 4135 " </label>\n" +
4127 4136 "\n" +
4128 4137 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4129 4138 " <input class=\"form-control\" name=\"slow_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.slow_report_threshold\">\n" +
4130 4139 " <p class=\"description\">Application requires to send at least this amount of slow reports per minute to open alert</p>\n" +
4131 4140 " </div>\n" +
4132 4141 " </div>\n" +
4133 4142 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4134 4143 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.allow_permanent_storage\"></data-form-errors>\n" +
4135 4144 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4136 4145 " Permanent logs\n" +
4137 4146 " </label>\n" +
4138 4147 " <div class=\" col-sm-8 col-lg-9\">\n" +
4139 4148 " <input class=\"form-control\" name=\"allow_permanent_storage\" type=\"checkbox\" ng-model=\"$ctrl.resource.allow_permanent_storage\">\n" +
4140 4149 " <p class=\"description\">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>\n" +
4141 4150 " </div>\n" +
4142 4151 " </div>\n" +
4143 4152 " <div class=\"form-group\">\n" +
4144 4153 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4145 4154 "\n" +
4146 4155 " </label>\n" +
4147 4156 "\n" +
4148 4157 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4149 4158 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.resource.resource_id? 'Update' : 'Create'}} Application\">\n" +
4150 4159 " </div>\n" +
4151 4160 " </div>\n" +
4152 4161 " </form>\n" +
4153 4162 " </div>\n" +
4154 4163 " </div>\n" +
4155 4164 "\n" +
4156 4165 " <div class=\"panel panel-default\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4157 4166 " <div class=\"panel-heading\">\n" +
4158 4167 " <h3 class=\"panel-title\">Plugins</h3>\n" +
4159 4168 " </div>\n" +
4160 4169 " <div class=\"panel-body\">\n" +
4161 4170 "\n" +
4162 4171 " <plugin-config resource=\"$ctrl.resource\"\n" +
4163 4172 " section=\"'application.update'\"\n" +
4164 4173 " ng-if=\"$ctrl.resource.resource_id\">\n" +
4165 4174 " </plugin-config>\n" +
4166 4175 "\n" +
4167 4176 " </div>\n" +
4168 4177 " </div>\n" +
4169 4178 "\n" +
4170 4179 " <div class=\"panel panel-default m-t-1\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4171 4180 " <div class=\"panel-heading\">\n" +
4172 4181 " <h3 class=\"panel-title\">API Testing</h3>\n" +
4173 4182 " </div>\n" +
4174 4183 " <div class=\"panel-body\">\n" +
4175 4184 " <p>Please be sure to add at least one <a data-ui-sref=\"user.alert_channels.email\"><strong>email alert channel</strong></a> for your account.</p>\n" +
4176 4185 " <p>This will enable AppEnlight to send you notification emails about errors inside your $ctrl.</p>\n" +
4177 4186 " <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>\n" +
4178 4187 " <p>(Please note that the data like execution times is semi randomly generated)</p>\n" +
4179 4188 " <uib-tabset>\n" +
4180 4189 " <uib-tab>\n" +
4181 4190 " <uib-tab-heading>\n" +
4182 4191 " Log API\n" +
4183 4192 " </uib-tab-heading>\n" +
4184 4193 "\n" +
4185 4194 " <div class=\"codehilite\">\n" +
4186 4195 " <pre class=\"m-a-0\">\n" +
4187 4196 "curl -H \"Content-Type: application/json\" -k {{$ctrl.AeConfig.urls.baseUrl}}api/logs?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
4188 4197 " [\n" +
4189 4198 " {\n" +
4190 4199 " \"log_level\": \"WARNING\",\n" +
4191 4200 " \"message\": \"OMG ValueError happened\",\n" +
4192 4201 " \"namespace\": \"some.namespace.indicator\",\n" +
4193 4202 " \"request_id\": \"SOME_UUID\",\n" +
4194 4203 " \"permanent\": false,\n" +
4195 4204 " \"primary_key\": \"random_key\",\n" +
4196 4205 " \"server\": \"some.server.hostname\",\n" +
4197 4206 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4198 4207 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]]\n" +
4199 4208 " },\n" +
4200 4209 " {\n" +
4201 4210 " \"log_level\": \"ERROR\",\n" +
4202 4211 " \"message\": \"OMG ValueError happened2\",\n" +
4203 4212 " \"namespace\": \"some.namespace.indicator\",\n" +
4204 4213 " \"request_id\": \"SOME_UUID\",\n" +
4205 4214 " \"permanent\": false,\n" +
4206 4215 " \"server\": \"some.server.hostname\",\n" +
4207 4216 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\"\n" +
4208 4217 " }\n" +
4209 4218 " ]'\n" +
4210 4219 " </pre>\n" +
4211 4220 " </div>\n" +
4212 4221 "\n" +
4213 4222 " </uib-tab>\n" +
4214 4223 "\n" +
4215 4224 " <uib-tab>\n" +
4216 4225 " <uib-tab-heading>\n" +
4217 4226 " Report API\n" +
4218 4227 " </uib-tab-heading>\n" +
4219 4228 "\n" +
4220 4229 " <div class=\"codehilite\">\n" +
4221 4230 " <pre class=\"m-a-0\">\n" +
4222 4231 "curl -H \"Content-Type: application/json\" -k {{$ctrl.AeConfig.urls.baseUrl}}api/reports?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
4223 4232 " [{\n" +
4224 4233 " \"client\": \"your-client-name-python\",\n" +
4225 4234 " \"language\": \"python\",\n" +
4226 4235 " \"view_name\": \"views/foo:bar\",\n" +
4227 4236 " \"server\": \"SERVERNAME/INSTANCENAME\",\n" +
4228 4237 " \"priority\": 5,\n" +
4229 4238 " \"error\": \"OMG ValueError happened\",\n" +
4230 4239 " \"occurences\":1,\n" +
4231 4240 " \"http_status\": 500,\n" +
4232 4241 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]],\n" +
4233 4242 " \"username\": \"USER\",\n" +
4234 4243 " \"url\": \"HTTP://SOMEURL\",\n" +
4235 4244 " \"ip\": \"127.0.0.1\",\n" +
4236 4245 " \"start_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4237 4246 " \"end_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}\",\n" +
4238 4247 " \"user_agent\": \"BROWSER_AGENT\",\n" +
4239 4248 " \"extra\": [[\"message\",\"CUSTOM MESSAGE\"], [\"custom_value\", \"some payload\"]],\n" +
4240 4249 " \"request_id\": \"SOME_UUID\",\n" +
4241 4250 " \"request\": {\"REQUEST_METHOD\": \"GET\",\n" +
4242 4251 " \"PATH_INFO\": \"/FOO/BAR\",\n" +
4243 4252 " \"POST\": {\"FOO\":\"BAZ\",\"XXX\":\"YYY\"}\n" +
4244 4253 " },\n" +
4245 4254 " \"slow_calls\":[{\n" +
4246 4255 " \"start\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4247 4256 " \"end\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}\",\n" +
4248 4257 " \"type\": \"sql\",\n" +
4249 4258 " \"subtype\": \"postgresql\",\n" +
4250 4259 " \"parameters\": [\"QPARAM1\",\"QPARAM2\",\"QPARAMX\"],\n" +
4251 4260 " \"statement\": \"QUERY\"\n" +
4252 4261 " }],\n" +
4253 4262 " \"request_stats\": {\n" +
4254 4263 " \"main\": 2.50779,\n" +
4255 4264 " \"nosql\": 0.01008,\n" +
4256 4265 " \"nosql_calls\": 17.0,\n" +
4257 4266 " \"remote\": 0.0,\n" +
4258 4267 " \"remote_calls\": 0.0,\n" +
4259 4268 " \"sql\": 1,\n" +
4260 4269 " \"sql_calls\": 1.0,\n" +
4261 4270 " \"tmpl\": 0.0,\n" +
4262 4271 " \"tmpl_calls\": 0.0,\n" +
4263 4272 " \"custom\": 0.0,\n" +
4264 4273 " \"custom_calls\": 0.0\n" +
4265 4274 " },\n" +
4266 4275 " \"traceback\": [\n" +
4267 4276 " {\"cline\": \"return foo_bar_baz(1,2,3)\",\n" +
4268 4277 " \"file\": \"somedir/somefile.py\",\n" +
4269 4278 " \"fn\": \"somefunction\",\n" +
4270 4279 " \"line\": 454,\n" +
4271 4280 " \"vars\": [[\"a_list\",\n" +
4272 4281 " [\"1\",2,\"4\",\"5\",6]],\n" +
4273 4282 " [\"b\", {\"1\": \"2\", \"ccc\": \"ddd\", \"1\": \"a\"}],\n" +
4274 4283 " [\"obj\", \"object object at 0x7f0030853dc0\"]]\n" +
4275 4284 " },\n" +
4276 4285 " {\"cline\": \"OMG ValueError happened\",\n" +
4277 4286 " \"file\": \"\",\n" +
4278 4287 " \"fn\": \"\",\n" +
4279 4288 " \"line\": \"\",\n" +
4280 4289 " \"vars\": []}\n" +
4281 4290 " ]\n" +
4282 4291 " }]'\n" +
4283 4292 " </pre>\n" +
4284 4293 " </div>\n" +
4285 4294 "\n" +
4286 4295 " </uib-tab>\n" +
4287 4296 "\n" +
4288 4297 " <uib-tab>\n" +
4289 4298 "\n" +
4290 4299 " <uib-tab-heading>\n" +
4291 4300 " Metrics API\n" +
4292 4301 " </uib-tab-heading>\n" +
4293 4302 "\n" +
4294 4303 " <div class=\"codehilite\">\n" +
4295 4304 " <pre class=\"m-a-0\">\n" +
4296 4305 "curl -H \"Content-Type: application/json\" -k {{$ctrl.AeConfig.urls.baseUrl}}api/general_metrics?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
4297 4306 " [{\n" +
4298 4307 " \"namespace\": \"some.monitor\",\n" +
4299 4308 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4300 4309 " \"server_name\": \"server.name\",\n" +
4301 4310 " \"tags\": [[\"value1\", 15.7], [\"value2\", 26]]}]'\n" +
4302 4311 " </pre>\n" +
4303 4312 " </div>\n" +
4304 4313 "\n" +
4305 4314 " </uib-tab>\n" +
4306 4315 "\n" +
4307 4316 " <uib-tab>\n" +
4308 4317 "\n" +
4309 4318 " <uib-tab-heading>\n" +
4310 4319 " Request Stats API\n" +
4311 4320 " </uib-tab-heading>\n" +
4312 4321 "\n" +
4313 4322 " <div class=\"codehilite\">\n" +
4314 4323 " <pre class=\"m-a-0\">\n" +
4315 4324 "curl -H \"Content-Type: application/json\" -k {{$ctrl.AeConfig.urls.baseUrl}}api/request_stats?protocol_version=0.5\\&ampapi_key={{$ctrl.resource.api_key}} -d '\n" +
4316 4325 " [{\"server\": \"some.server.hostname\",\n" +
4317 4326 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4318 4327 " \"metrics\": [[\"dir/module:func\",\n" +
4319 4328 " {\"custom\": 0.0,\n" +
4320 4329 " \"custom_calls\": 0,\n" +
4321 4330 " \"main\": 0.01664,\n" +
4322 4331 " \"nosql\": 0.00061,\n" +
4323 4332 " \"nosql_calls\": 23,\n" +
4324 4333 " \"remote\": 0.0,\n" +
4325 4334 " \"remote_calls\": 0,\n" +
4326 4335 " \"requests\": 1,\n" +
4327 4336 " \"sql\": 0.00105,\n" +
4328 4337 " \"sql_calls\": 2,\n" +
4329 4338 " \"tmpl\": 0.0,\n" +
4330 4339 " \"tmpl_calls\": 0}],\n" +
4331 4340 " [\"SomeView.function\",\n" +
4332 4341 " {\"custom\": 0.0,\n" +
4333 4342 " \"custom_calls\": 0,\n" +
4334 4343 " \"main\": 0.647261,\n" +
4335 4344 " \"nosql\": 0.306554,\n" +
4336 4345 " \"nosql_calls\": 140,\n" +
4337 4346 " \"remote\": 0.0,\n" +
4338 4347 " \"remote_calls\": 0,\n" +
4339 4348 " \"requests\": 28,\n" +
4340 4349 " \"sql\": 0.0,\n" +
4341 4350 " \"sql_calls\": 0,\n" +
4342 4351 " \"tmpl\": 0.0,\n" +
4343 4352 " \"tmpl_calls\": 0}]]\n" +
4344 4353 " }]'\n" +
4345 4354 " </pre>\n" +
4346 4355 " </div>\n" +
4347 4356 "\n" +
4348 4357 " </uib-tab>\n" +
4349 4358 "\n" +
4350 4359 " </uib-tabset>\n" +
4351 4360 "\n" +
4352 4361 " </div>\n" +
4353 4362 " </div>\n" +
4354 4363 "\n" +
4355 4364 " <permissions-form resource=\"$ctrl.resource\" current-permissions=\"$ctrl.resource.current_permissions\"\n" +
4356 4365 " possible-permissions=\"$ctrl.resource.possible_permissions\" ng-if=\"$ctrl.resource.resource_id\"></permissions-form>\n" +
4357 4366 "\n" +
4358 4367 " <div class=\"panel panel-info\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4359 4368 " <div class=\"panel-heading\">\n" +
4360 4369 " <h3 class=\"panel-title\">Postprocessing</h3>\n" +
4361 4370 " </div>\n" +
4362 4371 " <div class=\"panel-body\">\n" +
4363 4372 " <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>\n" +
4364 4373 "\n" +
4365 4374 " <p>\n" +
4366 4375 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addRule()\"><span class=\"fa fa-plus-circle\"></span> Add rule</a>\n" +
4367 4376 " </p>\n" +
4368 4377 "\n" +
4369 4378 " <post-process-action action=\"action\" resource=\"$ctrl.resource\" ng-repeat=\"action in $ctrl.resource.postprocessing_rules\"></post-process-action>\n" +
4370 4379 " </div>\n" +
4371 4380 " </div>\n" +
4372 4381 "\n" +
4373 4382 " <div class=\"panel panel-danger\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4374 4383 " <div class=\"panel-heading\">\n" +
4375 4384 " <h3 class=\"panel-title\">Administration</h3>\n" +
4376 4385 " </div>\n" +
4377 4386 " <div class=\"panel-body\">\n" +
4378 4387 " <h2>Transfer ownership</h2>\n" +
4379 4388 " <p>Please note that by transfering ownership you WILL lose access to the application data and new owner needs to give you access permission</p>\n" +
4380 4389 " <div class=\"confirmation_form\" ng-submit=\"$ctrl.transferApplication()\">\n" +
4381 4390 " <form class=\"form-horizontal\" name=\"$ctrl.formTransfer\">\n" +
4382 4391 " <div class=\"form-group\">\n" +
4383 4392 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.password\"></data-form-errors>\n" +
4384 4393 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4385 4394 " Password\n" +
4386 4395 " </label>\n" +
4387 4396 " <div class=\"col-sm-8 col-lg-9\">\n" +
4388 4397 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formTransferModel.password\">\n" +
4389 4398 " </div>\n" +
4390 4399 " </div>\n" +
4391 4400 " <div class=\"form-group\">\n" +
4392 4401 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.user_name\"></data-form-errors>\n" +
4393 4402 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4394 4403 " New owners username\n" +
4395 4404 " </label>\n" +
4396 4405 " <div class=\"col-sm-8 col-lg-9\">\n" +
4397 4406 " <input class=\"form-control\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.formTransferModel.user_name\">\n" +
4398 4407 " </div>\n" +
4399 4408 " </div>\n" +
4400 4409 " <div class=\"form-group\">\n" +
4401 4410 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4402 4411 " </label>\n" +
4403 4412 " <div class=\"col-sm-8 col-lg-9\">\n" +
4404 4413 " <button class=\"btn btn-danger\">\n" +
4405 4414 " <span class=\"fa fa-user-plus\"></span>\n" +
4406 4415 " Transfer ownership of application\n" +
4407 4416 " </button>\n" +
4408 4417 " </div>\n" +
4409 4418 " </div>\n" +
4410 4419 " </form>\n" +
4411 4420 " </div>\n" +
4412 4421 "\n" +
4413 4422 " <hr/>\n" +
4414 4423 "\n" +
4415 4424 " <h2>Remove application</h2>\n" +
4416 4425 " <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>\n" +
4417 4426 "\n" +
4418 4427 " <div class=\"confirmation_form\">\n" +
4419 4428 " <form class=\"form-horizontal\" name=\"$ctrl.formDelete\" ng-submit=\"$ctrl.deleteApplication()\">\n" +
4420 4429 " <div class=\"form-group\">\n" +
4421 4430 " <data-form-errors errors=\"$ctrl.formDelete.ae_validation.password\"></data-form-errors>\n" +
4422 4431 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4423 4432 " Password\n" +
4424 4433 " </label>\n" +
4425 4434 " <div class=\"col-sm-8 col-lg-9\">\n" +
4426 4435 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formDeleteModel.password\">\n" +
4427 4436 " </div>\n" +
4428 4437 " </div>\n" +
4429 4438 " <div class=\"form-group\">\n" +
4430 4439 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4431 4440 "\n" +
4432 4441 " </label>\n" +
4433 4442 " <div class=\"col-sm-8 col-lg-9\">\n" +
4434 4443 " <button class=\"btn btn-danger\">\n" +
4435 4444 " <span class=\"fa fa-trash-o\"></span>\n" +
4436 4445 " Delete my application\n" +
4437 4446 " </button>\n" +
4438 4447 " </div>\n" +
4439 4448 " </div>\n" +
4440 4449 " </form>\n" +
4441 4450 " </div>\n" +
4442 4451 " </div>\n" +
4443 4452 " </div>\n" +
4444 4453 "</div>\n"
4445 4454 );
4446 4455
4447 4456
4448 4457 $templateCache.put('components/views/event-browser/event-browser.html',
4449 4458 "<div class=\"panel panel-default\">\n" +
4450 4459 " <div class=\"panel-body\">\n" +
4451 4460 "\n" +
4452 4461 " <h1>Event history</h1>\n" +
4453 4462 "\n" +
4454 4463 " <table class=\"table table-striped event-table\">\n" +
4455 4464 " <tr ng-repeat=\"event in $ctrl.events track by event.id\">\n" +
4456 4465 " <td class=\"text-center icons\">\n" +
4457 4466 " <span ng-if=\"event.event_type === 1\" class=\"fa fa-exclamation-triangle fa-2x\" style=\"color:orangered\"></span>\n" +
4458 4467 " <span ng-if=\"event.event_type === 3\" class=\"fa fa-clock-o fa-2x\" style=\"color:darkorange\"></span>\n" +
4459 4468 " <span ng-if=\"event.event_type === 7\" class=\"fa fa-question-circle fa-2x\" style=\"color:dimgrey\"></span>\n" +
4460 4469 " <span ng-if=\"event.event_type === 9\" class=\"fa fa-line-chart fa-2x\" style=\"color:green\"></span>\n" +
4461 4470 " </td>\n" +
4462 4471 " <td>\n" +
4463 4472 " <p>For <strong>{{ event.resource_name }}</strong></p>\n" +
4464 4473 "\n" +
4465 4474 " <p>{{ event.text }}</p>\n" +
4466 4475 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\"> created:\n" +
4467 4476 " <iso-to-relative-time time=\"{{event.start_date}}\"/>\n" +
4468 4477 " </small>\n" +
4469 4478 " <small class=\"date\" ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\"> | closed:\n" +
4470 4479 " <iso-to-relative-time time=\"{{event.end_date}}\"/>\n" +
4471 4480 " </small>\n" +
4472 4481 " </td>\n" +
4473 4482 " <td class=\"options\">\n" +
4474 4483 "\n" +
4475 4484 " <span class=\"dropdown pull-right\" ng-if=\"event.status === 1\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4476 4485 " <a class=\"dropdown-toggle btn btn-danger\" data-uib-dropdown-toggle>\n" +
4477 4486 " <span class=\"fa fa-exclamation-circle\"></span>\n" +
4478 4487 " </a>\n" +
4479 4488 " <ul class=\"dropdown-menu\">\n" +
4480 4489 " <li>\n" +
4481 4490 " <a ng-click=\"$ctrl.closeEvent(event)\">Close event</a>\n" +
4482 4491 " <a>Do nothing</a>\n" +
4483 4492 " </li>\n" +
4484 4493 " </ul>\n" +
4485 4494 " </span>\n" +
4486 4495 "\n" +
4487 4496 " </td>\n" +
4488 4497 " </tr>\n" +
4489 4498 " </table>\n" +
4490 4499 " </div>\n" +
4491 4500 "</div>\n"
4492 4501 );
4493 4502
4494 4503
4495 4504 $templateCache.put('components/views/index-dashboard/index-dashboard.html',
4496 4505 "<style type=\"text/css\">\n" +
4497 4506 " #metrics_chart .c3-line {\n" +
4498 4507 " stroke-width: 0px;\n" +
4499 4508 " }\n" +
4500 4509 "\n" +
4501 4510 " #metrics_chart .c3-area {\n" +
4502 4511 " stroke-width: 0;\n" +
4503 4512 " opacity: 0.75;\n" +
4504 4513 " }\n" +
4505 4514 "</style>\n" +
4506 4515 "\n" +
4507 4516 "<div class=\"row\">\n" +
4508 4517 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
4509 4518 " <div ng-if=\"!$ctrl.stateHolder.AeUser.applications.length\">\n" +
4510 4519 "\n" +
4511 4520 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
4512 4521 "\n" +
4513 4522 " </div>\n" +
4514 4523 "\n" +
4515 4524 " <div ng-if=\"$ctrl.stateHolder.AeUser.applications.length\">\n" +
4516 4525 "\n" +
4517 4526 " <div class=\"row\">\n" +
4518 4527 " <div class=\"col-sm-6\">\n" +
4519 4528 " <div class=\"panel panel-default\">\n" +
4520 4529 " <div class=\"panel-body\">\n" +
4521 4530 " <form class=\"graph-type form-inline\">\n" +
4522 4531 " <select ng-model=\"$ctrl.resource\" ng-options=\"r.resource_id as r.resource_name for r in $ctrl.stateHolder.AeUser.applications\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4523 4532 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
4524 4533 "\n" +
4525 4534 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"$ctrl.timeSpan\"\n" +
4526 4535 " ng-options=\"i as i.label for i in $ctrl.timeOptions | objectToOrderedArray:'minutes'\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4527 4536 " class=\"SelectField\"></select>\n" +
4528 4537 "\n" +
4529 4538 "\n" +
4530 4539 " <div class=\"btn-group\">\n" +
4531 4540 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4532 4541 " uib-btn-radio=\"'requests_graphs'\" data-uib-tooltip=\"Requests per second\">\n" +
4533 4542 " <span class=\"fa fa-line-chart\"></span>\n" +
4534 4543 " </button>\n" +
4535 4544 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4536 4545 " uib-btn-radio=\"'response_graphs'\" data-uib-tooltip=\"Average response time\">\n" +
4537 4546 " <span class=\"fa fa-random\"></span>\n" +
4538 4547 " </button>\n" +
4539 4548 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4540 4549 " uib-btn-radio=\"'metrics_graphs'\" data-uib-tooltip=\"Time spent per request\">\n" +
4541 4550 " <span class=\"fa fa-bar-chart-o\"></span>\n" +
4542 4551 " </button>\n" +
4543 4552 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4544 4553 " uib-btn-radio=\"'report_graphs'\" data-uib-tooltip=\"Errors\">\n" +
4545 4554 " <span class=\"fa fa-exclamation-triangle\"></span>\n" +
4546 4555 " </button>\n" +
4547 4556 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4548 4557 " uib-btn-radio=\"'slow_report_graphs'\" data-uib-tooltip=\"Slow reports\">\n" +
4549 4558 " <span class=\"fa fa-clock-o\"></span>\n" +
4550 4559 " </button>\n" +
4551 4560 " </div>\n" +
4552 4561 " </form>\n" +
4553 4562 " <div class=\"clearfix\"></div>\n" +
4554 4563 "\n" +
4555 4564 " <p ng-if=\"$ctrl.loading.series != false\" class=\"text-center\">\n" +
4556 4565 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4557 4566 " </p>\n" +
4558 4567 "\n" +
4559 4568 " <div ng-if=\"$ctrl.loading.series == false\">\n" +
4560 4569 " <div ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\">\n" +
4561 4570 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.requestsChartData\" data-config=\"$ctrl.requestsChartConfig\" update=\"true\">\n" +
4562 4571 " </c3chart>\n" +
4563 4572 " </div>\n" +
4564 4573 "\n" +
4565 4574 " <div ng-if=\"$ctrl.graphType.selected == 'response_graphs'\">\n" +
4566 4575 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.responseChartData\" data-config=\"$ctrl.responseChartConfig\" update=\"true\">\n" +
4567 4576 " </c3chart>\n" +
4568 4577 " </div>\n" +
4569 4578 "\n" +
4570 4579 " <div ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\">\n" +
4571 4580 " <c3chart data-domid=\"metrics_chart\" data-data=\"$ctrl.metricsChartData\" data-config=\"$ctrl.metricsChartConfig\" update=\"true\">\n" +
4572 4581 " </c3chart>\n" +
4573 4582 " </div>\n" +
4574 4583 " <div ng-if=\"$ctrl.graphType.selected == 'report_graphs'\">\n" +
4575 4584 " <c3chart data-domid=\"reports_chart\" data-data=\"$ctrl.reportChartData\" data-config=\"$ctrl.reportChartConfig\" update=\"true\">\n" +
4576 4585 " </c3chart>\n" +
4577 4586 " </div>\n" +
4578 4587 "\n" +
4579 4588 " <div ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\">\n" +
4580 4589 " <c3chart data-domid=\"slow_reports_chart\" data-data=\"$ctrl.reportSlowChartData\" data-config=\"$ctrl.reportSlowChartConfig\" update=\"true\">\n" +
4581 4590 " </c3chart>\n" +
4582 4591 " </div>\n" +
4583 4592 "\n" +
4584 4593 " <p ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\" class=\"text-center\">\n" +
4585 4594 " <small>Average requests per second from all servers</small>\n" +
4586 4595 " </p>\n" +
4587 4596 "\n" +
4588 4597 " <p ng-if=\"$ctrl.graphType.selected == 'response_graphs'\" class=\"text-center\">\n" +
4589 4598 " <small>Average response time from all servers</small>\n" +
4590 4599 " </p>\n" +
4591 4600 "\n" +
4592 4601 " <p ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\" class=\"text-center\">\n" +
4593 4602 " <small>Aggregated average time spent per request - broken to layers</small>\n" +
4594 4603 " </p>\n" +
4595 4604 "\n" +
4596 4605 " <p ng-if=\"$ctrl.graphType.selected == 'report_graphs'\" class=\"text-center\">\n" +
4597 4606 " <small>Aggregated reports sent by your application</small>\n" +
4598 4607 " </p>\n" +
4599 4608 "\n" +
4600 4609 " <p ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\" class=\"text-center\">\n" +
4601 4610 " <small>Aggregated slow reports sent by your application</small>\n" +
4602 4611 " </p>\n" +
4603 4612 " </div>\n" +
4604 4613 " </div>\n" +
4605 4614 " </div>\n" +
4606 4615 " </div>\n" +
4607 4616 "\n" +
4608 4617 "\n" +
4609 4618 " <div class=\"col-sm-6\">\n" +
4610 4619 "\n" +
4611 4620 " <div id=\"server-container\">\n" +
4612 4621 "\n" +
4613 4622 " <div ng-if=\"$ctrl.loading.apdex==false\" class=\"text-center m-b-1\">\n" +
4614 4623 "\n" +
4615 4624 " <a data-ui-sref=\"report.list({resource:$ctrl.resource, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"error-rate\">\n" +
4616 4625 " <small>Exceptions</small>\n" +
4617 4626 " <br/>\n" +
4618 4627 " <strong>{{ $ctrl.exceptions|numberToThousands}}</strong>\n" +
4619 4628 " <span class=\"fa fa-chevron-right\"></span>\n" +
4620 4629 " </a><!--\n" +
4621 4630 "\n" +
4622 4631 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"frustrating-requests\" data-uib-tooltip=\"Requests over 4s\">\n" +
4623 4632 " <small>Frustrating req.</small>\n" +
4624 4633 " <br/>\n" +
4625 4634 " <strong>{{$ctrl.frustratingRequests|numberToThousands}}</strong>\n" +
4626 4635 " <span class=\"fa fa-chevron-right\"></span>\n" +
4627 4636 " </a><!--\n" +
4628 4637 "\n" +
4629 4638 " --><a data-ui-sref=\"report.list_slow({resource:$ctrl.resource, min_duration:1, max_duration:4, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"tolerated-requests\"\n" +
4630 4639 " data-uib-tooltip=\"Requests under 4s\">\n" +
4631 4640 " <small>Tolerated req.</small>\n" +
4632 4641 " <br/>\n" +
4633 4642 " <strong>{{$ctrl.toleratedRequests|numberToThousands}}</strong>\n" +
4634 4643 " <span class=\"fa fa-chevron-right\"></span>\n" +
4635 4644 " </a><!--\n" +
4636 4645 " \n" +
4637 4646 " --><a class=\"combined-stat text-center\" id=\"satisfying-requests\" data-uib-tooltip=\"Requests under 1s\">\n" +
4638 4647 " <small>Satisfying req.</small>\n" +
4639 4648 " <br/>\n" +
4640 4649 " <strong>{{$ctrl.satisfyingRequests|numberToThousands}}</strong>\n" +
4641 4650 " </a><!--\n" +
4642 4651 "\n" +
4643 4652 " --><a data-ui-sref=\"uptime({resource:$ctrl.resource})\" class=\"combined-stat text-center\" id=\"uptime-stats\" data-uib-tooltip=\"Uptime\">\n" +
4644 4653 " <small>Uptime</small>\n" +
4645 4654 " <br/>\n" +
4646 4655 " <strong>{{$ctrl.uptimeStats}}%</strong>\n" +
4647 4656 " <span class=\"fa fa-chevron-right\"></span>\n" +
4648 4657 " </a>\n" +
4649 4658 "\n" +
4650 4659 " <div class=\"clearfix\"></div>\n" +
4651 4660 " </div>\n" +
4652 4661 "\n" +
4653 4662 " <div id=\"apdex-rate\" class=\"m-b-1 panel panel-default\">\n" +
4654 4663 " <table class=\"servers table table-striped\">\n" +
4655 4664 " <thead>\n" +
4656 4665 " <tr>\n" +
4657 4666 " <th></th>\n" +
4658 4667 " <th>Server</th>\n" +
4659 4668 " <th>Apdex\n" +
4660 4669 " <span class=\"fa fa-question-circle\"\n" +
4661 4670 " data-uib-tooltip=\"Application Performance Index - measures viewer satisfaction based on response times and error rates\"></span>\n" +
4662 4671 " </th>\n" +
4663 4672 " <th>rpm</th>\n" +
4664 4673 " <th>avg. response</th>\n" +
4665 4674 " </tr>\n" +
4666 4675 " </thead>\n" +
4667 4676 " <tbody>\n" +
4668 4677 " <tr ng-if=\"$ctrl.loading.apdex!=false\" class=\"text-center\">\n" +
4669 4678 " <td colspan=\"5\"><span class=\"fa fa-cog fa-spin fa-5x loader\"></span></td>\n" +
4670 4679 " </tr>\n" +
4671 4680 " <tr ng-repeat=\"server in $ctrl.apdexStats\" class=\"{{ server | apdexValue }}\"\n" +
4672 4681 " ng-if=\"$ctrl.loading.apdex==false\">\n" +
4673 4682 " <td><span class=\"fa fa-hdd-o\"></span></td>\n" +
4674 4683 " <td>\n" +
4675 4684 " <small><strong>{{ server.name }}</strong></small>\n" +
4676 4685 " </td>\n" +
4677 4686 " <td class=\"apdex\">\n" +
4678 4687 " <small><strong>{{ server.apdex }} %</strong></small>\n" +
4679 4688 " </td>\n" +
4680 4689 " <td>\n" +
4681 4690 " <small><strong>{{ server.rpm }}rpm</strong></small>\n" +
4682 4691 " </td>\n" +
4683 4692 " <td>\n" +
4684 4693 " <small><strong>{{ server.avg_response_time }}s</strong></small>\n" +
4685 4694 " </td>\n" +
4686 4695 " </tr>\n" +
4687 4696 " </tbody>\n" +
4688 4697 " </table>\n" +
4689 4698 "\n" +
4690 4699 " </div>\n" +
4691 4700 " </div>\n" +
4692 4701 "\n" +
4693 4702 " </div>\n" +
4694 4703 "\n" +
4695 4704 "\n" +
4696 4705 " </div>\n" +
4697 4706 "\n" +
4698 4707 " <div class=\"row\">\n" +
4699 4708 " <div class=\"col-sm-6\">\n" +
4700 4709 "\n" +
4701 4710 " <div class=\"panel panel-default\">\n" +
4702 4711 " <div class=\"panel-heading position-relative\">\n" +
4703 4712 " <h3 class=\"panel-title\"><span class=\"fa fa-exclamation-triangle\"></span> Newest errors (real-time)\n" +
4704 4713 " </h3>\n" +
4705 4714 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Play/Pause stream\" class=\"btn btn-primary btn-sm pause_stream\" ng-model=\"$ctrl.stream.paused\" uib-btn-checkbox>\n" +
4706 4715 " <span class=\"fa {{stream.paused ? 'fa-play' : 'fa-pause'}}\"></span>\n" +
4707 4716 " </a>\n" +
4708 4717 " <a tooltip-append-to-body=\"true\" data-uib-tooltip=\"Limit reports to current application\" class=\"btn btn-primary btn-sm limit_stream\" ng-model=\"$ctrl.stream.filtered\" uib-btn-checkbox>\n" +
4709 4718 " <span class=\"fa fa-lock\"></span>\n" +
4710 4719 " </a>\n" +
4711 4720 "\n" +
4712 4721 "\n" +
4713 4722 " </div>\n" +
4714 4723 " <div class=\"panel-body\">\n" +
4715 4724 "\n" +
4716 4725 " <p ng-if=\"$ctrl.stream.reports.length === 0\">No new reports</p>\n" +
4717 4726 "\n" +
4718 4727 " <div small-report-list reports=\"$ctrl.stream.reports\" applications=\"$ctrl.applications\"></div>\n" +
4719 4728 " </div>\n" +
4720 4729 " </div>\n" +
4721 4730 " </div>\n" +
4722 4731 "\n" +
4723 4732 " <div class=\"col-sm-6\">\n" +
4724 4733 "\n" +
4725 4734 " <div class=\"panel panel-default\">\n" +
4726 4735 " <div class=\"panel-heading\">\n" +
4727 4736 " <h3 class=\"panel-title\"><span class=\"fa fa-sort-amount-desc\"></span> Request breakdown over {{ $ctrl.timeSpan.label }}</h3>\n" +
4728 4737 " </div>\n" +
4729 4738 " <div class=\"panel-body\" id=\"view-breakdown-container\">\n" +
4730 4739 " <p ng-if=\"$ctrl.loading.requestsBreakdown!=false\" class=\"text-center\">\n" +
4731 4740 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4732 4741 " </p>\n" +
4733 4742 "\n" +
4734 4743 " <div class=\"report-list\">\n" +
4735 4744 " <div ng-if=\"$ctrl.loading.requestsBreakdown==false\" ng-repeat=\"view in $ctrl.requestsBreakdown\">\n" +
4736 4745 " <div class=\"view-info\">\n" +
4737 4746 " <div class=\"view-name\">\n" +
4738 4747 " <div class=\"bar\" style=\"width: {{view.percentage}}%\">\n" +
4739 4748 " </div>\n" +
4740 4749 " </div>\n" +
4741 4750 " <strong ng-if=\"view.latest_details.length\">\n" +
4742 4751 " <a data-ui-sref=\"report.list_slow({view_name:view.view_name})\">{{view.view_name}}</a></strong>\n" +
4743 4752 " <strong ng-if=\"!view.latest_details.length\">{{view.view_name}}</strong>\n" +
4744 4753 "\n" +
4745 4754 " <div class=\"stats\">\n" +
4746 4755 " <small>\n" +
4747 4756 " avg. response <strong>{{view.avg_response}}s</strong> in\n" +
4748 4757 " <span class=\"requests\"\n" +
4749 4758 " data-uib-tooltip=\"Requests\"><strong>{{view.requests|numberToThousands}}</strong> requests</span>\n" +
4750 4759 "\n" +
4751 4760 " <span ng-if=\"view.latest_details\">\n" +
4752 4761 " &nbsp;&nbsp; Latest reports:\n" +
4753 4762 " <a ng-repeat=\"d in view.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong></a>\n" +
4754 4763 " </span>\n" +
4755 4764 " </small>\n" +
4756 4765 " </div>\n" +
4757 4766 "\n" +
4758 4767 " </div>\n" +
4759 4768 "\n" +
4760 4769 " </div>\n" +
4761 4770 " </div>\n" +
4762 4771 "\n" +
4763 4772 "\n" +
4764 4773 " </div>\n" +
4765 4774 " </div>\n" +
4766 4775 "\n" +
4767 4776 " </div>\n" +
4768 4777 "\n" +
4769 4778 " </div>\n" +
4770 4779 "\n" +
4771 4780 " <div class=\"row\">\n" +
4772 4781 " <div class=\"col-sm-6\">\n" +
4773 4782 "\n" +
4774 4783 " <div class=\"panel panel-default\">\n" +
4775 4784 " <div class=\"panel-heading\">\n" +
4776 4785 " <h3 class=\"panel-title\">\n" +
4777 4786 " <span class=\"fa fa-exclamation-triangle\"></span> Report groups trending over {{ $ctrl.timeSpan.label }}\n" +
4778 4787 " </h3>\n" +
4779 4788 " </div>\n" +
4780 4789 " <div class=\"panel-body\">\n" +
4781 4790 " <p ng-if=\"$ctrl.loading.reports != false\" class=\"text-center\">\n" +
4782 4791 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4783 4792 " </p>\n" +
4784 4793 "\n" +
4785 4794 " <p ng-if=\"$ctrl.trendingReports.length == 0 && $ctrl.loading.reports == false\">\n" +
4786 4795 " No reports found\n" +
4787 4796 " </p>\n" +
4788 4797 "\n" +
4789 4798 " <div small-report-group-list groups=\"$ctrl.trendingReports\" applications=\"$ctrl.applications\" ng-if=\"$ctrl.loading.reports==false\"></div>\n" +
4790 4799 " </div>\n" +
4791 4800 " </div>\n" +
4792 4801 "\n" +
4793 4802 " </div>\n" +
4794 4803 "\n" +
4795 4804 " <div class=\"col-sm-6\">\n" +
4796 4805 "\n" +
4797 4806 "\n" +
4798 4807 " <div class=\"panel panel-default\">\n" +
4799 4808 " <div class=\"panel-heading\">\n" +
4800 4809 " <h3 class=\"panel-title\">\n" +
4801 4810 " Most common slow calls over {{ $ctrl.timeSpan.label }}\n" +
4802 4811 " </h3>\n" +
4803 4812 " </div>\n" +
4804 4813 " <div class=\"panel-body\">\n" +
4805 4814 "\n" +
4806 4815 " <div ng-if=\"$ctrl.loading.slowCalls!=false\" class=\"text-center\">\n" +
4807 4816 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4808 4817 " </div>\n" +
4809 4818 "\n" +
4810 4819 " <table id=\"slow-statements\" ng-if=\"$ctrl.loading.slowCalls==false\">\n" +
4811 4820 " <tbody>\n" +
4812 4821 " <tr ng-repeat=\"call in $ctrl.slowCalls\">\n" +
4813 4822 " <td class=\"occurences\">\n" +
4814 4823 " <span class=\"occurences\" data-uib-tooltip=\"Occurences\">{{call.occurences|numberToThousands}}</span>\n" +
4815 4824 " </td>\n" +
4816 4825 " <td class=\"ellipsis\">\n" +
4817 4826 " <small title=\"{{call.statement}}\" class=\"statement\">{{call.statement}}</small>\n" +
4818 4827 " <br/>\n" +
4819 4828 " <span class=\"type\">{{call.statement_type}}</span>\n" +
4820 4829 " <span class=\"subtype\">{{call.statement_subtype}}</span>\n" +
4821 4830 " <span class=\"duration\" data-uib-tooltip=\"Average duration\">{{call.total_duration/call.occurences|round:2}}s</span>\n" +
4822 4831 " <span class=\"report-list\">\n" +
4823 4832 " Latest reports:\n" +
4824 4833 " <a ng-repeat=\"d in call.latest_details\" target=\"_blank\" ui-sref=\"report.view_detail({groupId:d.group_id, reportId:d.report_id})\"> <strong>{{$index+1}}</strong> </a>\n" +
4825 4834 " </span>\n" +
4826 4835 " </td>\n" +
4827 4836 " </tr>\n" +
4828 4837 " </tbody>\n" +
4829 4838 " </table>\n" +
4830 4839 "\n" +
4831 4840 "\n" +
4832 4841 " </div>\n" +
4833 4842 " </div>\n" +
4834 4843 "\n" +
4835 4844 "\n" +
4836 4845 " </div>\n" +
4837 4846 "\n" +
4838 4847 " </div>\n" +
4839 4848 " </div>\n" +
4840 4849 " </div>\n" +
4841 4850 "</div>\n"
4842 4851 );
4843 4852
4844 4853
4845 4854 $templateCache.put('components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
4846 4855 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4847 4856 "\n" +
4848 4857 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4849 4858 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4850 4859 " <div class=\"panel-body\">\n" +
4851 4860 "\n" +
4852 4861 " <h1>Bitbucket Integration</h1>\n" +
4853 4862 "\n" +
4854 4863 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4855 4864 " <div class=\"form-group\">\n" +
4856 4865 "\n" +
4857 4866 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
4858 4867 "\n" +
4859 4868 " <div class=\"col-sm-8 col-lg-9\">\n" +
4860 4869 "\n" +
4861 4870 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4862 4871 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
4863 4872 "\n" +
4864 4873 " <div class=\"input-group\">\n" +
4865 4874 " <div class=\"input-group-addon\">https://bitbucket.org/</div>\n" +
4866 4875 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
4867 4876 " <div class=\"input-group-addon\">/</div>\n" +
4868 4877 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
4869 4878 " </div>\n" +
4870 4879 "\n" +
4871 4880 " </div>\n" +
4872 4881 " </div>\n" +
4873 4882 " <div class=\"form-group\">\n" +
4874 4883 "\n" +
4875 4884 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4876 4885 "\n" +
4877 4886 " <div class=\"col-sm-8 col-lg-9\">\n" +
4878 4887 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
4879 4888 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4880 4889 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4881 4890 " <ul class=\"dropdown-menu\">\n" +
4882 4891 " <li><a>No</a></li>\n" +
4883 4892 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4884 4893 " </ul>\n" +
4885 4894 " </span>\n" +
4886 4895 " </div>\n" +
4887 4896 " </div>\n" +
4888 4897 " </form>\n" +
4889 4898 "\n" +
4890 4899 " <p class=\"m-t-1\">Remember you first need to\n" +
4891 4900 " <strong>\n" +
4892 4901 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
4893 4902 " with Bitbucket before we can send issues on your behalf.</p>\n" +
4894 4903 "\n" +
4895 4904 " <p>Every user will have to authorize AppEnlight to access Bitbucket to be able to post issues.</p>\n" +
4896 4905 "\n" +
4897 4906 " </div>\n" +
4898 4907 "</div>\n"
4899 4908 );
4900 4909
4901 4910
4902 4911 $templateCache.put('components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
4903 4912 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4904 4913 "\n" +
4905 4914 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4906 4915 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4907 4916 " <div class=\"panel-body\">\n" +
4908 4917 " <h1>Campfire Integration</h1>\n" +
4909 4918 "\n" +
4910 4919 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4911 4920 "\n" +
4912 4921 " <div class=\"form-group\">\n" +
4913 4922 "\n" +
4914 4923 " <label class=\"control-label col-sm-3 col-lg-2\">Account name</label>\n" +
4915 4924 " <div class=\"col-sm-8 col-lg-9\">\n" +
4916 4925 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4917 4926 "\n" +
4918 4927 " <div class=\"input-group\">\n" +
4919 4928 " <div class=\"input-group-addon\">http://</div>\n" +
4920 4929 " <input class=\"form-control\" ng-model=\"$ctrl.config.account\" placeholder=\"account\">\n" +
4921 4930 " <div class=\"input-group-addon\">.campfirenow.com</div>\n" +
4922 4931 " </div>\n" +
4923 4932 " </div>\n" +
4924 4933 " </div>\n" +
4925 4934 "\n" +
4926 4935 " <div class=\"form-group\">\n" +
4927 4936 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4928 4937 " <div class=\"col-sm-8 col-lg-9\">\n" +
4929 4938 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4930 4939 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\">\n" +
4931 4940 " </div>\n" +
4932 4941 " </div>\n" +
4933 4942 "\n" +
4934 4943 " <div class=\"form-group\">\n" +
4935 4944 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
4936 4945 " <div class=\"col-sm-8 col-lg-9\">\n" +
4937 4946 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
4938 4947 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\">\n" +
4939 4948 " <p>\n" +
4940 4949 " <small>Room ID list separated by comma</small>\n" +
4941 4950 " </p>\n" +
4942 4951 " </div>\n" +
4943 4952 " </div>\n" +
4944 4953 " <div class=\"form-group\">\n" +
4945 4954 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Campfire\">\n" +
4946 4955 "\n" +
4947 4956 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4948 4957 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4949 4958 " <ul class=\"dropdown-menu\">\n" +
4950 4959 " <li><a>No</a></li>\n" +
4951 4960 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4952 4961 " </ul>\n" +
4953 4962 " </span>\n" +
4954 4963 "\n" +
4955 4964 " <div class=\"btn-group\" uib-dropdown>\n" +
4956 4965 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4957 4966 " Test integration <span class=\"caret\"></span>\n" +
4958 4967 " </button>\n" +
4959 4968 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4960 4969 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4961 4970 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4962 4971 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4963 4972 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4964 4973 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4965 4974 " </ul>\n" +
4966 4975 " </div>\n" +
4967 4976 "\n" +
4968 4977 " </div>\n" +
4969 4978 "\n" +
4970 4979 " </form>\n" +
4971 4980 "\n" +
4972 4981 " </div>\n" +
4973 4982 "</div>\n"
4974 4983 );
4975 4984
4976 4985
4977 4986 $templateCache.put('components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
4978 4987 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4979 4988 "\n" +
4980 4989 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4981 4990 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4982 4991 " <div class=\"panel-body\">\n" +
4983 4992 "\n" +
4984 4993 " <h1>Flowdock Integration</h1>\n" +
4985 4994 "\n" +
4986 4995 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4987 4996 "\n" +
4988 4997 " <div class=\"form-group\">\n" +
4989 4998 "\n" +
4990 4999 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4991 5000 "\n" +
4992 5001 " <div class=\"col-sm-8 col-lg-9\">\n" +
4993 5002 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4994 5003 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
4995 5004 " </div>\n" +
4996 5005 "\n" +
4997 5006 "\n" +
4998 5007 " </div>\n" +
4999 5008 "\n" +
5000 5009 " <div class=\"form-group\">\n" +
5001 5010 "\n" +
5002 5011 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5003 5012 "\n" +
5004 5013 " <div class=\"col-sm-8 col-lg-9\">\n" +
5005 5014 "\n" +
5006 5015 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Flowdock\">\n" +
5007 5016 "\n" +
5008 5017 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5009 5018 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5010 5019 " <ul class=\"dropdown-menu\">\n" +
5011 5020 " <li><a>No</a></li>\n" +
5012 5021 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5013 5022 " </ul>\n" +
5014 5023 " </span>\n" +
5015 5024 " <div class=\"btn-group\" uib-dropdown>\n" +
5016 5025 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5017 5026 " Test integration <span class=\"caret\"></span>\n" +
5018 5027 " </button>\n" +
5019 5028 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5020 5029 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5021 5030 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5022 5031 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5023 5032 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5024 5033 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5025 5034 " </ul>\n" +
5026 5035 " </div>\n" +
5027 5036 " </div>\n" +
5028 5037 " </div>\n" +
5029 5038 "\n" +
5030 5039 "\n" +
5031 5040 " </form>\n" +
5032 5041 "\n" +
5033 5042 " </div>\n" +
5034 5043 "</div>\n"
5035 5044 );
5036 5045
5037 5046
5038 5047 $templateCache.put('components/views/integrations/github-integration-config-view/github-integration-config-view.html',
5039 5048 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5040 5049 "\n" +
5041 5050 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application && !$ctrl.loading.integration\">\n" +
5042 5051 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5043 5052 " <div class=\"panel-body\">\n" +
5044 5053 "\n" +
5045 5054 " <h1>Github Integration</h1>\n" +
5046 5055 "\n" +
5047 5056 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5048 5057 "\n" +
5049 5058 "\n" +
5050 5059 " <div class=\"form-group\">\n" +
5051 5060 "\n" +
5052 5061 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
5053 5062 "\n" +
5054 5063 " <div class=\"col-sm-8 col-lg-9\">\n" +
5055 5064 "\n" +
5056 5065 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5057 5066 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
5058 5067 "\n" +
5059 5068 " <div class=\"input-group\">\n" +
5060 5069 " <div class=\"input-group-addon\">https://api.github.com/</div>\n" +
5061 5070 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
5062 5071 " <div class=\"input-group-addon\">/</div>\n" +
5063 5072 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
5064 5073 " </div>\n" +
5065 5074 "\n" +
5066 5075 " </div>\n" +
5067 5076 " </div>\n" +
5068 5077 "\n" +
5069 5078 " <div class=\"form-group\">\n" +
5070 5079 "\n" +
5071 5080 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5072 5081 "\n" +
5073 5082 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
5074 5083 "\n" +
5075 5084 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5076 5085 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5077 5086 " <ul class=\"dropdown-menu\">\n" +
5078 5087 " <li><a>No</a></li>\n" +
5079 5088 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5080 5089 " </ul>\n" +
5081 5090 " </span>\n" +
5082 5091 "\n" +
5083 5092 " </div>\n" +
5084 5093 " </form>\n" +
5085 5094 "\n" +
5086 5095 " <p class=\"m-t-1\">Remember you first need to\n" +
5087 5096 " <strong>\n" +
5088 5097 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
5089 5098 " with Github before we can send issues on your behalf.</p>\n" +
5090 5099 "\n" +
5091 5100 " <p>Every user will have to authorize AppEnlight to access Github to be able to post issues.</p>\n" +
5092 5101 "\n" +
5093 5102 " <div class=\"panel panel-warning\">\n" +
5094 5103 " <div class=\"panel-heading\">Private repository access</div>\n" +
5095 5104 " <div class=\"panel-body\">\n" +
5096 5105 " <p>If you need access to private repositories <a data-ui-sref=\"user.profile.identities\">profile page</a> allows you to require token including private repository permissions.</p>\n" +
5097 5106 "\n" +
5098 5107 " <p>Registration page OAuth does NOT give you token with private repository access permissions.</p>\n" +
5099 5108 " </div>\n" +
5100 5109 " </div>\n" +
5101 5110 "\n" +
5102 5111 " </div>\n" +
5103 5112 "</div>\n"
5104 5113 );
5105 5114
5106 5115
5107 5116 $templateCache.put('components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
5108 5117 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5109 5118 "\n" +
5110 5119 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5111 5120 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5112 5121 " <div class=\"panel-body\">\n" +
5113 5122 "\n" +
5114 5123 " <h1>Hipchat Integration</h1>\n" +
5115 5124 "\n" +
5116 5125 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5117 5126 "\n" +
5118 5127 " <div class=\"form-group\">\n" +
5119 5128 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
5120 5129 "\n" +
5121 5130 " <div class=\"col-sm-8 col-lg-9\">\n" +
5122 5131 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5123 5132 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
5124 5133 " </div>\n" +
5125 5134 " </div>\n" +
5126 5135 "\n" +
5127 5136 " <div class=\"form-group\">\n" +
5128 5137 "\n" +
5129 5138 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
5130 5139 "\n" +
5131 5140 " <div class=\"col-sm-8 col-lg-9\">\n" +
5132 5141 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
5133 5142 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\" type=\"text\">\n" +
5134 5143 "\n" +
5135 5144 " <p>\n" +
5136 5145 " <small>Room ID list separated by comma</small>\n" +
5137 5146 " </p>\n" +
5138 5147 " </div>\n" +
5139 5148 "\n" +
5140 5149 " </div>\n" +
5141 5150 "\n" +
5142 5151 " <div class=\"form-group\">\n" +
5143 5152 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5144 5153 " <div class=\"col-sm-8 col-lg-9\">\n" +
5145 5154 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Hipchat\">\n" +
5146 5155 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5147 5156 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5148 5157 " <ul class=\"dropdown-menu\">\n" +
5149 5158 " <li><a>No</a></li>\n" +
5150 5159 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5151 5160 " </ul>\n" +
5152 5161 " </span>\n" +
5153 5162 "\n" +
5154 5163 " <div class=\"btn-group\" uib-dropdown>\n" +
5155 5164 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5156 5165 " Test integration <span class=\"caret\"></span>\n" +
5157 5166 " </button>\n" +
5158 5167 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5159 5168 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5160 5169 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5161 5170 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5162 5171 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5163 5172 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5164 5173 " </ul>\n" +
5165 5174 " </div>\n" +
5166 5175 "\n" +
5167 5176 " </div>\n" +
5168 5177 " </div>\n" +
5169 5178 "\n" +
5170 5179 " </form>\n" +
5171 5180 "\n" +
5172 5181 " </div>\n" +
5173 5182 "</div>\n"
5174 5183 );
5175 5184
5176 5185
5177 5186 $templateCache.put('components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
5178 5187 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5179 5188 "\n" +
5180 5189 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5181 5190 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5182 5191 " <div class=\"panel-body\">\n" +
5183 5192 "\n" +
5184 5193 " <h1>Jira Integration</h1>\n" +
5185 5194 "\n" +
5186 5195 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5187 5196 "\n" +
5188 5197 " <div class=\"form-group\" id=\"row-host_name\">\n" +
5189 5198 "\n" +
5190 5199 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5191 5200 " Server URL <span class=\"required\">*</span>\n" +
5192 5201 " </label>\n" +
5193 5202 " <div class=\"col-sm-8 col-lg-9\">\n" +
5194 5203 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.host_name\"></data-form-errors>\n" +
5195 5204 " <input class=\"form-control\" id=\"host_name\" name=\"host_name\" type=\"text\" ng-model=\"$ctrl.config.host_name\">\n" +
5196 5205 "\n" +
5197 5206 " <p>\n" +
5198 5207 " <small>https://servername.atlassian.net</small>\n" +
5199 5208 " </p>\n" +
5200 5209 "\n" +
5201 5210 " </div>\n" +
5202 5211 " </div>\n" +
5203 5212 " <div class=\"form-group\" id=\"row-user_name\">\n" +
5204 5213 "\n" +
5205 5214 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5206 5215 " Username <span class=\"required\">*</span>\n" +
5207 5216 " </label>\n" +
5208 5217 " <div class=\"col-sm-8 col-lg-9\">\n" +
5209 5218 "\n" +
5210 5219 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5211 5220 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.config.user_name\">\n" +
5212 5221 "\n" +
5213 5222 " <p>\n" +
5214 5223 " <small>user@email.com</small>\n" +
5215 5224 " </p>\n" +
5216 5225 "\n" +
5217 5226 " </div>\n" +
5218 5227 " </div>\n" +
5219 5228 " <div class=\"form-group\" id=\"row-password\">\n" +
5220 5229 "\n" +
5221 5230 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5222 5231 " Password <span class=\"required\">*</span>\n" +
5223 5232 " </label>\n" +
5224 5233 " <div class=\"col-sm-8 col-lg-9\">\n" +
5225 5234 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.password\"></data-form-errors>\n" +
5226 5235 " <input class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" ng-model=\"$ctrl.config.password\">\n" +
5227 5236 " </div>\n" +
5228 5237 " </div>\n" +
5229 5238 " <div class=\"form-group\" id=\"row-project\">\n" +
5230 5239 "\n" +
5231 5240 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5232 5241 " Project key <span class=\"required\">*</span>\n" +
5233 5242 " </label>\n" +
5234 5243 " <div class=\"col-sm-8 col-lg-9\">\n" +
5235 5244 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.project\"></data-form-errors>\n" +
5236 5245 " <input class=\"form-control\" id=\"project\" name=\"project\" type=\"text\" ng-model=\"$ctrl.config.project\">\n" +
5237 5246 " </div>\n" +
5238 5247 " </div>\n" +
5239 5248 " <div class=\"form-group\" id=\"row-submit\">\n" +
5240 5249 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5241 5250 " <div class=\"col-sm-8 col-lg-9\">\n" +
5242 5251 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup Jira\">\n" +
5243 5252 "\n" +
5244 5253 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5245 5254 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5246 5255 " <ul class=\"dropdown-menu\">\n" +
5247 5256 " <li><a>No</a></li>\n" +
5248 5257 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5249 5258 " </ul>\n" +
5250 5259 " </span>\n" +
5251 5260 " </div>\n" +
5252 5261 " </div>\n" +
5253 5262 "\n" +
5254 5263 " </form>\n" +
5255 5264 "\n" +
5256 5265 "\n" +
5257 5266 " </div>\n" +
5258 5267 "</div>\n"
5259 5268 );
5260 5269
5261 5270
5262 5271 $templateCache.put('components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
5263 5272 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5264 5273 "\n" +
5265 5274 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5266 5275 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5267 5276 " <div class=\"panel-body\">\n" +
5268 5277 "\n" +
5269 5278 " <h1>Slack Integration</h1>\n" +
5270 5279 "\n" +
5271 5280 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5272 5281 "\n" +
5273 5282 " <div class=\"form-group\">\n" +
5274 5283 "\n" +
5275 5284 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5276 5285 " API Token <span class=\"required\">*</span>\n" +
5277 5286 " </label>\n" +
5278 5287 " <div class=\"col-sm-8 col-lg-9\">\n" +
5279 5288 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.webhook_url\"></data-form-errors>\n" +
5280 5289 " <input class=\"form-control\" ng-model=\"$ctrl.config.webhook_url\" placeholder=\"Webhook URL\" type=\"webhook_url\">\n" +
5281 5290 " </div>\n" +
5282 5291 " </div>\n" +
5283 5292 "\n" +
5284 5293 " <div class=\"form-group\">\n" +
5285 5294 "\n" +
5286 5295 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5287 5296 " <div class=\"col-sm-8 col-lg-9\">\n" +
5288 5297 " <input type=\"submit\" class=\"btn btn-primary\"\n" +
5289 5298 " value=\"Connect to Slack\">\n" +
5290 5299 "\n" +
5291 5300 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5292 5301 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5293 5302 " <ul class=\"dropdown-menu\">\n" +
5294 5303 " <li><a>No</a></li>\n" +
5295 5304 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5296 5305 " </ul>\n" +
5297 5306 " </span>\n" +
5298 5307 "\n" +
5299 5308 " <div class=\"btn-group\" uib-dropdown>\n" +
5300 5309 " <button type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5301 5310 " Test integration <span class=\"caret\"></span>\n" +
5302 5311 " </button>\n" +
5303 5312 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5304 5313 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5305 5314 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5306 5315 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5307 5316 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5308 5317 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5309 5318 " </ul>\n" +
5310 5319 " </div>\n" +
5311 5320 " </div>\n" +
5312 5321 " </div>\n" +
5313 5322 " </form>\n" +
5314 5323 "\n" +
5315 5324 " </div>\n" +
5316 5325 "</div>\n"
5317 5326 );
5318 5327
5319 5328
5320 5329 $templateCache.put('components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
5321 5330 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5322 5331 "\n" +
5323 5332 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5324 5333 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5325 5334 " <div class=\"panel-body\">\n" +
5326 5335 "\n" +
5327 5336 " <h1>Webhooks Integration</h1>\n" +
5328 5337 "\n" +
5329 5338 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5330 5339 " <div class=\"form-group\" id=\"row-reports_webhook\">\n" +
5331 5340 "\n" +
5332 5341 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5333 5342 " Reports webhook <span class=\"required\">*</span>\n" +
5334 5343 " </label>\n" +
5335 5344 " <div class=\"col-sm-8 col-lg-9\">\n" +
5336 5345 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.reports_webhook\"></data-form-errors>\n" +
5337 5346 " <input class=\"form-control\" id=\"reports_webhook\" name=\"reports_webhook\" type=\"text\" ng-model=\"$ctrl.config.reports_webhook\">\n" +
5338 5347 " </div>\n" +
5339 5348 " </div>\n" +
5340 5349 " <div class=\"form-group\" id=\"row-alerts_webhook\">\n" +
5341 5350 "\n" +
5342 5351 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5343 5352 " Alerts webhook <span class=\"required\">*</span>\n" +
5344 5353 " </label>\n" +
5345 5354 " <div class=\"col-sm-8 col-lg-9\">\n" +
5346 5355 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.alerts_webhook\"></data-form-errors>\n" +
5347 5356 " <input class=\"form-control StringField None\" id=\"alerts_webhook\" name=\"alerts_webhook\" type=\"text\" ng-model=\"$ctrl.config.alerts_webhook\">\n" +
5348 5357 " </div>\n" +
5349 5358 "\n" +
5350 5359 "\n" +
5351 5360 " </div>\n" +
5352 5361 " <div class=\"form-group\" id=\"row-submit\">\n" +
5353 5362 "\n" +
5354 5363 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5355 5364 " <div class=\"col-sm-8 col-lg-9\">\n" +
5356 5365 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup webhooks\">\n" +
5357 5366 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5358 5367 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5359 5368 " <ul class=\"dropdown-menu\">\n" +
5360 5369 " <li><a>No</a></li>\n" +
5361 5370 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5362 5371 " </ul>\n" +
5363 5372 " </span>\n" +
5364 5373 " </div>\n" +
5365 5374 " </div>\n" +
5366 5375 " </form>\n" +
5367 5376 " </div>\n" +
5368 5377 "</div>\n"
5369 5378 );
5370 5379
5371 5380
5372 5381 $templateCache.put('components/views/logs-browser/logs-browser.html',
5373 5382 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.isLoading.logs\"></ng-include>\n" +
5374 5383 "\n" +
5375 5384 "<div ng-if=\"$ctrl.isLoading.logs === false\">\n" +
5376 5385 "\n" +
5377 5386 " <p class=\"search-params\">\n" +
5378 5387 " <strong>Search params:</strong>\n" +
5379 5388 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
5380 5389 " <strong>{{tag.type}}</strong>\n" +
5381 5390 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
5382 5391 "\n" +
5383 5392 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
5384 5393 " </span>\n" +
5385 5394 " </p>\n" +
5386 5395 "\n" +
5387 5396 " <p>\n" +
5388 5397 "\n" +
5389 5398 " <script type=\"text/ng-template\" id=\"SearchTypeAheadUrl.html\">\n" +
5390 5399 "\n" +
5391 5400 " </script>\n" +
5392 5401 "\n" +
5393 5402 " <form class=\"form\">\n" +
5394 5403 " <div class=\"typeahead-tags\">\n" +
5395 5404 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter logs for events, filter by servers, namespaces, levels.\"\n" +
5396 5405 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
5397 5406 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:$ctrl.aheadFilter\"\n" +
5398 5407 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
5399 5408 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
5400 5409 " </div>\n" +
5401 5410 " </form>\n" +
5402 5411 "\n" +
5403 5412 " <div class=\"well animate-show position-absolute increse-zindex\" ng-if=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\">\n" +
5404 5413 " <uib-datepicker></uib-datepicker>\n" +
5405 5414 " </div>\n" +
5406 5415 "\n" +
5407 5416 " </p>\n" +
5408 5417 "\n" +
5409 5418 " <div class=\"panel\">\n" +
5410 5419 "\n" +
5411 5420 " <div class=\"panel-body\">\n" +
5412 5421 " <c3chart data-domid=\"log_events_chart\" data-data=\"$ctrl.logEventsChartData\" data-config=\"$ctrl.logEventsChartConfig\">\n" +
5413 5422 " </c3chart>\n" +
5414 5423 " </div>\n" +
5415 5424 " </div>\n" +
5416 5425 "\n" +
5417 5426 "\n" +
5418 5427 " <div class=\"text-center\">\n" +
5419 5428 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
5420 5429 " ng-change=\"$ctrl.paginationChange()\"\n" +
5421 5430 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
5422 5431 " </div>\n" +
5423 5432 "\n" +
5424 5433 " <div class=\"panel panel-default\">\n" +
5425 5434 "\n" +
5426 5435 " <table class=\"table table-striped log-list\">\n" +
5427 5436 " <caption>Logs</caption>\n" +
5428 5437 " <thead>\n" +
5429 5438 " <tr>\n" +
5430 5439 " <th class=\"c1 resource\">Application</th>\n" +
5431 5440 " <th class=\"c2 message\">Message</th>\n" +
5432 5441 " <th class=\"c3 when\">When</th>\n" +
5433 5442 " </tr>\n" +
5434 5443 " </thead>\n" +
5435 5444 " <tbody>\n" +
5436 5445 " <tr ng-repeat=\"log in $ctrl.logsPage track by log.log_id\" class=\"{{$odd ? 'odd' : 'even'}}\">\n" +
5437 5446 " <td class=\"c1\">\n" +
5438 5447 " <a class=\"tag application\" ng-click=\"$ctrl.addSearchTag({type:'resource', value:log.resource_id})\">\n" +
5439 5448 " <span class=\"name\">{{log.resource_name}}</span></a>\n" +
5440 5449 " </td>\n" +
5441 5450 " <td class=\"c2\">\n" +
5442 5451 " <a class=\"tag {{log.log_level|lowercase}}\" ng-click=\"$ctrl.addSearchTag({type:'level', value:log.log_level})\">\n" +
5443 5452 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
5444 5453 " <a class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:'namespace', value:log.namespace})\">\n" +
5445 5454 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
5446 5455 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:tag, value:value})\">\n" +
5447 5456 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
5448 5457 " <div class=\"log\">{{log.message}}</div>\n" +
5449 5458 " </td>\n" +
5450 5459 " <td class=\"c3 when\">\n" +
5451 5460 " <a ng-click=\"$ctrl.filterId(log)\" data-uib-tooltip=\"{{log.timestamp}}\">\n" +
5452 5461 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
5453 5462 " </a>\n" +
5454 5463 " </td>\n" +
5455 5464 " </tr>\n" +
5456 5465 "\n" +
5457 5466 " </tbody>\n" +
5458 5467 " </table>\n" +
5459 5468 "\n" +
5460 5469 " </div>\n" +
5461 5470 "\n" +
5462 5471 " <div class=\"text-center\">\n" +
5463 5472 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
5464 5473 " ng-change=\"$ctrl.paginationChange()\"\n" +
5465 5474 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
5466 5475 " </div>\n" +
5467 5476 "\n" +
5468 5477 "</div>\n"
5469 5478 );
5470 5479
5471 5480
5472 5481 $templateCache.put('components/views/report-view/report-view.html',
5473 5482 "<script type=\"text/ng-template\" id=\"slow_call.html\">\n" +
5474 5483 " <table class=\"report-table\">\n" +
5475 5484 " <tr>\n" +
5476 5485 " <td class=\"table-label\">Type</td>\n" +
5477 5486 " <td class=\"data\"><strong>{{call.type}}\n" +
5478 5487 " ({{call.subtype}})\n" +
5479 5488 " </strong></td>\n" +
5480 5489 " </tr>\n" +
5481 5490 " <tr>\n" +
5482 5491 " <td class=\"table-label\">Duration</td>\n" +
5483 5492 " <td class=\"data\"><strong class=\"textColor_1\">{{call.duration}}</strong></td>\n" +
5484 5493 " </tr>\n" +
5485 5494 " <tr>\n" +
5486 5495 " <td class=\"table-label\">Start Time</td>\n" +
5487 5496 " <td class=\"data\">{{call.timestamp}}</td>\n" +
5488 5497 " </tr>\n" +
5489 5498 " <tr>\n" +
5490 5499 " <td class=\"table-label\">Statement</td>\n" +
5491 5500 " <td class=\"data\">\n" +
5492 5501 " <pre class=\"word-wrap\">{{call.statement}}</pre>\n" +
5493 5502 " </td>\n" +
5494 5503 " </tr>\n" +
5495 5504 " <tr ng-if=\"call.location\">\n" +
5496 5505 " <td class=\"table-label\">Location</td>\n" +
5497 5506 " <td class=\"data\">{{call.location}}</td>\n" +
5498 5507 " </tr>\n" +
5499 5508 " <tr>\n" +
5500 5509 " <td class=\"table-label\">Parameters</td>\n" +
5501 5510 " <td class=\"\">\n" +
5502 5511 " <div class=\"var-listing\" human-format vars=\"call.parameters\"></div>\n" +
5503 5512 " </td>\n" +
5504 5513 " </tr>\n" +
5505 5514 " </table>\n" +
5506 5515 "\n" +
5507 5516 " <div ng-if=\"call.children.length > 0\" class=\"subcalls p-l-8\">\n" +
5508 5517 "\n" +
5509 5518 " <p><strong>\n" +
5510 5519 " <small>Sub-calls</small>\n" +
5511 5520 " </strong></p>\n" +
5512 5521 "\n" +
5513 5522 " <div class=\"panel panel-default\">\n" +
5514 5523 " <div ng-repeat=\"call in call.children\" ng-include=\"'slow_call.html'\" class=\"panel-body\"/>\n" +
5515 5524 " </div>\n" +
5516 5525 " </div>\n" +
5517 5526 " </div>\n" +
5518 5527 "\n" +
5519 5528 "</script>\n" +
5520 5529 "\n" +
5521 5530 "<script type=\"text/ng-template\" id=\"AssignReportCtrl.html\">\n" +
5522 5531 "\n" +
5523 5532 " <div class=\"modal-header\">\n" +
5524 5533 " <h3>Assign users to report</h3>\n" +
5525 5534 " </div>\n" +
5526 5535 " <div class=\"modal-body\">\n" +
5527 5536 "\n" +
5528 5537 " <ng-include src=\"'templates/loader.html'\" ng-if=\"ctrl.loading\"></ng-include>\n" +
5529 5538 "\n" +
5530 5539 " <div class=\"row\" ng-if=\"!ctrl.loading\">\n" +
5531 5540 " <div class=\"col-sm-6\">\n" +
5532 5541 " <strong>Unassigned</strong>\n" +
5533 5542 "\n" +
5534 5543 " <div class=\"user-assignment\" ng-repeat=\"user in ctrl.unAssignedUsers\"\n" +
5535 5544 " ng-click=\"ctrl.reassignUser(user)\">\n" +
5536 5545 " <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
5537 5546 " <strong>{{user.user_name}}</strong><br/>\n" +
5538 5547 " {{user.name}}\n" +
5539 5548 " <div class=\"clear\"></div>\n" +
5540 5549 " </div>\n" +
5541 5550 " </div>\n" +
5542 5551 "\n" +
5543 5552 " <div class=\"col-sm-6\">\n" +
5544 5553 " <strong>Assigned</strong>\n" +
5545 5554 "\n" +
5546 5555 " <div class=\"user-assignment\" ng-repeat=\"user in ctrl.assignedUsers\" ng-click=\"ctrl.reassignUser(user)\">\n" +
5547 5556 " <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
5548 5557 " {{user.user_name}}<br/>\n" +
5549 5558 " {{user.name}}\n" +
5550 5559 " <div class=\"clear\"></div>\n" +
5551 5560 " </div>\n" +
5552 5561 " </div>\n" +
5553 5562 " </div>\n" +
5554 5563 " </div>\n" +
5555 5564 " <div class=\"modal-footer\">\n" +
5556 5565 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">OK</button>\n" +
5557 5566 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
5558 5567 " </div>\n" +
5559 5568 "</script>\n" +
5560 5569 "\n" +
5561 5570 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading.report\"></ng-include>\n" +
5562 5571 "\n" +
5563 5572 "<div ng-if=\"!$ctrl.is_loading.report && $ctrl.report === null\">\n" +
5564 5573 " <strong>OOPS something went wrong :(</strong>\n" +
5565 5574 "</div>\n" +
5566 5575 "\n" +
5567 5576 "<div ng-if=\"$ctrl.report !== null && !$ctrl.is_loading.report\">\n" +
5568 5577 "\n" +
5569 5578 " <div ng-if=\"$ctrl.stateHolder.AeUser.id\" class=\"row\">\n" +
5570 5579 " <div class=\"col-lg-12\">\n" +
5571 5580 " <a onclick=\"window.history.back()\" class=\"btn btn-default\" ng-if=\"$ctrl.window.history.length > 2\"><span class=\"fa fa-arrow-circle-o-left\"></span>\n" +
5572 5581 " Go back</a>\n" +
5573 5582 " <a class=\"btn btn-default\" ng-click=\"$ctrl.assignUsersModal()\" ng-if=\"$ctrl.reportType == 'report'\"><span\n" +
5574 5583 " class=\"fa fa-flag\"></span> Assign report\n" +
5575 5584 " to user</a>\n" +
5576 5585 "\n" +
5577 5586 " <a class=\"btn {{ $ctrl.report.group.fixed ? 'btn-success' : 'btn-default'}}\" ng-click=\"$ctrl.markFixed()\"\n" +
5578 5587 " ng-if=\"$ctrl.reportType == 'report'\">\n" +
5579 5588 " <span class=\"fa fa-check\"></span> Mark fixed</a>\n" +
5580 5589 "\n" +
5581 5590 " <span class=\"dropdown\" ng-if=\"$ctrl.report.application.integrations.length\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5582 5591 " <a class=\"dropdown-toggle btn btn-default\" data-uib-dropdown-toggle>\n" +
5583 5592 " <span class=\"fa fa-send\"></span> Integrations\n" +
5584 5593 " </a>\n" +
5585 5594 " <ul class=\"dropdown-menu\">\n" +
5586 5595 " <li ng-repeat=\"choice in $ctrl.report.application.integrations\">\n" +
5587 5596 " <a ng-click=\"$ctrl.runIntegration(choice.name)\">{{choice.action}}</a>\n" +
5588 5597 " </li>\n" +
5589 5598 " </ul>\n" +
5590 5599 " </span>\n" +
5591 5600 "\n" +
5592 5601 " <a class=\"btn btn-default\" ng-click=\"$ctrl.markPublic()\">Make {{$ctrl.group.public ? 'private' : 'public'}}</a>\n" +
5593 5602 "\n" +
5594 5603 "<span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5595 5604 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Delete</a>\n" +
5596 5605 " <ul class=\"dropdown-menu\">\n" +
5597 5606 " <li><a>No</a></li>\n" +
5598 5607 " <li><a ng-click=\"$ctrl.delete()\">Yes</a></li>\n" +
5599 5608 " </ul>\n" +
5600 5609 "</span>\n" +
5601 5610 " </div>\n" +
5602 5611 " </div>\n" +
5603 5612 "\n" +
5604 5613 " <div class=\"row\">\n" +
5605 5614 " <div class=\"col-lg-4\">\n" +
5606 5615 "\n" +
5607 5616 " <div class=\"panel panel-default m-t-1\">\n" +
5608 5617 " <div class=\"panel-body\">\n" +
5609 5618 "\n" +
5610 5619 " <h3 class=\"m-t-0\">Report Information</h3>\n" +
5611 5620 "\n" +
5612 5621 " <table class=\"report-table with-ellipsis\">\n" +
5613 5622 " <tr>\n" +
5614 5623 " <td class=\"table-label\">Occurences</td>\n" +
5615 5624 " <td class=\"data\">{{$ctrl.report.group.occurences}}</td>\n" +
5616 5625 " </tr>\n" +
5617 5626 " <tr ng-if=\"$ctrl.report.http_status\">\n" +
5618 5627 " <td class=\"table-label\">HTTP status</td>\n" +
5619 5628 " <td class=\"data\">{{$ctrl.report.http_status}}</td>\n" +
5620 5629 " </tr>\n" +
5621 5630 " <tr ng-if=\"$ctrl.report.group.priority\">\n" +
5622 5631 " <td class=\"table-label\">Priority</td>\n" +
5623 5632 " <td class=\"data\">{{$ctrl.report.group.priority}}</td>\n" +
5624 5633 " </tr>\n" +
5625 5634 " <tr ng-if=\"$ctrl.report.group.public\">\n" +
5626 5635 " <td class=\"table-label\">Public URL</td>\n" +
5627 5636 " <td class=\"data\">\n" +
5628 5637 " <form>\n" +
5629 5638 " <textarea class=\"TextAreaField form-control\" id=\"public-url\" onclick=\"this.select()\">{{$ctrl.$state.href($ctrl.$state.current.name, $ctrl.$state.params, {absolute: true})}}</textarea>\n" +
5630 5639 " </form>\n" +
5631 5640 " </td>\n" +
5632 5641 " </tr>\n" +
5633 5642 " <tr data-uib-tooltip=\"{{$ctrl.report.url}}\">\n" +
5634 5643 " <td class=\"table-label\">URL</td>\n" +
5635 5644 " <td class=\"data ellipsis\"><a href=\"{{$ctrl.report.url}}\">{{$ctrl.report.url}}</a></td>\n" +
5636 5645 " </tr>\n" +
5637 5646 "\n" +
5638 5647 " <tr ng-if=\"$ctrl.report.ip\">\n" +
5639 5648 " <td class=\"table-label\">Remote IP</td>\n" +
5640 5649 " <td class=\"data\">{{$ctrl.report.ip}}</td>\n" +
5641 5650 " </tr>\n" +
5642 5651 " <tr ng-if=\"$ctrl.report.user_agent\" data-uib-tooltip=\"{{$ctrl.report.user_agent}}\">\n" +
5643 5652 " <td class=\"table-label\">User Agent</td>\n" +
5644 5653 " <td class=\"data ellipsis\">{{$ctrl.report.user_agent}}</td>\n" +
5645 5654 " </tr>\n" +
5646 5655 " <tr ng-if=\"$ctrl.report.message\">\n" +
5647 5656 " <td class=\"table-label\">Message</td>\n" +
5648 5657 " <td class=\"data\">{{$ctrl.report.message}}</td>\n" +
5649 5658 " </tr>\n" +
5650 5659 " <tr ng-if=\"$ctrl.report.duration > 0\">\n" +
5651 5660 " <td class=\"table-label\">Duration</td>\n" +
5652 5661 " <td class=\"data\">\n" +
5653 5662 " <span>{{$ctrl.report.duration}}s</span>\n" +
5654 5663 " </td>\n" +
5655 5664 " </tr>\n" +
5656 5665 " <tr>\n" +
5657 5666 " <td class=\"table-label\">First occured</td>\n" +
5658 5667 " <td class=\"data\">\n" +
5659 5668 " <span uib-tooltip=\"{{$ctrl.report.group.first_timestamp}}\"><iso-to-relative-time\n" +
5660 5669 " time=\"{{$ctrl.report.group.first_timestamp}}\"/></span>\n" +
5661 5670 " </td>\n" +
5662 5671 " </tr>\n" +
5663 5672 " <tr>\n" +
5664 5673 " <td class=\"table-label\">Last occured</td>\n" +
5665 5674 " <td class=\"data\">\n" +
5666 5675 " <span uib-tooltip=\"{{$ctrl.report.group.last_timestamp}}\"><iso-to-relative-time\n" +
5667 5676 " time=\"{{$ctrl.report.group.last_timestamp}}\"/></span>\n" +
5668 5677 " </td>\n" +
5669 5678 " </tr>\n" +
5670 5679 " </table>\n" +
5671 5680 "\n" +
5672 5681 " <div ng-if=\"$ctrl.requestStats\">\n" +
5673 5682 " <h3>Performance stats</h3>\n" +
5674 5683 "\n" +
5675 5684 " <div class=\"perf_stats\">\n" +
5676 5685 " <span class=\"stat\" ng-repeat=\"stat in $ctrl.requestStats\"\n" +
5677 5686 " ng-if=\"stat.calls > 0 || stat.value > 0\"><strong>\n" +
5678 5687 " <span class=\"{{stat.name}} bar\" style=\"width:10px\"></span> {{stat.calls}}\n" +
5679 5688 " <span ng-if=\"stat.name!='main'\"><small>{{stat.name}} calls</small></span>\n" +
5680 5689 " <span ng-if=\"stat.name=='main'\">\n" +
5681 5690 " <span class=\"fa fa-question-circle\"\n" +
5682 5691 " data-uib-tooltip=\"Execution time that didnt get assigned to other layers\"></span> Other</span>\n" +
5683 5692 " </strong>\n" +
5684 5693 " </span>\n" +
5685 5694 "\n" +
5686 5695 " <div style=\"width: 100%; overflow:hidden\">\n" +
5687 5696 " <div class=\"{{stat.name}} bar\" style=\"width:{{stat.percent}}%; height: 25px\"\n" +
5688 5697 " ng-repeat=\"stat in $ctrl.requestStats\"\n" +
5689 5698 " data-uib-tooltip=\"{{stat.value}}s - Cumulative time spent in this request on all {{ stat.name }} calls\"></div>\n" +
5690 5699 " <div class=\"row\">\n" +
5691 5700 " <div class=\"col-xs-6 text-left\">\n" +
5692 5701 " <small>0s</small>\n" +
5693 5702 " </div>\n" +
5694 5703 " <div class=\"col-xs-6 text-right\">\n" +
5695 5704 " <small>{{$ctrl.report.duration.toFixed(3)}}s</small>\n" +
5696 5705 " </div>\n" +
5697 5706 " </div>\n" +
5698 5707 " </div>\n" +
5699 5708 " </div>\n" +
5700 5709 " </div>\n" +
5701 5710 "\n" +
5702 5711 " <h3>Tags</h3>\n" +
5703 5712 "\n" +
5704 5713 " <table class=\"report-table with-tags\">\n" +
5705 5714 " <tr ng-repeat=\"(tag, value) in $ctrl.report.tags\">\n" +
5706 5715 " <td class=\"table-label\" ng-switch=\"tag\"><!--\n" +
5707 5716 " --><span ng-switch-when=\"user_name\">Username/UID</span><!--\n" +
5708 5717 " --><span ng-switch-when=\"view_name\">View Name</span><!--\n" +
5709 5718 " --><span ng-switch-when=\"server_name\">Server Name</span><!--\n" +
5710 5719 " --><span ng-switch-default>{{ tag }}</span>\n" +
5711 5720 " </td>\n" +
5712 5721 " <td class=\"data\"><a ng-click=\"$ctrl.searchTag(tag, value)\">{{ value }}</td>\n" +
5713 5722 " </tr>\n" +
5714 5723 " </table>\n" +
5715 5724 "\n" +
5716 5725 " </div>\n" +
5717 5726 " </div>\n" +
5718 5727 "\n" +
5719 5728 "\n" +
5720 5729 " </div>\n" +
5721 5730 " <div class=\"col-lg-8\">\n" +
5722 5731 " <div class=\"frames\">\n" +
5723 5732 " <p class=\"text-center\">Report history</p>\n" +
5724 5733 "\n" +
5725 5734 " <div class=\"panel\" ng-if=\"!$ctrl.is_loading.history\">\n" +
5726 5735 " <div class=\"panel-body\">\n" +
5727 5736 " <c3chart data-domid=\"report_history_chart\" data-data=\"$ctrl.reportHistoryData\" data-config=\"$ctrl.reportHistoryConfig\">\n" +
5728 5737 " </c3chart>\n" +
5729 5738 " </div>\n" +
5730 5739 " </div>\n" +
5731 5740 "\n" +
5732 5741 " <div class=\"row m-b-1\">\n" +
5733 5742 " <div class=\"col-sm-2 text-left\">\n" +
5734 5743 " <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.previous_report ? '' : 'disabled'}}\"\n" +
5735 5744 " ng-click=\"$ctrl.previousDetail()\">\n" +
5736 5745 " <span class=\"fa fa-arrow-left\"></span>\n" +
5737 5746 " Prev. detail</a>\n" +
5738 5747 "\n" +
5739 5748 " </div>\n" +
5740 5749 " <div class=\"col-sm-8 text-center\">\n" +
5741 5750 " <small>\n" +
5742 5751 " <span uib-tooltip=\"{{$ctrl.report.start_time|isoToRelativeTime}}\" class=\"m-r-1\">\n" +
5743 5752 " {{$ctrl.report.start_time.replace('T', ' ')}} UTC</span>\n" +
5744 5753 " <span class=\"text-muted\">ID: {{$ctrl.report.request_id}}</span>\n" +
5745 5754 " </small>\n" +
5746 5755 " </div>\n" +
5747 5756 " <div class=\"col-sm-2 text-right\">\n" +
5748 5757 " <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.next_report ? '' : 'disabled'}}\"\n" +
5749 5758 " ng-click=\"$ctrl.nextDetail()\">\n" +
5750 5759 " Next detail <span class=\"fa fa-arrow-right\"></span></a>\n" +
5751 5760 " </div>\n" +
5752 5761 " </div>\n" +
5753 5762 "\n" +
5754 5763 " <h3 class=\"word-wrap\">{{$ctrl.report.error}}</h3>\n" +
5755 5764 "\n" +
5756 5765 " <div ng-if=\"$ctrl.report.traceback\">\n" +
5757 5766 "\n" +
5758 5767 " <h3><strong>Traceback</strong></h3>\n" +
5759 5768 "\n" +
5760 5769 " <div class=\"btn-group\">\n" +
5761 5770 " <a ng-if=\"$ctrl.traceback.length-10 > 0 \" ng-click=\"$ctrl.showLong = !$ctrl.showLong\"\n" +
5762 5771 " class=\"btn btn-default {{$ctrl.showLong ? 'active' : ''}}\">\n" +
5763 5772 " <span class=\"fa fa-align-left\"></span>\n" +
5764 5773 " <small>Show {{$ctrl.traceback.length-10}} remaining frames</small>\n" +
5765 5774 " </a>\n" +
5766 5775 "\n" +
5767 5776 " <a class=\"btn btn-default {{$ctrl.showRaw ? 'active' : ''}}\" ng-click=\"$ctrl.showRaw = !$ctrl.showRaw\">\n" +
5768 5777 " <span class=\"fa fa-list\"></span>\n" +
5769 5778 " <small>Raw version</small>\n" +
5770 5779 " </a>\n" +
5771 5780 " </div>\n" +
5772 5781 "\n" +
5773 5782 " <div ng-if=\"$ctrl.showRaw\" class=\"m-t-1\">\n" +
5774 5783 " <pre>{{$ctrl.rawTraceback}}</pre>\n" +
5775 5784 " </div>\n" +
5776 5785 " <div ng-if=\"!$ctrl.showRaw\" class=\"m-t-1\">\n" +
5777 5786 "\n" +
5778 5787 " <div ng-repeat=\"frame in $ctrl.traceback\" class=\"frame {{$odd ? 'odd' : 'even'}}\"\n" +
5779 5788 " ng-if=\"$index >= $ctrl.traceback.length-10 || $ctrl.traceback.length <= 10 || $ctrl.showLong\">\n" +
5780 5789 " <div class=\"frameline\" ng-if=\"frame.line\">\n" +
5781 5790 " <a class=\"inspect_vars\" ng-click=\"frame.showVars = !frame.showVars\" ng-if=\"frame.vars\">\n" +
5782 5791 " <span class=\"fa fa-search dim btn btn-default\"\n" +
5783 5792 " uib-tooltip=\"Show local vars\"> </span>\n" +
5784 5793 " </a>\n" +
5785 5794 "\n" +
5786 5795 " <span class=\"no-vars\" ng-if=\"frame.vars.length == 0\"></span>\n" +
5787 5796 "\n" +
5788 5797 " <span ng-if=\"frame.file\">\n" +
5789 5798 " <span class=\"mono\">File</span> <span class=\"file mono\">{{frame.file || 'Unknown file'}}</span>,\n" +
5790 5799 " </span>\n" +
5791 5800 " <span ng-if=\"frame.module && !frame.file\">\n" +
5792 5801 " <span class=\"mono\">Module</span> <span class=\"file mono\">{{frame.module || 'Unknown module'}}</span>,\n" +
5793 5802 " </span>\n" +
5794 5803 " <span class=\"mono\">line</span> <span class=\"line mono\">{{frame.line || 'Unknown line'}}</span>\n" +
5795 5804 "\n" +
5796 5805 " <span ng-if=\"frame.fn\"><span class=\"mono\">in</span> <strong\n" +
5797 5806 " class=\"fn mono\">{{frame.fn || 'Unknown function'}}</strong></span>\n" +
5798 5807 "\n" +
5799 5808 " </div>\n" +
5800 5809 " <div class=\"cline mono\" ng-if=\"frame.cline\">{{frame.cline || 'Unknown context'}}</div>\n" +
5801 5810 "\n" +
5802 5811 " <div class=\"vars\" ng-if=\"frame.showVars\">\n" +
5803 5812 " <table class=\"var-listing small\">\n" +
5804 5813 " <tr ng-repeat=\"fvar in frame.vars track by $index\" class=\"frame {{$odd ? 'odd' : 'even'}}\">\n" +
5805 5814 " <td class=\"var-label\">{{ fvar[0] }}</td>\n" +
5806 5815 " <td>\n" +
5807 5816 " <span human-format vars=\"fvar[1]\"></span>\n" +
5808 5817 " </td>\n" +
5809 5818 " </tr>\n" +
5810 5819 " </table>\n" +
5811 5820 "\n" +
5812 5821 " </div>\n" +
5813 5822 " </div>\n" +
5814 5823 " </div>\n" +
5815 5824 "\n" +
5816 5825 "\n" +
5817 5826 " </div>\n" +
5818 5827 "\n" +
5819 5828 "\n" +
5820 5829 " <uib-tabset>\n" +
5821 5830 " <uib-tab select=\"$ctrl.selectedTab('slow_calls')\" active=\"$ctrl.tabs.slow_calls\">\n" +
5822 5831 " <uib-tab-heading>\n" +
5823 5832 " Slow Calls\n" +
5824 5833 " </uib-tab-heading>\n" +
5825 5834 "\n" +
5826 5835 " <h3><strong>Slow Calls</strong></h3>\n" +
5827 5836 "\n" +
5828 5837 " <div ng-if=\"$ctrl.report.slow_calls.length > 0\">\n" +
5829 5838 " <div ng-repeat=\"call in $ctrl.report.slow_calls\" ng-include=\"'slow_call.html'\"></div>\n" +
5830 5839 " </div>\n" +
5831 5840 "\n" +
5832 5841 " <div ng-if=\"$ctrl.report.slow_calls.length == 0\">\n" +
5833 5842 " No slow calls reported\n" +
5834 5843 " </div>\n" +
5835 5844 "\n" +
5836 5845 " </uib-tab>\n" +
5837 5846 "\n" +
5838 5847 "\n" +
5839 5848 " <uib-tab select=\"$ctrl.selectedTab('request_details')\" active=\"$ctrl.tabs.request_details\">\n" +
5840 5849 " <uib-tab-heading>\n" +
5841 5850 " Request details\n" +
5842 5851 " </uib-tab-heading>\n" +
5843 5852 "\n" +
5844 5853 " <h3><strong>Extra</strong></h3>\n" +
5845 5854 " <div class=\"var-listing\" human-format vars=\"$ctrl.report.extra\"></div>\n" +
5846 5855 " <h3><strong>Request details</strong></h3>\n" +
5847 5856 " <div class=\"var-listing\" human-format vars=\"$ctrl.report.request\"></div>\n" +
5848 5857 "\n" +
5849 5858 " </uib-tab>\n" +
5850 5859 "\n" +
5851 5860 " <uib-tab select=\"$ctrl.selectedTab('logs')\" active=\"$ctrl.tabs.logs\">\n" +
5852 5861 " <uib-tab-heading>\n" +
5853 5862 " Logs\n" +
5854 5863 " </uib-tab-heading>\n" +
5855 5864 "\n" +
5856 5865 " <div ng-if=\"$ctrl.is_loading.logs!=false\" class=\"text-center\">\n" +
5857 5866 " <span class=\"fa fa-cog fa-spin fa-3x loader\"></span>\n" +
5858 5867 " </div>\n" +
5859 5868 " <p ng-if=\"$ctrl.reportLogs.length == 0\"> No logs found</p>\n" +
5860 5869 "\n" +
5861 5870 " <table class=\"table table-striped log-list\" ng-if=\"$ctrl.reportLogs.length > 0\">\n" +
5862 5871 "\n" +
5863 5872 " <caption>Logs</caption>\n" +
5864 5873 " <thead>\n" +
5865 5874 " <tr>\n" +
5866 5875 " <th class=\"message\">Message</th>\n" +
5867 5876 " <th class=\"when\">When</th>\n" +
5868 5877 " </tr>\n" +
5869 5878 " </thead>\n" +
5870 5879 " <tbody>\n" +
5871 5880 " <tr ng-repeat=\"log in $ctrl.reportLogs track by log.log_id\">\n" +
5872 5881 " <td>\n" +
5873 5882 " <a class=\"tag {{log.log_level|lowercase}}\">\n" +
5874 5883 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
5875 5884 " <a class=\"tag\">\n" +
5876 5885 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
5877 5886 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\">\n" +
5878 5887 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
5879 5888 " <div class=\"log\">\n" +
5880 5889 " {{log.message}}\n" +
5881 5890 " </div>\n" +
5882 5891 " </td>\n" +
5883 5892 " <td class=\"when\">\n" +
5884 5893 " <a data-uib-tooltip=\"{{log.timestamp}}\">\n" +
5885 5894 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
5886 5895 " </a>\n" +
5887 5896 " </td>\n" +
5888 5897 " </tr>\n" +
5889 5898 "\n" +
5890 5899 " </tbody>\n" +
5891 5900 " </table>\n" +
5892 5901 "\n" +
5893 5902 " </uib-tab>\n" +
5894 5903 "\n" +
5895 5904 "\n" +
5896 5905 " <uib-tab select=\"$ctrl.selectedTab('comments')\" active=\"$ctrl.tabs.comments\">\n" +
5897 5906 " <uib-tab-heading>\n" +
5898 5907 " Comments\n" +
5899 5908 " <span class=\"label label-info\">{{$ctrl.report.comments.length}}</span>\n" +
5900 5909 "\n" +
5901 5910 " </uib-tab-heading>\n" +
5902 5911 "\n" +
5903 5912 " <h3><strong>Comments</strong></h3>\n" +
5904 5913 "\n" +
5905 5914 " <p ng-if=\"$ctrl.report.comments.length == 0\">No comments yet - be first to add one!</p>\n" +
5906 5915 "\n" +
5907 5916 " <div class=\"comment\" ng-repeat=\"comment in $ctrl.report.comments\">\n" +
5908 5917 " <p name=\"comment-{{comment.comment_id}}\"><span class=\"fa fa-comment\"></span>\n" +
5909 5918 " <strong>{{comment.user_name}}</strong>\n" +
5910 5919 " <iso-to-relative-time time=\"{{comment.created_timestamp}}\"/>\n" +
5911 5920 " </p>\n" +
5912 5921 " <p class=\"well\">{{comment.body}}</p>\n" +
5913 5922 " </div>\n" +
5914 5923 "\n" +
5915 5924 " <form name=\"commentForm\" ng-submit=\"$ctrl.addComment()\">\n" +
5916 5925 " <div class=\"form-group\">\n" +
5917 5926 " <textarea type=\"text\" class=\"form-control\" id=\"$ctrl.commentForm\" ng-model=\"$ctrl.comment\" required\n" +
5918 5927 " mentio mentio-search=\"$ctrl.searchMentionedPeople(term)\" mentio-items=\"$ctrl.mentionedPeople| filter:label:typedTerm\" class=\"form-control\"></textarea>\n" +
5919 5928 "\n" +
5920 5929 " </div>\n" +
5921 5930 " <div class=\"form-group\">\n" +
5922 5931 " <button class=\"btn btn-info\" ng-disabled=\"$ctrl.commentForm.$invalid\">Comment</button>\n" +
5923 5932 " </div>\n" +
5924 5933 " </form>\n" +
5925 5934 "\n" +
5926 5935 " <div ng-repeat=\"comment in $ctrl.report.comments\" class=\"{{$odd ? 'odd' : 'even'}}\" class=\"repeat-animate\">\n" +
5927 5936 " </div>\n" +
5928 5937 "\n" +
5929 5938 " </uib-tab>\n" +
5930 5939 "\n" +
5931 5940 " <uib-tab select=\"$ctrl.selectedTab('affected_users')\" active=\"$ctrl.tabs.affected_users\">\n" +
5932 5941 " <uib-tab-heading>\n" +
5933 5942 " Affected users\n" +
5934 5943 " <span class=\"label label-warning\">{{$ctrl.report.affected_users_count}}</span>\n" +
5935 5944 "\n" +
5936 5945 " </uib-tab-heading>\n" +
5937 5946 "\n" +
5938 5947 " <h3><strong>50 most affected users ID's by this issue:</strong></h3>\n" +
5939 5948 " <ul class=\"affected-user-list\">\n" +
5940 5949 " <li ng-repeat=\"user in $ctrl.report.top_affected_users\">\n" +
5941 5950 " <strong>{{user.username}}</strong> <span class=\"badge\" uib-tooltip=\"occurences\">{{user.count}}</span>\n" +
5942 5951 " </li>\n" +
5943 5952 " </ul>\n" +
5944 5953 "\n" +
5945 5954 " </uib-tab>\n" +
5946 5955 "\n" +
5947 5956 " </uib-tabset>\n" +
5948 5957 "\n" +
5949 5958 "\n" +
5950 5959 " </div>\n" +
5951 5960 "\n" +
5952 5961 " </div>\n" +
5953 5962 " </div>\n" +
5954 5963 "</div>\n"
5955 5964 );
5956 5965
5957 5966
5958 5967 $templateCache.put('components/views/reports-browser-view/reports-browser-view.html',
5959 5968 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
5960 5969 "\n" +
5961 5970 "<div ng-if=\"$ctrl.is_loading === false\">\n" +
5962 5971 "\n" +
5963 5972 " <p class=\"search-params\">\n" +
5964 5973 " <strong>Search params:</strong>\n" +
5965 5974 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
5966 5975 " <strong>{{tag.type}}</strong>\n" +
5967 5976 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
5968 5977 "\n" +
5969 5978 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
5970 5979 " </span>\n" +
5971 5980 " </p>\n" +
5972 5981 "\n" +
5973 5982 " <form class=\"form\">\n" +
5974 5983 " <div class=\"typeahead-tags\">\n" +
5975 5984 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter reports - filter by tags, exception, priority or other properties.\"\n" +
5976 5985 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
5977 5986 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
5978 5987 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
5979 5988 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
5980 5989 " </div>\n" +
5981 5990 " </form>\n" +
5982 5991 "\n" +
5983 5992 "\n" +
5984 5993 " <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
5985 5994 " class=\"animate-show\">\n" +
5986 5995 " <uib-datepicker></uib-datepicker>\n" +
5987 5996 " </div>\n" +
5988 5997 "\n" +
5989 5998 " </p>\n" +
5990 5999 "\n" +
5991 6000 "\n" +
5992 6001 " <div class=\"text-center\">\n" +
5993 6002 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
5994 6003 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
5995 6004 " ng-change=\"$ctrl.paginationChange()\"\n" +
5996 6005 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
5997 6006 " </div>\n" +
5998 6007 "\n" +
5999 6008 " <div class=\"panel panel-default\">\n" +
6000 6009 " <!-- Default panel contents -->\n" +
6001 6010 "\n" +
6002 6011 " <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
6003 6012 " <caption>Reports</caption>\n" +
6004 6013 " <thead>\n" +
6005 6014 " <tr>\n" +
6006 6015 " <th class=\"c1 ordering occurences\">#</th>\n" +
6007 6016 " <th class=\"c2 application\">Application</th>\n" +
6008 6017 " <th class=\"c4 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
6009 6018 " ng-change=\"$ctrl.changeRelativeTime()\"\n" +
6010 6019 " title=\"Tick to see UTC time instead relative\"></th>\n" +
6011 6020 " <th class=\"c5 error_type\">Error</th>\n" +
6012 6021 " </tr>\n" +
6013 6022 " </thead>\n" +
6014 6023 " <tbody>\n" +
6015 6024 " <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
6016 6025 " <td class=\"c1 occurences\">\n" +
6017 6026 " <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
6018 6027 " <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
6019 6028 " {{report.group.occurences|numberToThousands}}\n" +
6020 6029 " </span>\n" +
6021 6030 " </td>\n" +
6022 6031 " <td class=\"c2 application\">\n" +
6023 6032 " <div class=\"app_name\">{{report.resource_name}}</div>\n" +
6024 6033 " <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
6025 6034 " <td class=\"c3 when\">\n" +
6026 6035 " <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
6027 6036 " time=\"{{report.group.last_timestamp}}\"/></span>\n" +
6028 6037 " </span>\n" +
6029 6038 " <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
6030 6039 " </td>\n" +
6031 6040 " <td class=\"c4 report ellipsis\"><a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\" title=\"{{report.error}}\">{{report.error || 'Unknown Exception'}}</a> <br/>\n" +
6032 6041 " <span class=\"url\">{{ report.tags.view_name || report.url_path}}</td>\n" +
6033 6042 " </tr>\n" +
6034 6043 "\n" +
6035 6044 " </tbody>\n" +
6036 6045 " </table>\n" +
6037 6046 " </div>\n" +
6038 6047 "\n" +
6039 6048 "\n" +
6040 6049 " <div class=\"text-center\">\n" +
6041 6050 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6042 6051 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6043 6052 " ng-change=\"$ctrl.paginationChange()\"\n" +
6044 6053 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6045 6054 " </div>\n" +
6046 6055 "\n" +
6047 6056 "</div>\n"
6048 6057 );
6049 6058
6050 6059
6051 6060 $templateCache.put('components/views/reports-slow-browser-view/reports-slow-browser-view.html',
6052 6061 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
6053 6062 "\n" +
6054 6063 "<div ng-if=\"$ctrl.is_loading === false\">\n" +
6055 6064 "\n" +
6056 6065 " <p class=\"search-params\">\n" +
6057 6066 " <strong>Search params:</strong>\n" +
6058 6067 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
6059 6068 " <strong>{{tag.type}}</strong>\n" +
6060 6069 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
6061 6070 "\n" +
6062 6071 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
6063 6072 " </span>\n" +
6064 6073 " </p>\n" +
6065 6074 "\n" +
6066 6075 " <p>\n" +
6067 6076 "\n" +
6068 6077 " <form class=\"form\">\n" +
6069 6078 " <div class=\"typeahead-tags\">\n" +
6070 6079 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter slowness reports - filter by tags, average response time, priority or other properties.\"\n" +
6071 6080 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
6072 6081 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
6073 6082 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
6074 6083 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
6075 6084 " </div>\n" +
6076 6085 " </form>\n" +
6077 6086 "\n" +
6078 6087 "\n" +
6079 6088 " <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
6080 6089 " class=\"animate-show\">\n" +
6081 6090 " <uib-datepicker></uib-datepicker>\n" +
6082 6091 " </div>\n" +
6083 6092 "\n" +
6084 6093 " </p>\n" +
6085 6094 "\n" +
6086 6095 "\n" +
6087 6096 " <div class=\"text-center\">\n" +
6088 6097 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6089 6098 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6090 6099 " ng-change=\"$ctrl.paginationChange()\"\n" +
6091 6100 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6092 6101 " </div>\n" +
6093 6102 "\n" +
6094 6103 "\n" +
6095 6104 " <div class=\"panel panel-default\">\n" +
6096 6105 " <!-- Default panel contents -->\n" +
6097 6106 "\n" +
6098 6107 " <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
6099 6108 " <caption>Slow Request Reports</caption>\n" +
6100 6109 " <thead>\n" +
6101 6110 " <tr>\n" +
6102 6111 " <td class=\"c1 ordering occurences\">#</td>\n" +
6103 6112 " <td class=\"c2 average_duration\">Avg. duration</td>\n" +
6104 6113 " <td class=\"c3 application\">Application</td>\n" +
6105 6114 " <td class=\"c5 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
6106 6115 " ng-change=\"$ctrl.changeRelativeTime()\"\n" +
6107 6116 " title=\"Tick to see UTC time instead relative\"></td>\n" +
6108 6117 " <td class=\"c6 error_type\">Location</td>\n" +
6109 6118 " </tr>\n" +
6110 6119 " </thead>\n" +
6111 6120 " <tbody>\n" +
6112 6121 " <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
6113 6122 " <td class=\"c1 occurences\">\n" +
6114 6123 " <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
6115 6124 " <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
6116 6125 " {{report.group.occurences|numberToThousands}}\n" +
6117 6126 " </span>\n" +
6118 6127 " </td>\n" +
6119 6128 " <td class=\"c2 average_duration\">{{report.group.average_duration.toFixed(3)}}s</td>\n" +
6120 6129 " <td class=\"c3 application\">\n" +
6121 6130 " <div class=\"app_name\">{{report.resource_name}}</div>\n" +
6122 6131 " <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
6123 6132 " <td class=\"c4 when\">\n" +
6124 6133 " <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
6125 6134 " time=\"{{report.group.last_timestamp}}\"/></span>\n" +
6126 6135 " </span>\n" +
6127 6136 " <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
6128 6137 " </td>\n" +
6129 6138 " <td class=\"c5 report ellipsis\">\n" +
6130 6139 " <a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\">{{ report.tags.view_name || report.url_path}} </span></a></td>\n" +
6131 6140 " </td>\n" +
6132 6141 " </tr>\n" +
6133 6142 "\n" +
6134 6143 " </tbody>\n" +
6135 6144 " </table>\n" +
6136 6145 "\n" +
6137 6146 " </div>\n" +
6138 6147 "\n" +
6139 6148 " <div class=\"text-center\">\n" +
6140 6149 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6141 6150 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6142 6151 " ng-change=\"$ctrl.paginationChange()\"\n" +
6143 6152 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6144 6153 " </div>\n" +
6145 6154 "\n" +
6146 6155 "</div>\n"
6147 6156 );
6148 6157
6149 6158
6150 6159 $templateCache.put('components/views/settings-view/settings-view.html',
6151 6160 "<div class=\"row\">\n" +
6152 6161 " <div class=\"col-sm-3\" id=\"menu\">\n" +
6153 6162 " <div class=\"panel panel-default\">\n" +
6154 6163 " <div class=\"panel-heading\">Applications</div>\n" +
6155 6164 " <ul class=\"list-group\">\n" +
6156 6165 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.list\"><span class=\"fa fa-cog\"></span> List applications</a></li>\n" +
6157 6166 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.update({resourceId:'new'})\"><span class=\"fa fa-plus-circle\"></span> Create application</a></li>\n" +
6158 6167 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"applications.purge_logs\"><span class=\"fa fa-trash-o\"></span> Purge logs</a></li>\n" +
6159 6168 " </ul>\n" +
6169 "\n" +
6170 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuApplicationsItems.length\">\n" +
6171 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuApplicationsItems\">\n" +
6172 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6173 " </li>\n" +
6174 " </ul>\n" +
6175 "\n" +
6160 6176 " </div>\n" +
6161 6177 "\n" +
6162 6178 "\n" +
6163 6179 " <div class=\"panel panel-default\">\n" +
6164 6180 " <div class=\"panel-heading\">Settings</div>\n" +
6165 6181 " <ul class=\"list-group\">\n" +
6166 6182 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.edit\"><span class=\"fa fa-user\"></span> Profile details</a></li>\n" +
6167 6183 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.password\"><span class=\"fa fa-lock\"></span> Change Password</a></li>\n" +
6168 6184 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.identities\"><span class=\"fa fa-link\"></span> External Identities</a></li>\n" +
6169 6185 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.profile.auth_tokens\"><span class=\"fa fa-unlock\"></span> Auth Tokens</a></li>\n" +
6170 6186 " </ul>\n" +
6187 "\n" +
6188 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuUserSettingsItems.length\">\n" +
6189 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuUserSettingsItems\">\n" +
6190 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6191 " </li>\n" +
6192 " </ul>\n" +
6193 "\n" +
6171 6194 " </div>\n" +
6172 6195 "\n" +
6173 6196 " <div class=\"panel panel-default\">\n" +
6174 6197 " <div class=\"panel-heading\">Notifications</div>\n" +
6175 6198 " <ul class=\"list-group\">\n" +
6176 6199 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.list\"><span class=\"fa fa-bullhorn\"></span> Alert channels</a></li>\n" +
6177 6200 " <li class=\"list-group-item\" ui-sref-active-eq=\"active\"><a data-ui-sref=\"user.alert_channels.email\"><span class=\"fa fa-envelope\"></span> Add email channel</a></li>\n" +
6178 6201 " </ul>\n" +
6202 "\n" +
6203 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuNotificationsItems.length\">\n" +
6204 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuNotificationsItems\">\n" +
6205 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6206 " </li>\n" +
6207 " </ul>\n" +
6208 "\n" +
6179 6209 " </div>\n" +
6210 "\n" +
6180 6211 " </div>\n" +
6181 6212 "\n" +
6182 6213 " <div class=\"col-sm-9\" ui-view></div>\n" +
6183 6214 "</div>\n"
6184 6215 );
6185 6216
6186 6217
6187 6218 $templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
6188 6219 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
6189 6220 "\n" +
6190 6221 "<div ng-show=\"!$ctrl.loading.email\">\n" +
6191 6222 "\n" +
6192 6223 " <div class=\"panel panel-default\">\n" +
6193 6224 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6194 6225 " <div class=\"panel-body\">\n" +
6195 6226 " <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>\n" +
6196 6227 " <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
6197 6228 " <div class=\"form-group\" id=\"row-email\">\n" +
6198 6229 " <data-form-errors errors=\"$ctrl.channelForm.ae_validation.email\"></data-form-errors>\n" +
6199 6230 " <label id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6200 6231 " Email Address\n" +
6201 6232 " <span class=\"required\">*</span>\n" +
6202 6233 " </label>\n" +
6203 6234 " <div class=\"col-sm-8 col-lg-9\">\n" +
6204 6235 " <input class=\"form-control\" type=\"text\" ng-model=\"$ctrl.form.email\">\n" +
6205 6236 " </div>\n" +
6206 6237 " </div>\n" +
6207 6238 " <div class=\"form-group\">\n" +
6208 6239 " <label for=\"submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6209 6240 " </label>\n" +
6210 6241 " <div class=\"col-sm-8 col-lg-9\">\n" +
6211 6242 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Add email channel\">\n" +
6212 6243 " </div>\n" +
6213 6244 " </div>\n" +
6214 6245 " </form>\n" +
6215 6246 " </div>\n" +
6216 6247 " </div>\n" +
6217 6248 "</div>\n"
6218 6249 );
6219 6250
6220 6251
6221 6252 $templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
6222 6253 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
6223 6254 "\n" +
6224 6255 "<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
6225 6256 "\n" +
6226 6257 " <div class=\"panel panel-default\">\n" +
6227 6258 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6228 6259 " <div class=\"panel-body\">\n" +
6229 6260 " <h1>Report alert rules</h1>\n" +
6230 6261 " <p>\n" +
6231 6262 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addAction()\"><span class=\"fa fa-plus-circle\"></span> Add top-level rule</a>\n" +
6232 6263 " </p>\n" +
6233 6264 "\n" +
6234 6265 " <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
6235 6266 " possible-channels=\"$ctrl.alertChannels\"\n" +
6236 6267 " actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
6237 6268 " ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
6238 6269 "\n" +
6239 6270 " </div>\n" +
6240 6271 " </div>\n" +
6241 6272 "\n" +
6242 6273 " <div class=\"panel panel-default\">\n" +
6243 6274 " <div class=\"panel-body\">\n" +
6244 6275 " <h1>Alert channels</h1>\n" +
6245 6276 "\n" +
6246 6277 " <p>Here you can configure your <em>alert channels</em>.</p>\n" +
6247 6278 "\n" +
6248 6279 " <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
6249 6280 "\n" +
6250 6281 " <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
6251 6282 "\n" +
6252 6283 " <table class=\"table table-striped\">\n" +
6253 6284 " <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
6254 6285 " <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
6255 6286 " <td class=\"text-right\">\n" +
6256 6287 " <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
6257 6288 " ng-class=\"{dim:!channel.channel_validated}\">\n" +
6258 6289 " <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
6259 6290 " </span>\n" +
6260 6291 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
6261 6292 " ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
6262 6293 " <span class=\"fa fa-rss\"></span> Alerts\n" +
6263 6294 " </a>\n" +
6264 6295 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
6265 6296 " ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
6266 6297 " <span class=\"fa fa-envelope\"></span> Daily digests\n" +
6267 6298 " </a>\n" +
6268 6299 "\n" +
6269 6300 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6270 6301 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove</a>\n" +
6271 6302 " <ul class=\"dropdown-menu\">\n" +
6272 6303 " <li><a>No</a></li>\n" +
6273 6304 " <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
6274 6305 " </ul>\n" +
6275 6306 " </span>\n" +
6276 6307 "\n" +
6277 6308 " </td>\n" +
6278 6309 " </tr>\n" +
6279 6310 " </table>\n" +
6280 6311 "\n" +
6281 6312 " </div>\n" +
6282 6313 " </div>\n" +
6283 6314 "\n" +
6284 6315 "</div>\n"
6285 6316 );
6286 6317
6287 6318
6288 6319 $templateCache.put('components/views/user-auth-tokens-view/user-auth-tokens-view.html',
6289 6320 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.tokens\"></ng-include>\n" +
6290 6321 "\n" +
6291 6322 "<div ng-show=\"!$ctrl.loading.tokens\">\n" +
6292 6323 "\n" +
6293 6324 " <div class=\"panel panel-default\">\n" +
6294 6325 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6295 6326 "\n" +
6296 6327 " <div class=\"panel-body\">\n" +
6297 6328 "\n" +
6298 6329 " <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
6299 6330 "\n" +
6300 6331 " <hr/>\n" +
6301 6332 "\n" +
6302 6333 " <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
6303 6334 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
6304 6335 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
6305 6336 " <div class=\"form-group\">\n" +
6306 6337 " <label>\n" +
6307 6338 " Description\n" +
6308 6339 " </label>\n" +
6309 6340 " <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
6310 6341 " </div>\n" +
6311 6342 " <div class=\"form-group\">\n" +
6312 6343 " <label>\n" +
6313 6344 " Expires\n" +
6314 6345 " </label>\n" +
6315 6346 " <select class=\"form-control\" ng-model=\"$ctrl.form.expires\" ng-options=\"i.key as i.label for i in $ctrl.expireOptions | objectToOrderedArray:'minutes'\">\n" +
6316 6347 " <option value=\"\">Never</option>\n" +
6317 6348 " </select>\n" +
6318 6349 " </div>\n" +
6319 6350 " <div class=\"form-group\">\n" +
6320 6351 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
6321 6352 " </label>\n" +
6322 6353 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Create Token\">\n" +
6323 6354 " </div>\n" +
6324 6355 " </form>\n" +
6325 6356 "\n" +
6326 6357 " </div>\n" +
6327 6358 "\n" +
6328 6359 "\n" +
6329 6360 " </div>\n" +
6330 6361 "\n" +
6331 6362 " <div class=\"panel panel-default\">\n" +
6332 6363 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.tokens\" class=\"table table-striped\">\n" +
6333 6364 " <caption>Your current tokens</caption>\n" +
6334 6365 " <thead>\n" +
6335 6366 " <tr>\n" +
6336 6367 " <th st-sort=\"description\"><a>Description</a></th>\n" +
6337 6368 " <th class=\"created\"><a>Created</a></th>\n" +
6338 6369 " <th class=\"expires\"><a>Expires</a></th>\n" +
6339 6370 " <th class=\"options\"></th>\n" +
6340 6371 " </tr>\n" +
6341 6372 " <tr>\n" +
6342 6373 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6343 6374 " <th></th>\n" +
6344 6375 " <th></th>\n" +
6345 6376 " <th></th>\n" +
6346 6377 " </tr>\n" +
6347 6378 " </thead>\n" +
6348 6379 " <tbody>\n" +
6349 6380 "\n" +
6350 6381 " <tr ng-repeat=\"token in displayedCollection\">\n" +
6351 6382 " <td><p>{{token.description}}</p>\n" +
6352 6383 " <pre ng-init=\"token.limit = 8\" ng-mouseover=\"token.limit = 99\" ng-mouseleave=\"token.limit = 8\">{{token.token| limitTo:token.limit}}...</pre>\n" +
6353 6384 " </td>\n" +
6354 6385 " <td><span data-uib-tooltip=\"{{token.creation_date}}\">{{token.creation_date | isoToRelativeTime}}</span></td>\n" +
6355 6386 " <td><span ng-if=\"token.expires\" data-uib-tooltip=\"{{token.expires}}\">{{token.expires | isoToRelativeTime}}</span>\n" +
6356 6387 " <span ng-if=\"!token.expires\">Never</span></td>\n" +
6357 6388 " <td>\n" +
6358 6389 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6359 6390 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6360 6391 " <ul class=\"dropdown-menu\">\n" +
6361 6392 " <li><a>No</a></li>\n" +
6362 6393 " <li><a ng-click=\"$ctrl.removeToken(token)\">Yes</a></li>\n" +
6363 6394 " </ul>\n" +
6364 6395 " </span>\n" +
6365 6396 " </td>\n" +
6366 6397 " </tr>\n" +
6367 6398 " </tbody>\n" +
6368 6399 " </table>\n" +
6369 6400 " </div>\n" +
6370 6401 "\n" +
6371 6402 "</div>\n"
6372 6403 );
6373 6404
6374 6405
6375 6406 $templateCache.put('components/views/user-identities-view/user-identities-view.html',
6376 6407 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
6377 6408 "\n" +
6378 6409 "<div ng-show=\"!$ctrl.loading.identities\">\n" +
6379 6410 "\n" +
6380 6411 " <div class=\"panel panel-default\">\n" +
6381 6412 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6382 6413 " <div class=\"panel-body\">\n" +
6383 6414 "\n" +
6384 6415 " <div class=\"col-sm-6\">\n" +
6385 6416 " <p ng-show=\"$ctrl.identities.length === 0\">No external providers linked yet</p>\n" +
6386 6417 " <ul class=\"list-group\">\n" +
6387 6418 " <li ng-repeat=\"provider in $ctrl.identities\" class=\"animate-repeat list-group-item\">\n" +
6388 6419 " <div class=\"pull-right\">\n" +
6389 6420 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6390 6421 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6391 6422 " <ul class=\"dropdown-menu\">\n" +
6392 6423 " <li><a>No</a></li>\n" +
6393 6424 " <li><a ng-click=\"$ctrl.removeProvider(provider)\">Yes</a></li>\n" +
6394 6425 " </ul>\n" +
6395 6426 " </span>\n" +
6396 6427 " </div>\n" +
6397 6428 " <em>@{{ provider.provider }}</em>: <strong>{{ provider.id }}</strong>\n" +
6398 6429 " </li>\n" +
6399 6430 " </ul>\n" +
6400 6431 " </div>\n" +
6401 6432 " <div class=\"col-sm-6\">\n" +
6402 6433 " <ul class=\"list-group\">\n" +
6403 6434 " <li class=\"list-group-item\">\n" +
6404 6435 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.google}}\" target=\"_self\">\n" +
6405 6436 " <span class=\"fa fa-google-plus-square fa-2x\"></span> Connect with Google</a>\n" +
6406 6437 " </li>\n" +
6407 6438 " <li class=\"list-group-item\">\n" +
6408 6439 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.twitter}}\" target=\"_self\">\n" +
6409 6440 " <span class=\"fa fa-twitter fa-2x\"></span> Connect with Twitter</a>\n" +
6410 6441 " </li>\n" +
6411 6442 " <li class=\"list-group-item\">\n" +
6412 6443 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.bitbucket}}\" target=\"_self\">\n" +
6413 6444 " <span class=\"fa fa-bitbucket fa-2x\"></span> Connect with Bitbucket</a>\n" +
6414 6445 " </li>\n" +
6415 6446 " <li class=\"list-group-item\">\n" +
6416 6447 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.github}}\" target=\"_self\">\n" +
6417 6448 " <span class=\"fa fa-github fa-2x\"></span> Connect with Github including private repo access</a>\n" +
6418 6449 " </li>\n" +
6419 6450 " </ul>\n" +
6420 6451 " </div>\n" +
6421 6452 " </div>\n" +
6422 6453 " </div>\n" +
6423 6454 "</div>\n"
6424 6455 );
6425 6456
6426 6457
6427 6458 $templateCache.put('components/views/user-password-view/user-password-view.html',
6428 6459 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.password\"></ng-include>\n" +
6429 6460 "\n" +
6430 6461 "<div ng-show=\"!$ctrl.loading.password\">\n" +
6431 6462 "\n" +
6432 6463 " <div class=\"panel panel-default\">\n" +
6433 6464 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6434 6465 " <div class=\"panel-body\">\n" +
6435 6466 "\n" +
6436 6467 " <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
6437 6468 " <div class=\"form-group\" id=\"row-old_password\">\n" +
6438 6469 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
6439 6470 " <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6440 6471 " Old Password\n" +
6441 6472 " <span class=\"required\">*</span>\n" +
6442 6473 " </label>\n" +
6443 6474 " <div class=\"col-sm-8 col-lg-9\">\n" +
6444 6475 " <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
6445 6476 " </div>\n" +
6446 6477 " </div>\n" +
6447 6478 " <div class=\"form-group\" id=\"row-new_password\">\n" +
6448 6479 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
6449 6480 " <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6450 6481 " New Password\n" +
6451 6482 " <span class=\"required\">*</span>\n" +
6452 6483 " </label>\n" +
6453 6484 " <div class=\"col-sm-8 col-lg-9\">\n" +
6454 6485 " <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
6455 6486 " </div>\n" +
6456 6487 " </div>\n" +
6457 6488 " <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
6458 6489 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
6459 6490 " <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6460 6491 " Confirm Password\n" +
6461 6492 " <span class=\"required\">*</span>\n" +
6462 6493 " </label>\n" +
6463 6494 " <div class=\"col-sm-8 col-lg-9\">\n" +
6464 6495 " <input class=\"form-control\" id=\"new_password_confirm\" name=\"new_password_confirm\" type=\"password\" ng-model=\"$ctrl.form.new_password_confirm\">\n" +
6465 6496 " </div>\n" +
6466 6497 " </div>\n" +
6467 6498 " <div class=\"form-group\" id=\"row-submit\">\n" +
6468 6499 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
6469 6500 " <div class=\"col-sm-8 col-lg-9\">\n" +
6470 6501 " <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
6471 6502 " </div>\n" +
6472 6503 " </div>\n" +
6473 6504 " </form>\n" +
6474 6505 "\n" +
6475 6506 " </div>\n" +
6476 6507 " </div>\n" +
6477 6508 "</div>\n"
6478 6509 );
6479 6510
6480 6511
6481 6512 $templateCache.put('components/views/user-profile-view/user-profile-view.html',
6482 6513 "<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
6483 6514 "\n" +
6484 6515 "<div ng-show=\"!$ctrl.loading.profile\">\n" +
6485 6516 " <div class=\"panel panel-default\">\n" +
6486 6517 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6487 6518 " <div class=\"panel-body\">\n" +
6488 6519 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
6489 6520 " <div class=\"form-group\" id=\"row-email\">\n" +
6490 6521 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
6491 6522 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6492 6523 " Email Address\n" +
6493 6524 " <span class=\"required\">*</span>\n" +
6494 6525 " </label>\n" +
6495 6526 " <div class=\"col-sm-8 col-lg-9\">\n" +
6496 6527 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
6497 6528 " </div>\n" +
6498 6529 " </div>\n" +
6499 6530 "\n" +
6500 6531 " <div class=\"form-group\" id=\"row-first_name\">\n" +
6501 6532 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
6502 6533 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6503 6534 " First Name\n" +
6504 6535 " </label>\n" +
6505 6536 " <div class=\"col-sm-8 col-lg-9\">\n" +
6506 6537 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
6507 6538 " </div>\n" +
6508 6539 " </div>\n" +
6509 6540 " <div class=\"form-group\" id=\"row-last_name\">\n" +
6510 6541 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
6511 6542 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6512 6543 " Last Name\n" +
6513 6544 " </label>\n" +
6514 6545 " <div class=\"col-sm-8 col-lg-9\">\n" +
6515 6546 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
6516 6547 " </div>\n" +
6517 6548 " </div>\n" +
6518 6549 " <div class=\"form-group\" id=\"row-company_name\">\n" +
6519 6550 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
6520 6551 " <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6521 6552 " Company Name\n" +
6522 6553 " </label>\n" +
6523 6554 " <div class=\"col-sm-8 col-lg-9\">\n" +
6524 6555 " <input class=\"form-control\" id=\"company_name\" name=\"company_name\" type=\"text\" ng-model=\"$ctrl.user.company_name\">\n" +
6525 6556 " </div>\n" +
6526 6557 " </div>\n" +
6527 6558 " <div class=\"form-group\" id=\"row-company_address\">\n" +
6528 6559 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_address\"></data-form-errors>\n" +
6529 6560 " <label for=\"company_address\" id=\"label-company_address\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6530 6561 " Company Address\n" +
6531 6562 " </label>\n" +
6532 6563 " <div class=\"col-sm-8 col-lg-9\">\n" +
6533 6564 " <textarea class=\"form-control\" id=\"company_address\" name=\"company_address\" ng-model=\"$ctrl.user.company_address\"></textarea>\n" +
6534 6565 " </div>\n" +
6535 6566 " </div>\n" +
6536 6567 " <div class=\"form-group\" id=\"row-zip_code\">\n" +
6537 6568 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.zip_code\"></data-form-errors>\n" +
6538 6569 " <label for=\"zip_code\" id=\"label-zip_code\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6539 6570 " ZIP code\n" +
6540 6571 " </label>\n" +
6541 6572 " <div class=\"col-sm-8 col-lg-9\">\n" +
6542 6573 " <input class=\"form-control\" id=\"zip_code\" name=\"zip_code\" type=\"text\" ng-model=\"$ctrl.user.zip_code\">\n" +
6543 6574 " </div>\n" +
6544 6575 " </div>\n" +
6545 6576 " <div class=\"form-group\" id=\"row-city\">\n" +
6546 6577 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.city\"></data-form-errors>\n" +
6547 6578 " <label for=\"city\" id=\"label-city\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6548 6579 " City\n" +
6549 6580 " </label>\n" +
6550 6581 " <div class=\"col-sm-8 col-lg-9\">\n" +
6551 6582 " <input class=\"form-control\" id=\"city\" name=\"city\" type=\"text\" ng-model=\"$ctrl.user.city\">\n" +
6552 6583 " </div>\n" +
6553 6584 " </div>\n" +
6554 6585 " <div class=\"form-group\" id=\"row-notifications\">\n" +
6555 6586 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.notifications\"></data-form-errors>\n" +
6556 6587 " <label for=\"notifications\" id=\"label-notifications\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6557 6588 " Account notifications\n" +
6558 6589 " </label>\n" +
6559 6590 " <div class=\"col-sm-8 col-lg-9\">\n" +
6560 6591 " <input checked class=\"form-control\" id=\"notifications\" name=\"notifications\" type=\"checkbox\" ng-model=\"$ctrl.user.notifications\">\n" +
6561 6592 " </div>\n" +
6562 6593 " </div>\n" +
6563 6594 " <div class=\"form-group\" id=\"row-submit\">\n" +
6564 6595 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6565 6596 " </label>\n" +
6566 6597 " <div class=\"col-sm-8 col-lg-9\">\n" +
6567 6598 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
6568 6599 " </div>\n" +
6569 6600 " </div>\n" +
6570 6601 " </form>\n" +
6571 6602 " </div>\n" +
6572 6603 " </div>\n" +
6573 6604 "</div>\n"
6574 6605 );
6575 6606
6576 6607
6577 6608 $templateCache.put('directives/permissions/permissions.html',
6578 6609 "<div class=\"panel panel-default\">\n" +
6579 6610 " <div class=\"panel-heading\">\n" +
6580 6611 " <h3 class=\"panel-title\">Permissions</h3>\n" +
6581 6612 " </div>\n" +
6582 6613 " <div class=\"panel-body\">\n" +
6583 6614 " <p>Here you can <strong>set permissions</strong> for others to access your app data.</p>\n" +
6584 6615 "\n" +
6585 6616 " <p>For example you can let other staff member view or alter error reports.</p>\n" +
6586 6617 "\n" +
6587 6618 " <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
6588 6619 " <h3>Group permissions</h3>\n" +
6589 6620 "\n" +
6590 6621 " <ul class=\"list-group\">\n" +
6591 6622 " <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
6592 6623 " <strong>{{ perm.self.group_name }}</strong>\n" +
6593 6624 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
6594 6625 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
6595 6626 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
6596 6627 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
6597 6628 " <ul class=\"dropdown-menu\">\n" +
6598 6629 " <li><a>No</a></li>\n" +
6599 6630 " <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
6600 6631 " </ul>\n" +
6601 6632 " </span>\n" +
6602 6633 " </div>\n" +
6603 6634 " </li>\n" +
6604 6635 " </ul>\n" +
6605 6636 "\n" +
6606 6637 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
6607 6638 " <div class=\"form-group\">\n" +
6608 6639 " <select class=\"form-control\" ng-model=\"permissions.form.selectedGroup\" ng-options=\"g.id as g.group_name for g in permissions.possibleGroups\"></select>\n" +
6609 6640 " </div>\n" +
6610 6641 " <div class=\"form-group\">\n" +
6611 6642 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
6612 6643 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
6613 6644 " </span>\n" +
6614 6645 " </div>\n" +
6615 6646 " <div class=\"form-group\">\n" +
6616 6647 " <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
6617 6648 " </div>\n" +
6618 6649 " </form>\n" +
6619 6650 "\n" +
6620 6651 " </div>\n" +
6621 6652 "\n" +
6622 6653 " <h3>User permissions</h3>\n" +
6623 6654 " <div>\n" +
6624 6655 " <ul class=\"list-group\">\n" +
6625 6656 " <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
6626 6657 " <strong>{{ perm.self.user_name }}</strong>\n" +
6627 6658 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
6628 6659 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
6629 6660 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
6630 6661 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
6631 6662 " <ul class=\"dropdown-menu\">\n" +
6632 6663 " <li><a>No</a></li>\n" +
6633 6664 " <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
6634 6665 " </ul>\n" +
6635 6666 " </span>\n" +
6636 6667 " </div>\n" +
6637 6668 " </li>\n" +
6638 6669 " </ul>\n" +
6639 6670 " </div>\n" +
6640 6671 " <div>\n" +
6641 6672 " <p>First enter username or full email of person you want to give access to (the person needs to be <strong>already registered in AppEnlight</strong>)</p>\n" +
6642 6673 "\n" +
6643 6674 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\n" +
6644 6675 " <div class=\"form-group\">\n" +
6645 6676 " <input type=\"text\" class=\"autocomplete form-control\" placeholder=\"Search for user/email\" ng-model=\"permissions.form.autocompleteUser\"\n" +
6646 6677 " uib-typeahead=\"u.user for u in permissions.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"permissions.searchingUsers\" typeahead-wait-ms=\"250\"\n" +
6647 6678 " typeahead-template-url=\"templates/directives/user_search_type_ahead.html\"\n" +
6648 6679 " />\n" +
6649 6680 " </div>\n" +
6650 6681 " <div class=\"form-group\">\n" +
6651 6682 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
6652 6683 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedUserPermissions[permission]\"> {{ permission }}\n" +
6653 6684 " </span>\n" +
6654 6685 " </div>\n" +
6655 6686 " <div class=\"form-group\">\n" +
6656 6687 " <button class=\"btn btn-info\" ng-disabled=\"!permissions.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
6657 6688 " </div>\n" +
6658 6689 " </form>\n" +
6659 6690 " </div>\n" +
6660 6691 " </div>\n" +
6661 6692 "</div>\n"
6662 6693 );
6663 6694
6664 6695
6665 6696 $templateCache.put('directives/plugin_config/plugin_config.html',
6666 6697 "<div ng-repeat=\"tmpl in plugin_ctrlr.inclusions track by $index\">\n" +
6667 6698 " <div><strong>Plugin: {{tmpl.name}}</strong></div>\n" +
6668 6699 " <ng-include src=\"tmpl.template\"></ng-include>\n" +
6669 6700 " <hr/>\n" +
6670 6701 "</div>\n"
6671 6702 );
6672 6703
6673 6704
6674 6705 $templateCache.put('directives/postprocess_action/postprocess_action.html',
6675 6706 "<div class=\"panel panel-default action\">\n" +
6676 6707 " <div class=\"panel-body form-inline\">\n" +
6677 6708 " <div class=\"pull-right\">\n" +
6678 6709 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6679 6710 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6680 6711 " <ul class=\"dropdown-menu\">\n" +
6681 6712 " <li><a>No</a></li>\n" +
6682 6713 " <li><a ng-click=\"ctrl.deleteAction(ctrl.action)\">Yes</a></li>\n" +
6683 6714 " </ul>\n" +
6684 6715 " </span>\n" +
6685 6716 " </div>\n" +
6686 6717 "\n" +
6687 6718 " <div class=\"form-group\">\n" +
6688 6719 " <label>Action</label>\n" +
6689 6720 "\n" +
6690 6721 " <div class=\"form-group\">\n" +
6691 6722 " <select class=\"form-control\" ng-model=\"ctrl.action.new_value\" ng-options=\"f[0] as f[1] for f in ctrl.possibleActions\" ng-change=\"ctrl.setDirty()\"></select>\n" +
6692 6723 " </div>\n" +
6693 6724 "\n" +
6694 6725 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
6695 6726 "\n" +
6696 6727 " </div>\n" +
6697 6728 " <hr/>\n" +
6698 6729 " <p>Meeting following criteria:</p>\n" +
6699 6730 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
6700 6731 " {{ctrl.rule}}\n" +
6701 6732 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
6702 6733 " </div>\n" +
6703 6734 "</div>\n"
6704 6735 );
6705 6736
6706 6737
6707 6738 $templateCache.put('directives/report_alert_action/report_alert_action.html',
6708 6739 "<div class=\"panel panel-default action\">\n" +
6709 6740 " <div class=\"panel-body form-inline\">\n" +
6710 6741 " <div class=\"pull-right\">\n" +
6711 6742 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6712 6743 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6713 6744 " <ul class=\"dropdown-menu\">\n" +
6714 6745 " <li><a>No</a></li>\n" +
6715 6746 " <li><a ng-click=\"ctrl.deleteAction(ctrl.actions, ctrl.action)\">Yes</a></li>\n" +
6716 6747 " </ul>\n" +
6717 6748 " </span>\n" +
6718 6749 " </div>\n" +
6719 6750 "\n" +
6720 6751 " <div class=\"form-group\">\n" +
6721 6752 " <label>Applies to</label>\n" +
6722 6753 " <select class=\"form-control\" ng-model=\"ctrl.action.resource_id\" ng-options=\"f.resource_id as f.resource_name for f in ctrl.applications\" ng-change=\"ctrl.setDirty()\">\n" +
6723 6754 " <option value=\"\">All Resources</option>\n" +
6724 6755 " </select>\n" +
6725 6756 " </div>\n" +
6726 6757 " <div class=\"form-group\">\n" +
6727 6758 " <label>Notify</label>\n" +
6728 6759 " <select class=\"form-control\" ng-model=\"ctrl.action.action\" ng-change=\"ctrl.setDirty()\" ng-options=\"f[0] as f[1] for f in ctrl.possibleNotifications\"></select>\n" +
6729 6760 "\n" +
6730 6761 " <a class=\"btn btn-success\" ng-if=\"ctrl.action.dirty\" ng-click=\"ctrl.saveAction()\"><span class=\"fa fa-save\"></span> &nbsp;Save changes</a>\n" +
6731 6762 "\n" +
6732 6763 " </div>\n" +
6733 6764 " <div>\n" +
6734 6765 " <p><strong>Channels:</strong></p>\n" +
6735 6766 " <ul class=\"list-group\">\n" +
6736 6767 " <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
6737 6768 " <strong>{{channel.channel_visible_value}}</strong>\n" +
6738 6769 " <div class=\"pull-right\">\n" +
6739 6770 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6740 6771 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6741 6772 " <ul class=\"dropdown-menu\">\n" +
6742 6773 " <li><a>No</a></li>\n" +
6743 6774 " <li><a ng-click=\"ctrl.unBindChannel(channel)\">Yes</a></li>\n" +
6744 6775 " </ul>\n" +
6745 6776 " </span>\n" +
6746 6777 " </div>\n" +
6747 6778 " </li>\n" +
6748 6779 " </ul>\n" +
6749 6780 " <div class=\"form-group\" ng-if=\"ctrl.possibleChannels.length\">\n" +
6750 6781 " <select class=\"form-control\" ng-model=\"ctrl.channelToBind\" ng-options=\"c as c.channel_visible_value for c in ctrl.possibleChannels |filter: c.supports_report_alerting\"></select>\n" +
6751 6782 " <a class=\"btn btn-info\" ng-click=\"ctrl.bindChannel(channel, ctrl.action)\"><span class=\"fa fa-plus-circle\"></span> Add Channel</a>\n" +
6752 6783 " </div>\n" +
6753 6784 " <div class=\"alert alert-danger\" ng-if=\"!ctrl.possibleChannels.length\">\n" +
6754 6785 " <span class=\"fa fa-exclamation-triangle \"></span>You need to create an alert channel before you can assign it to your rule.\n" +
6755 6786 " </div>\n" +
6756 6787 "\n" +
6757 6788 " </div>\n" +
6758 6789 " <hr/>\n" +
6759 6790 " <p>Meeting following criteria:</p>\n" +
6760 6791 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
6761 6792 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
6762 6793 " </div>\n" +
6763 6794 "</div>\n"
6764 6795 );
6765 6796
6766 6797
6767 6798 $templateCache.put('directives/rule_read_only/rule_read_only.html',
6768 6799 "<div class=\"rule-read-only\">\n" +
6769 6800 "\n" +
6770 6801 " <span class=\"form-group\">\n" +
6771 6802 " {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
6772 6803 " </span>\n" +
6773 6804 "\n" +
6774 6805 " <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
6775 6806 " is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
6776 6807 " </span>\n" +
6777 6808 "\n" +
6778 6809 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
6779 6810 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
6780 6811 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
6781 6812 "\n" +
6782 6813 " <div class=\"panel panel-default\">\n" +
6783 6814 " <div class=\"panel-body form-inline\">\n" +
6784 6815 " <recursive>\n" +
6785 6816 " <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
6786 6817 " </recursive>\n" +
6787 6818 " </div>\n" +
6788 6819 " </div>\n" +
6789 6820 " </div>\n" +
6790 6821 "\n" +
6791 6822 " </span>\n" +
6792 6823 "</div>\n"
6793 6824 );
6794 6825
6795 6826
6796 6827 $templateCache.put('directives/rule/rule.html',
6797 6828 "<div class=\"rule form-inline\">\n" +
6798 6829 "\n" +
6799 6830 " <div class=\"form-group\">\n" +
6800 6831 " <select class=\"form-control\"\n" +
6801 6832 " ng-model=\"rule_ctrlr.rule.field\"\n" +
6802 6833 " ng-change=\"rule_ctrlr.fieldChange()\"\n" +
6803 6834 " ng-options=\"key as label for (key, label) in rule_ctrlr.ruleDefinitions.possibleFields\"></select>\n" +
6804 6835 " </div>\n" +
6805 6836 "\n" +
6806 6837 " <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
6807 6838 "\n" +
6808 6839 " <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
6809 6840 " ng-change=\"rule_ctrlr.setDirty()\"\n" +
6810 6841 " ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
6811 6842 " </select>\n" +
6812 6843 "\n" +
6813 6844 " <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
6814 6845 "\n" +
6815 6846 " </div>\n" +
6816 6847 "\n" +
6817 6848 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
6818 6849 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
6819 6850 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
6820 6851 " <div class=\"panel panel-default\">\n" +
6821 6852 " <div class=\"panel-body form-inline\">\n" +
6822 6853 " <recursive>\n" +
6823 6854 " <rule rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"rule_ctrlr.rule\" parent-obj=\"rule_ctrlr.parentObj\"></rule>\n" +
6824 6855 " </recursive>\n" +
6825 6856 " </div>\n" +
6826 6857 " </div>\n" +
6827 6858 " </div>\n" +
6828 6859 "\n" +
6829 6860 " <span ng-if=\"(rule_ctrlr.config.disable_subrules == false) == false\" class=\"btn btn-info\" ng-click=\"rule_ctrlr.add()\"><span class=\"fa fa-plus-circle\"></span> Add rule</span>\n" +
6830 6861 "\n" +
6831 6862 " </span>\n" +
6832 6863 " <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
6833 6864 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6834 6865 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6835 6866 " <ul class=\"dropdown-menu\">\n" +
6836 6867 " <li><a>No</a></li>\n" +
6837 6868 " <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
6838 6869 " </ul>\n" +
6839 6870 " </span>\n" +
6840 6871 " </div>\n" +
6841 6872 "</div>\n"
6842 6873 );
6843 6874
6844 6875
6845 6876 $templateCache.put('templates/directives/search_type_ahead.html',
6846 6877 "<a>\n" +
6847 6878 " <span class=\"tag\" ng-show=\"match.model.tag\">{{match.model.tag}}</span>\n" +
6848 6879 " <span class=\"tag\" ng-show=\"!match.model.tag\">{{match.label}}</span>\n" +
6849 6880 " <span ng-show=\"match.model.example\">-</span> <span class=\"example\">{{match.model.example}}</span>\n" +
6850 6881 " <div class=\"description\">{{match.model.description}}</div>\n" +
6851 6882 "\n" +
6852 6883 "</a>\n"
6853 6884 );
6854 6885
6855 6886
6856 6887 $templateCache.put('templates/directives/user_search_type_ahead.html',
6857 6888 "<a>\n" +
6858 6889 " <span>{{match.label}}</span> -\n" +
6859 6890 " <span class=\"color-secondary\">{{match.model.name}}</span>\n" +
6860 6891 "</a>\n"
6861 6892 );
6862 6893
6863 6894
6864 6895 $templateCache.put('templates/integrations/bitbucket.html',
6865 6896 " <div class=\"modal-header\">\n" +
6866 6897 " <h3 class=\"m-t-0\">Add issue to Bitbucket</h3>\n" +
6867 6898 " </div>\n" +
6868 6899 " <div class=\"modal-body\">\n" +
6869 6900 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
6870 6901 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
6871 6902 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
6872 6903 " </div>\n" +
6873 6904 "\n" +
6874 6905 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
6875 6906 " <div class=\"form-group\">\n" +
6876 6907 " <label for=\"issue_title\">Issue Title</label>\n" +
6877 6908 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
6878 6909 " </div>\n" +
6879 6910 " <div class=\"form-group row\">\n" +
6880 6911 " <div class=\"col-sm-6\">\n" +
6881 6912 " <label for=\"issue_priority\">Priority</label>\n" +
6882 6913 " <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
6883 6914 " </div>\n" +
6884 6915 "\n" +
6885 6916 " <div class=\"col-sm-6\">\n" +
6886 6917 " <label for=\"issue_responsible\">Assignee</label>\n" +
6887 6918 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
6888 6919 " </div>\n" +
6889 6920 " </div>\n" +
6890 6921 " <div class=\"form-group\">\n" +
6891 6922 " <label for=\"issue_content\">Description</label>\n" +
6892 6923 " <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
6893 6924 " </div>\n" +
6894 6925 " </form>\n" +
6895 6926 "\n" +
6896 6927 " </div>\n" +
6897 6928 " <div class=\"modal-footer\">\n" +
6898 6929 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
6899 6930 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
6900 6931 " </div>\n"
6901 6932 );
6902 6933
6903 6934
6904 6935 $templateCache.put('templates/integrations/github.html',
6905 6936 " <div class=\"modal-header\">\n" +
6906 6937 " <h3 class=\"m-t-0\">Add issue to Github</h3>\n" +
6907 6938 " </div>\n" +
6908 6939 " <div class=\"modal-body\">\n" +
6909 6940 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
6910 6941 "\n" +
6911 6942 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
6912 6943 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
6913 6944 " </div>\n" +
6914 6945 "\n" +
6915 6946 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
6916 6947 " <div class=\"form-group\">\n" +
6917 6948 " <label for=\"issue_title\">Issue Title</label>\n" +
6918 6949 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
6919 6950 " </div>\n" +
6920 6951 " <div class=\"form-group row\">\n" +
6921 6952 " <div class=\"col-sm-6\">\n" +
6922 6953 " <label for=\"issue_status\">Tag</label>\n" +
6923 6954 " <select class=\"form-control\" id=\"issue_status\" ng-options=\"s for s in ctrl.statuses\" ng-model=\"ctrl.form.status\"></select>\n" +
6924 6955 " </div>\n" +
6925 6956 "\n" +
6926 6957 " <div class=\"col-sm-6\">\n" +
6927 6958 " <label for=\"issue_responsible\">Assignee</label>\n" +
6928 6959 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
6929 6960 " </div>\n" +
6930 6961 " </div>\n" +
6931 6962 " <div class=\"form-group\">\n" +
6932 6963 " <label for=\"issue_description\">Description</label>\n" +
6933 6964 " <textarea id=\"issue_description\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
6934 6965 " </div>\n" +
6935 6966 " </form>\n" +
6936 6967 "\n" +
6937 6968 " </div>\n" +
6938 6969 " <div class=\"modal-footer\">\n" +
6939 6970 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
6940 6971 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
6941 6972 " </div>\n"
6942 6973 );
6943 6974
6944 6975
6945 6976 $templateCache.put('templates/integrations/jira.html',
6946 6977 " <div class=\"modal-header\">\n" +
6947 6978 " <h3 class=\"m-t-0\">Add issue to Jira</h3>\n" +
6948 6979 " </div>\n" +
6949 6980 " <div class=\"modal-body\">\n" +
6950 6981 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
6951 6982 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
6952 6983 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
6953 6984 " </div>\n" +
6954 6985 "\n" +
6955 6986 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
6956 6987 " <div class=\"form-group\">\n" +
6957 6988 " <label for=\"issue_title\">Issue Title</label>\n" +
6958 6989 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
6959 6990 " </div>\n" +
6960 6991 "\n" +
6961 6992 " <div class=\"form-group\">\n" +
6962 6993 " <label for=\"issue_type\">Issue Type</label>\n" +
6963 6994 " <select class=\"form-control\" id=\"issue_type\" ng-options=\"i.name for i in ctrl.issue_types\" ng-model=\"ctrl.form.issue_type\"></select>\n" +
6964 6995 " </div>\n" +
6965 6996 " <div class=\"form-group row\">\n" +
6966 6997 " <div class=\"col-sm-6\">\n" +
6967 6998 " <label for=\"issue_priority\">Priority</label>\n" +
6968 6999 " <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s.name for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
6969 7000 " </div>\n" +
6970 7001 "\n" +
6971 7002 " <div class=\"col-sm-6\">\n" +
6972 7003 " <label for=\"issue_responsible\">Assignee</label>\n" +
6973 7004 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.name for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
6974 7005 " </div>\n" +
6975 7006 " </div>\n" +
6976 7007 " <div class=\"form-group\">\n" +
6977 7008 " <label for=\"issue_content\">Description</label>\n" +
6978 7009 " <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
6979 7010 " </div>\n" +
6980 7011 " </form>\n" +
6981 7012 "\n" +
6982 7013 " </div>\n" +
6983 7014 " <div class=\"modal-footer\">\n" +
6984 7015 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
6985 7016 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
6986 7017 " </div>\n"
6987 7018 );
6988 7019
6989 7020
6990 7021 $templateCache.put('templates/loader.html',
6991 7022 "<div class=\"text-center\">\n" +
6992 7023 " <span class=\"fa fa-cog fa-spin fa-5x m-a-4\"></span>\n" +
6993 7024 "</div>\n"
6994 7025 );
6995 7026
6996 7027
6997 7028 $templateCache.put('templates/quickstart.html',
6998 7029 "<h2>AppEnlight quickstart</h2>\n" +
6999 7030 "\n" +
7000 7031 "<p>\n" +
7001 7032 " <span class=\"point\">1</span>\n" +
7002 7033 " For AppEnlight to operate, you need to\n" +
7003 7034 " <a data-ui-sref=\"applications.update({resourceId:'new'})\" target=\"_blank\"><strong>create an app profile</strong></a> that allows\n" +
7004 7035 " you to\n" +
7005 7036 " obtain an <strong>API key</strong> that one of the clients can use.\n" +
7006 7037 "</p>\n" +
7007 7038 "\n" +
7008 7039 "<div class=\"clear\"></div>\n" +
7009 7040 "<hr/>\n" +
7010 7041 "\n" +
7011 7042 "<p>\n" +
7012 7043 " <span class=\"point\">2</span>\n" +
7013 7044 " It is a good idea to configure an\n" +
7014 7045 " <a data-ui-sref=\"user.alert_channels.email\" target=\"_blank\">\n" +
7015 7046 " <strong>email alert channel</strong></a> that you can use to receive\n" +
7016 7047 " notifications about events that happen in your application.\n" +
7017 7048 "</p>\n" +
7018 7049 "\n" +
7019 7050 "<p>\n" +
7020 7051 " It can be the same email account you used to register withing AppEnlight -\n" +
7021 7052 " although we often recommend using a separate <em>errors@...</em> account\n" +
7022 7053 " designated for alert notifications.\n" +
7023 7054 "</p>\n" +
7024 7055 "\n" +
7025 7056 "<div class=\"clear\"></div>\n" +
7026 7057 "<hr/>\n" +
7027 7058 "\n" +
7028 7059 "<p>\n" +
7029 7060 " <span class=\"point\">3</span>\n" +
7030 7061 " In order for your application to stream meaningful information, you will need to\n" +
7031 7062 " integrate a compatible client for your language of choice.\n" +
7032 7063 "</p>\n" +
7033 7064 "\n" +
7034 7065 "<p>Head over to the <a href=\"{{AeConfig.urls.docs}}\" target=\"_blank\">\n" +
7035 7066 " <strong>developers section</strong></a> for information on currently available\n" +
7036 7067 " clients that you can plug into your software</p>\n"
7037 7068 );
7038 7069
7039 7070
7040 7071 $templateCache.put('templates/register.html',
7041 7072 ""
7042 7073 );
7043 7074
7044 7075
7045 7076 $templateCache.put('templates/reports/small_report_group_list.html',
7046 7077 "<table class=\"errors-small-list\">\n" +
7047 7078 " <tr ng-repeat=\"report_group in groups track by report_group.id\" class=\"animate-repeat\">\n" +
7048 7079 " <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report_group.occurences|numberToThousands }}</span></td>\n" +
7049 7080 " <td class=\"ellipsis c2 report_group\">\n" +
7050 7081 " <a ui-sref=\"report.view_detail({groupId:report_group.id, reportId:report_group.last_report})\" title=\"{{report_group.error}}\" class=\"error-type\">\n" +
7051 7082 " {{ report_group.error || \"Slow Report\"}}</a>\n" +
7052 7083 " <br/>\n" +
7053 7084 " <span ng-show=\"report_group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report_group.summed_duration/report_group.occurences|round:2}}s</span>\n" +
7054 7085 " <span class=\"url\">{{ report_group.view_name || report_group.url_path}}</span>\n" +
7055 7086 " </td>\n" +
7056 7087 " <td class=\"info\">\n" +
7057 7088 " <strong ng-show=\"report_group.resource_id\">@{{applications[report_group.resource_id].resource_name}}</strong><br/>\n" +
7058 7089 " <span class=\"date\">{{report_group.last_timestamp | isoToRelativeTime}}</span>\n" +
7059 7090 " </td>\n" +
7060 7091 " </tr>\n" +
7061 7092 "</table>\n"
7062 7093 );
7063 7094
7064 7095
7065 7096 $templateCache.put('templates/reports/small_report_list.html',
7066 7097 "<table class=\"errors-small-list\">\n" +
7067 7098 " <tr ng-repeat=\"report in reports track by $index\" ng-show=\"reports.length > 0\" class=\"animate-repeat\">\n" +
7068 7099 " <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report.group.occurences|numberToThousands }}</span></td>\n" +
7069 7100 " <td class=\"ellipsis c2 report\">\n" +
7070 7101 " <a ui-sref=\"report.view_detail({groupId:report.group_id, reportId:report.report_id})\" title=\"{{report.error}}\" class=\"error-type\">\n" +
7071 7102 " {{ report.error || \"Slow Report\"}}</a>\n" +
7072 7103 " <br/>\n" +
7073 7104 " <span ng-show=\"report.group.summed_duration\" class=\"duration\" data-uib-tooltip=\"Average duration\">{{report.group.summed_duration/report.group.occurences|round:2}}s</span>\n" +
7074 7105 " <span class=\"url\">{{ report.view_name || report.url_path}}</span>\n" +
7075 7106 " </td>\n" +
7076 7107 " <td class=\"info\">\n" +
7077 7108 " <strong ng-show=\"report.resource_id\">@{{applications[report.resource_id].resource_name}}</strong><br/>\n" +
7078 7109 " <span class=\"date\">{{report.last_timestamp | isoToRelativeTime}}</span>\n" +
7079 7110 " </td>\n" +
7080 7111 " </tr>\n" +
7081 7112 "</table>\n"
7082 7113 );
7083 7114
7084 7115
7085 7116 $templateCache.put('templates/settings_breadcrumbs.html',
7086 7117 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('applications')\">\n" +
7087 7118 " <li>Applications</li>\n" +
7088 7119 " <li ng-show=\"$ctrl.$state.includes('applications.list')\" ng-class=\"{bold:$ctrl.$state.is('applications.list')}\">Owned applications</li>\n" +
7089 7120 " <li ng-show=\"$ctrl.$state.includes('applications.update')\" ng-class=\"{bold:$ctrl.$state.is('applications.update')}\">Modify application</li>\n" +
7090 7121 " <li ng-show=\"$ctrl.$state.includes('applications.integrations')\" ng-class=\"{bold:$ctrl.$state.includes('applications.integrations')}\">Integrations</li>\n" +
7091 7122 " <li ng-show=\"$ctrl.$state.includes('applications.purge_logs')\" ng-class=\"{bold:$ctrl.$state.includes('applications.purge_logs')}\">Log Purging</li>\n" +
7092 7123 "</ol>\n" +
7093 7124 "\n" +
7094 7125 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.profile')\">\n" +
7095 7126 " <li>Settings</li>\n" +
7096 7127 " <li ng-show=\"$ctrl.$state.includes('user.profile.edit')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.edit')}\">User Profile</li>\n" +
7097 7128 " <li ng-show=\"$ctrl.$state.includes('user.profile.password')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.password')}\">Password</li>\n" +
7098 7129 " <li ng-show=\"$ctrl.$state.includes('user.profile.identities')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.identities')}\">Identities</li>\n" +
7099 7130 " <li ng-show=\"$ctrl.$state.includes('user.profile.auth_tokens')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.auth_tokens')}\">Auth Tokens</li>\n" +
7100 7131 "</ol>\n" +
7101 7132 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.alert_channels')\">\n" +
7102 7133 "<li>Notifications</li>\n" +
7103 7134 "<li ng-show=\"$ctrl.$state.includes('user.alert_channels.list')\" ng-class=\"{bold:$ctrl.$state.is('user.alert_channels.list')}\">Alert Channels</li>\n" +
7104 7135 "<li ng-show=\"$ctrl.$state.includes('user.alert_channels.email')\" ng-class=\"{bold:$ctrl.$state.is('user.alert_channels.email')}\">Create email channel</li>\n" +
7105 7136 "</ol>\n"
7106 7137 );
7107 7138
7108 7139 }]);
7109 7140
7110 7141 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7111 7142 // #
7112 7143 // # This program is free software: you can redistribute it and/or modify
7113 7144 // # it under the terms of the GNU Affero General Public License, version 3
7114 7145 // # (only), as published by the Free Software Foundation.
7115 7146 // #
7116 7147 // # This program is distributed in the hope that it will be useful,
7117 7148 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7118 7149 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7119 7150 // # GNU General Public License for more details.
7120 7151 // #
7121 7152 // # You should have received a copy of the GNU Affero General Public License
7122 7153 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7123 7154 // #
7124 7155 // # This program is dual-licensed. If you wish to learn more about the
7125 7156 // # AppEnlight Enterprise Edition, including its added features, Support
7126 7157 // # services, and proprietary license terms, please see
7127 7158 // # https://rhodecode.com/licenses/
7128 7159
7129 7160 angular.module('appenlight.components.appenlightApp', [])
7130 7161 .component('appenlightApp', {
7131 7162 templateUrl: 'components/appenlight-app/appenlight-app.html',
7132 7163 controller: AppEnlightAppController
7133 7164 });
7134 7165
7135 7166 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
7136 7167
7137 7168 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
7138 7169
7139 7170 // to keep bw compatibility
7140 7171 $scope.$state = $state;
7141 7172 $scope.stateHolder = stateHolder;
7142 7173 $scope.flash = stateHolder.flashMessages.list;
7143 7174 $scope.closeAlert = stateHolder.flashMessages.closeAlert;
7144 7175 $scope.AeConfig = AeConfig;
7145 7176 }
7146 7177
7147 7178 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7148 7179 // #
7149 7180 // # This program is free software: you can redistribute it and/or modify
7150 7181 // # it under the terms of the GNU Affero General Public License, version 3
7151 7182 // # (only), as published by the Free Software Foundation.
7152 7183 // #
7153 7184 // # This program is distributed in the hope that it will be useful,
7154 7185 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7155 7186 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7156 7187 // # GNU General Public License for more details.
7157 7188 // #
7158 7189 // # You should have received a copy of the GNU Affero General Public License
7159 7190 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7160 7191 // #
7161 7192 // # This program is dual-licensed. If you wish to learn more about the
7162 7193 // # AppEnlight Enterprise Edition, including its added features, Support
7163 7194 // # services, and proprietary license terms, please see
7164 7195 // # https://rhodecode.com/licenses/
7165 7196
7166 7197 angular.module('appenlight.components.appenlightHeader', [])
7167 7198 .component('appenlightFooter', {
7168 7199 templateUrl: 'templates/components/appenlight-footer.html',
7169 7200 controller: AppEnlightFooterController
7170 7201 });
7171 7202
7172 7203 ChannelstreamController.$inject = ['stateHolder', 'AeConfig'];
7173 7204
7174 7205 function AppEnlightFooterController(stateHolder, AeConfig){
7175 7206 var vm = this;
7176 7207 vm.AeConfig = AeConfig;
7177 7208 vm.stateHolder = stateHolder;
7178 7209 }
7179 7210
7180 7211 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7181 7212 // #
7182 7213 // # This program is free software: you can redistribute it and/or modify
7183 7214 // # it under the terms of the GNU Affero General Public License, version 3
7184 7215 // # (only), as published by the Free Software Foundation.
7185 7216 // #
7186 7217 // # This program is distributed in the hope that it will be useful,
7187 7218 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7188 7219 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7189 7220 // # GNU General Public License for more details.
7190 7221 // #
7191 7222 // # You should have received a copy of the GNU Affero General Public License
7192 7223 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7193 7224 // #
7194 7225 // # This program is dual-licensed. If you wish to learn more about the
7195 7226 // # AppEnlight Enterprise Edition, including its added features, Support
7196 7227 // # services, and proprietary license terms, please see
7197 7228 // # https://rhodecode.com/licenses/
7198 7229
7199 7230 angular.module('appenlight.components.appenlightHeader', [])
7200 7231 .component('appenlightHeader', {
7201 7232 templateUrl: 'components/appenlight-header/appenlight-header.html',
7202 7233 controller: AppEnlightHeaderController
7203 7234 });
7204 7235
7205 7236 ChannelstreamController.$inject = ['$state', 'stateHolder', 'AeConfig'];
7206 7237
7207 7238 function AppEnlightHeaderController($state, stateHolder, AeConfig){
7208 7239 var vm = this;
7209 7240 vm.AeConfig = AeConfig;
7210 7241 vm.stateHolder = stateHolder;
7211 7242 vm.assignedReports = stateHolder.AeUser.assigned_reports;
7212 7243 vm.latestEvents = stateHolder.AeUser.latest_events;
7213 7244 vm.activeEvents = 0;
7214 7245 _.each(vm.latestEvents, function (event) {
7215 7246 if (event.status === 1 && event.end_date === null) {
7216 7247 vm.activeEvents += 1;
7217 7248 }
7218 7249 });
7219 7250
7220 7251 vm.clickedEvent = function(event){
7221 7252 // exception reports
7222 7253 if (_.contains([1,2], event.event_type)){
7223 7254 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
7224 7255 }
7225 7256 // slowness reports
7226 7257 else if (_.contains([3,4], event.event_type)){
7227 7258 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
7228 7259 }
7229 7260 // uptime reports
7230 7261 else if (_.contains([7,8], event.event_type)){
7231 7262 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
7232 7263 }
7233 7264 else{
7234 7265
7235 7266 }
7236 7267 }
7237 7268 }
7238 7269
7239 7270 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7240 7271 // #
7241 7272 // # This program is free software: you can redistribute it and/or modify
7242 7273 // # it under the terms of the GNU Affero General Public License, version 3
7243 7274 // # (only), as published by the Free Software Foundation.
7244 7275 // #
7245 7276 // # This program is distributed in the hope that it will be useful,
7246 7277 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7247 7278 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7248 7279 // # GNU General Public License for more details.
7249 7280 // #
7250 7281 // # You should have received a copy of the GNU Affero General Public License
7251 7282 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7252 7283 // #
7253 7284 // # This program is dual-licensed. If you wish to learn more about the
7254 7285 // # AppEnlight Enterprise Edition, including its added features, Support
7255 7286 // # services, and proprietary license terms, please see
7256 7287 // # https://rhodecode.com/licenses/
7257 7288
7258 7289 angular.module('appenlight.components.channelstream', [])
7259 7290 .component('channelstream', {
7260 7291 controller: ChannelstreamController,
7261 7292 bindings: {
7262 7293 config: '='
7263 7294 }
7264 7295 });
7265 7296
7266 7297 ChannelstreamController.$inject = ['$rootScope', 'stateHolder', 'userSelfPropertyResource'];
7267 7298
7268 7299 function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResource){
7269 7300 if (stateHolder.AeUser.id === null){
7270 7301 return
7271 7302 }
7272 7303 userSelfPropertyResource.get({key: 'websocket'}, function (data) {
7273 7304 stateHolder.websocket = new ReconnectingWebSocket(this.config.ws_url + '/ws?conn_id=' + data.conn_id);
7274 7305 stateHolder.websocket.onopen = function (event) {
7275 7306
7276 7307 };
7277 7308 stateHolder.websocket.onmessage = function (event) {
7278 7309 var data = JSON.parse(event.data);
7279 7310 $rootScope.$apply(function (scope) {
7280 7311 _.each(data, function (message) {
7281 7312
7282 7313 if(typeof message.message.topic !== 'undefined'){
7283 7314 $rootScope.$emit(
7284 7315 'channelstream-message.'+message.message.topic, message);
7285 7316 }
7286 7317 else{
7287 7318 $rootScope.$emit('channelstream-message', message);
7288 7319 }
7289 7320 });
7290 7321 });
7291 7322 };
7292 7323 stateHolder.websocket.onclose = function (event) {
7293 7324
7294 7325 };
7295 7326
7296 7327 stateHolder.websocket.onerror = function (event) {
7297 7328
7298 7329 };
7299 7330 }.bind(this));
7300 7331 }
7301 7332
7302 7333 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7303 7334 // #
7304 7335 // # This program is free software: you can redistribute it and/or modify
7305 7336 // # it under the terms of the GNU Affero General Public License, version 3
7306 7337 // # (only), as published by the Free Software Foundation.
7307 7338 // #
7308 7339 // # This program is distributed in the hope that it will be useful,
7309 7340 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7310 7341 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7311 7342 // # GNU General Public License for more details.
7312 7343 // #
7313 7344 // # You should have received a copy of the GNU Affero General Public License
7314 7345 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7315 7346 // #
7316 7347 // # This program is dual-licensed. If you wish to learn more about the
7317 7348 // # AppEnlight Enterprise Edition, including its added features, Support
7318 7349 // # services, and proprietary license terms, please see
7319 7350 // # https://rhodecode.com/licenses/
7320 7351
7321 7352 angular.module('appenlight.components.adminApplicationsListView', [])
7322 7353 .component('adminApplicationsListView', {
7323 7354 templateUrl: 'components/views/admin-applications-list-view/admin-applications-list-view.html',
7324 7355 controller: AdminApplicationsListController
7325 7356 });
7326 7357
7327 7358 AdminApplicationsListController.$inject = ['applicationsResource'];
7328 7359
7329 7360 function AdminApplicationsListController(applicationsResource) {
7330 7361
7331 7362 var vm = this;
7332 7363 vm.loading = {applications: true};
7333 7364
7334 7365 vm.applications = applicationsResource.query({
7335 7366 root_list: true,
7336 7367 resource_type: 'application'
7337 7368 }, function (data) {
7338 7369 vm.loading = {applications: false};
7339 7370 });
7340 7371 };
7341 7372
7342 7373 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7343 7374 // #
7344 7375 // # This program is free software: you can redistribute it and/or modify
7345 7376 // # it under the terms of the GNU Affero General Public License, version 3
7346 7377 // # (only), as published by the Free Software Foundation.
7347 7378 // #
7348 7379 // # This program is distributed in the hope that it will be useful,
7349 7380 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7350 7381 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7351 7382 // # GNU General Public License for more details.
7352 7383 // #
7353 7384 // # You should have received a copy of the GNU Affero General Public License
7354 7385 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7355 7386 // #
7356 7387 // # This program is dual-licensed. If you wish to learn more about the
7357 7388 // # AppEnlight Enterprise Edition, including its added features, Support
7358 7389 // # services, and proprietary license terms, please see
7359 7390 // # https://rhodecode.com/licenses/
7360 7391
7361 7392 angular.module('appenlight.components.adminConfigurationView', [])
7362 7393 .component('adminConfigurationView', {
7363 7394 templateUrl: 'components/views/admin-configuration-view/admin-configuration-view.html',
7364 7395 controller: AdminConfigurationViewController
7365 7396 });
7366 7397
7367 7398 AdminConfigurationViewController.$inject = ['configsResource', 'configsNoIdResource'];
7368 7399
7369 7400 function AdminConfigurationViewController(configsResource, configsNoIdResource) {
7370 7401 var vm = this;
7371 7402 vm.loading = {config: true};
7372 7403
7373 7404 var filters = [
7374 7405 'template_footer_html:global',
7375 7406 'list_groups_to_non_admins:global',
7376 7407 'per_application_reports_rate_limit:global',
7377 7408 'per_application_logs_rate_limit:global',
7378 7409 'per_application_metrics_rate_limit:global',
7379 7410 ];
7380 7411
7381 7412 vm.configs = {};
7382 7413
7383 7414 vm.configList = configsResource.query({filter: filters},
7384 7415 function (data) {
7385 7416 vm.loading = {config: false};
7386 7417 _.each(data, function (item) {
7387 7418 if (vm.configs[item.section] === undefined) {
7388 7419 vm.configs[item.section] = {};
7389 7420 }
7390 7421 vm.configs[item.section][item.key] = item;
7391 7422 });
7392 7423 });
7393 7424
7394 7425 vm.save = function () {
7395 7426 vm.loading.config = true;
7396 7427 _.each(vm.configList, function (item) {
7397 7428 item.$save();
7398 7429 });
7399 7430 vm.loading.config = false;
7400 7431 };
7401 7432
7402 7433 };
7403 7434
7404 7435 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7405 7436 // #
7406 7437 // # This program is free software: you can redistribute it and/or modify
7407 7438 // # it under the terms of the GNU Affero General Public License, version 3
7408 7439 // # (only), as published by the Free Software Foundation.
7409 7440 // #
7410 7441 // # This program is distributed in the hope that it will be useful,
7411 7442 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7412 7443 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7413 7444 // # GNU General Public License for more details.
7414 7445 // #
7415 7446 // # You should have received a copy of the GNU Affero General Public License
7416 7447 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7417 7448 // #
7418 7449 // # This program is dual-licensed. If you wish to learn more about the
7419 7450 // # AppEnlight Enterprise Edition, including its added features, Support
7420 7451 // # services, and proprietary license terms, please see
7421 7452 // # https://rhodecode.com/licenses/
7422 7453
7423 7454 angular.module('appenlight.components.adminGroupsCreateView', [])
7424 7455 .component('adminGroupsCreateView', {
7425 7456 templateUrl: 'components/views/admin-groups-create-view/admin-groups-create-view.html',
7426 7457 controller: AdminGroupsCreateViewController
7427 7458 });
7428 7459
7429 7460 AdminGroupsCreateViewController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource'];
7430 7461
7431 7462 function AdminGroupsCreateViewController($state, groupsResource, groupsPropertyResource, sectionViewResource) {
7432 7463
7433 7464 var vm = this;
7434 7465 vm.$state = $state;
7435 7466 vm.loading = {
7436 7467 group: false,
7437 7468 resource_permissions: false,
7438 7469 users: false
7439 7470 };
7440 7471
7441 7472 vm.form = {
7442 7473 autocompleteUser: '',
7443 7474 }
7444 7475
7445 7476
7446 7477 if (typeof $state.params.groupId !== 'undefined') {
7447 7478 vm.loading.group = true;
7448 7479 var groupId = $state.params.groupId;
7449 7480 vm.group = groupsResource.get({groupId: groupId}, function (data) {
7450 7481 vm.loading.group = false;
7451 7482 });
7452 7483
7453 7484 vm.resource_permissions = groupsPropertyResource.query(
7454 7485 {groupId: groupId, key: 'resource_permissions'}, function (data) {
7455 7486 vm.loading.resource_permissions = false;
7456 7487 var tmpObj = {
7457 7488 'group': {
7458 7489 'application': {},
7459 7490 'dashboard': {}
7460 7491 }
7461 7492 };
7462 7493 _.each(data, function (item) {
7463 7494
7464 7495 var section = tmpObj[item.type][item.resource_type];
7465 7496 if (typeof section[item.resource_id] == 'undefined') {
7466 7497 section[item.resource_id] = {
7467 7498 self: item,
7468 7499 permissions: []
7469 7500 }
7470 7501 }
7471 7502 section[item.resource_id].permissions.push(item.perm_name);
7472 7503
7473 7504 });
7474 7505 vm.resourcePermissions = tmpObj;
7475 7506 });
7476 7507
7477 7508 vm.users = groupsPropertyResource.query(
7478 7509 {groupId: groupId, key: 'users'}, function (data) {
7479 7510 vm.loading.users = false;
7480 7511 }, function () {
7481 7512 vm.loading.users = false;
7482 7513 });
7483 7514
7484 7515 }
7485 7516 else {
7486 7517 var groupId = null;
7487 7518 }
7488 7519
7489 7520 var formResponse = function (response) {
7490 7521 if (response.status === 422) {
7491 7522 setServerValidation(vm.groupForm, response.data);
7492 7523 }
7493 7524 vm.loading.group = false;
7494 7525 };
7495 7526
7496 7527 vm.createGroup = function () {
7497 7528 vm.loading.group = true;
7498 7529 if (groupId) {
7499 7530 groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
7500 7531 setServerValidation(vm.groupForm);
7501 7532 vm.loading.group = false;
7502 7533 }, formResponse);
7503 7534 }
7504 7535 else {
7505 7536 groupsResource.save(vm.group, function (data) {
7506 7537 $state.go('admin.group.update', {groupId: data.id});
7507 7538 }, formResponse);
7508 7539 }
7509 7540 };
7510 7541
7511 7542 vm.removeUser = function (user) {
7512 7543 groupsPropertyResource.delete(
7513 7544 {groupId: groupId, key: 'users', user_name: user.user_name},
7514 7545 function (data) {
7515 7546 vm.loading.users = false;
7516 7547 vm.users = _.filter(vm.users, function (item) {
7517 7548 return item != user;
7518 7549 });
7519 7550 }, function () {
7520 7551 vm.loading.users = false;
7521 7552 });
7522 7553 };
7523 7554
7524 7555 vm.addUser = function () {
7525 7556 groupsPropertyResource.save(
7526 7557 {groupId: groupId, key: 'users'},
7527 7558 {user_name: vm.form.autocompleteUser},
7528 7559 function (data) {
7529 7560 vm.loading.users = false;
7530 7561 vm.users.push(data);
7531 7562 vm.form.autocompleteUser = '';
7532 7563 }, function () {
7533 7564 vm.loading.users = false;
7534 7565 });
7535 7566 }
7536 7567
7537 7568 vm.searchUsers = function (searchPhrase) {
7538 7569
7539 7570 return sectionViewResource.query({
7540 7571 section: 'users_section',
7541 7572 view: 'search_users',
7542 7573 'user_name': searchPhrase
7543 7574 }).$promise.then(function (data) {
7544 7575 return _.map(data, function (item) {
7545 7576 return item.user;
7546 7577 });
7547 7578 });
7548 7579 }
7549 7580 };
7550 7581
7551 7582 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7552 7583 // #
7553 7584 // # This program is free software: you can redistribute it and/or modify
7554 7585 // # it under the terms of the GNU Affero General Public License, version 3
7555 7586 // # (only), as published by the Free Software Foundation.
7556 7587 // #
7557 7588 // # This program is distributed in the hope that it will be useful,
7558 7589 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7559 7590 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7560 7591 // # GNU General Public License for more details.
7561 7592 // #
7562 7593 // # You should have received a copy of the GNU Affero General Public License
7563 7594 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7564 7595 // #
7565 7596 // # This program is dual-licensed. If you wish to learn more about the
7566 7597 // # AppEnlight Enterprise Edition, including its added features, Support
7567 7598 // # services, and proprietary license terms, please see
7568 7599 // # https://rhodecode.com/licenses/
7569 7600
7570 7601 angular.module('appenlight.components.adminGroupsListView', [])
7571 7602 .component('adminGroupsListView', {
7572 7603 templateUrl: 'components/views/admin-groups-list-view/admin-groups-list-view.html',
7573 7604 controller: AdminGroupsListViewController
7574 7605 });
7575 7606
7576 7607 AdminGroupsListViewController.$inject = ['$state', 'groupsResource'];
7577 7608
7578 7609 function AdminGroupsListViewController($state, groupsResource) {
7579 7610
7580 7611 var vm = this;
7581 7612 vm.$state = $state;
7582 7613 vm.loading = {groups: true};
7583 7614
7584 7615 vm.groups = groupsResource.query({}, function (data) {
7585 7616 vm.loading = {groups: false};
7586 7617 vm.activeUsers = _.reduce(vm.groups, function(memo, val){
7587 7618 if (val.status == 1){
7588 7619 return memo + 1;
7589 7620 }
7590 7621 return memo;
7591 7622 }, 0);
7592 7623
7593 7624 });
7594 7625
7595 7626
7596 7627 vm.removeGroup = function (group) {
7597 7628 groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
7598 7629
7599 7630 if (data) {
7600 7631 var index = vm.groups.indexOf(group);
7601 7632 if (index !== -1) {
7602 7633 vm.groups.splice(index, 1);
7603 7634 vm.activeGroups -= 1;
7604 7635 }
7605 7636 }
7606 7637 });
7607 7638 }
7608 7639 };
7609 7640
7610 7641 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7611 7642 // #
7612 7643 // # This program is free software: you can redistribute it and/or modify
7613 7644 // # it under the terms of the GNU Affero General Public License, version 3
7614 7645 // # (only), as published by the Free Software Foundation.
7615 7646 // #
7616 7647 // # This program is distributed in the hope that it will be useful,
7617 7648 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7618 7649 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7619 7650 // # GNU General Public License for more details.
7620 7651 // #
7621 7652 // # You should have received a copy of the GNU Affero General Public License
7622 7653 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7623 7654 // #
7624 7655 // # This program is dual-licensed. If you wish to learn more about the
7625 7656 // # AppEnlight Enterprise Edition, including its added features, Support
7626 7657 // # services, and proprietary license terms, please see
7627 7658 // # https://rhodecode.com/licenses/
7628 7659
7629 7660 angular.module('appenlight.components.adminPartitionsView', [])
7630 7661 .component('adminPartitionsView', {
7631 7662 templateUrl: 'components/views/admin-partitions-view/admin-partitions-view.html',
7632 7663 controller: AdminPartitionsViewController
7633 7664 });
7634 7665
7635 7666 AdminPartitionsViewController.$inject = ['sectionViewResource'];
7636 7667
7637 7668 function AdminPartitionsViewController(sectionViewResource) {
7638 7669 var vm = this;
7639 7670 vm.permanentPartitions = [];
7640 7671 vm.dailyPartitions = [];
7641 7672 vm.loading = {partitions: true};
7642 7673 vm.dailyChecked = false;
7643 7674 vm.permChecked = false;
7644 7675 vm.dailyConfirm = '';
7645 7676 vm.permConfirm = '';
7646 7677
7647 7678
7648 7679 vm.loadPartitions = function (data) {
7649 7680 var permanentPartitions = vm.transformPartitionList(
7650 7681 data.permanent_partitions);
7651 7682 var dailyPartitions = vm.transformPartitionList(
7652 7683 data.daily_partitions);
7653 7684 vm.permanentPartitions = permanentPartitions;
7654 7685 vm.dailyPartitions = dailyPartitions;
7655 7686 vm.loading = {partitions: false};
7656 7687 };
7657 7688
7658 7689 vm.setCheckedList = function (scope) {
7659 7690 var toTest = null;
7660 7691 if (scope === 'dailyPartitions'){
7661 7692 toTest = 'dailyChecked';
7662 7693 }
7663 7694 else{
7664 7695 toTest = 'permChecked';
7665 7696 }
7666 7697
7667 7698 if (vm[toTest]) {
7668 7699 var val = true;
7669 7700 }
7670 7701 else {
7671 7702 var val = false;
7672 7703 }
7673 7704
7674 7705 _.each(vm[scope], function (item) {
7675 7706 _.each(item[1].pg, function (index) {
7676 7707 index.checked = val;
7677 7708 });
7678 7709 _.each(item[1].elasticsearch, function (index) {
7679 7710 index.checked = val;
7680 7711 });
7681 7712 });
7682 7713 }
7683 7714
7684 7715
7685 7716 vm.transformPartitionList = function (inputList) {
7686 7717 var outputList = [];
7687 7718
7688 7719 _.each(inputList, function (item) {
7689 7720 var time = [item[0], {
7690 7721 elasticsearch: [],
7691 7722 pg: []
7692 7723 }]
7693 7724 _.each(item[1].pg, function (index) {
7694 7725 time[1].pg.push({name: index, checked: false})
7695 7726 });
7696 7727 _.each(item[1].elasticsearch, function (index) {
7697 7728 time[1].elasticsearch.push({
7698 7729 name: index,
7699 7730 checked: false
7700 7731 })
7701 7732 });
7702 7733 outputList.push(time);
7703 7734 });
7704 7735 return outputList;
7705 7736 };
7706 7737
7707 7738 sectionViewResource.get({section:'admin_section', view: 'partitions'},
7708 7739 vm.loadPartitions);
7709 7740
7710 7741 vm.partitionsDelete = function (partitionType) {
7711 7742 var es_indices = [];
7712 7743 var pg_indices = [];
7713 7744 _.each(vm[partitionType], function (item) {
7714 7745 _.each(item[1].pg, function (index) {
7715 7746 if (index.checked) {
7716 7747 pg_indices.push(index.name)
7717 7748 }
7718 7749 });
7719 7750 _.each(item[1].elasticsearch, function (index) {
7720 7751 if (index.checked) {
7721 7752 es_indices.push(index.name)
7722 7753 }
7723 7754 });
7724 7755 });
7725 7756
7726 7757
7727 7758 vm.loading = {partitions: true};
7728 7759 sectionViewResource.save({section:'admin_section',
7729 7760 view: 'partitions_remove'}, {
7730 7761 es_indices: es_indices,
7731 7762 pg_indices: pg_indices,
7732 7763 confirm: 'CONFIRM'
7733 7764 }, vm.loadPartitions);
7734 7765
7735 7766 }
7736 7767
7737 7768 }
7738 7769
7739 7770 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7740 7771 // #
7741 7772 // # This program is free software: you can redistribute it and/or modify
7742 7773 // # it under the terms of the GNU Affero General Public License, version 3
7743 7774 // # (only), as published by the Free Software Foundation.
7744 7775 // #
7745 7776 // # This program is distributed in the hope that it will be useful,
7746 7777 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7747 7778 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7748 7779 // # GNU General Public License for more details.
7749 7780 // #
7750 7781 // # You should have received a copy of the GNU Affero General Public License
7751 7782 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7752 7783 // #
7753 7784 // # This program is dual-licensed. If you wish to learn more about the
7754 7785 // # AppEnlight Enterprise Edition, including its added features, Support
7755 7786 // # services, and proprietary license terms, please see
7756 7787 // # https://rhodecode.com/licenses/
7757 7788
7758 7789 angular.module('appenlight.components.adminSystemView', [])
7759 7790 .component('adminSystemView', {
7760 7791 templateUrl: 'components/views/admin-system-view/admin-system-view.html',
7761 7792 controller: AdminSystemViewController
7762 7793 });
7763 7794
7764 7795 AdminSystemViewController.$inject = ['sectionViewResource'];
7765 7796
7766 7797 function AdminSystemViewController(sectionViewResource) {
7767 7798 var vm = this;
7768 7799 vm.tables = [];
7769 7800 vm.loading = {system: true};
7770 7801 sectionViewResource.get({
7771 7802 section: 'admin_section',
7772 7803 view: 'system'
7773 7804 }, null, function (data) {
7774 7805 vm.DBtables = data.db_tables;
7775 7806 vm.ESIndices = data.es_indices;
7776 7807 vm.queueStats = data.queue_stats;
7777 7808 vm.systemLoad = data.system_load;
7778 7809 vm.packages = data.packages;
7779 7810 vm.processInfo = data.process_info;
7780 7811 vm.disks = data.disks;
7781 7812 vm.memory = data.memory;
7782 7813 vm.selfInfo = data.self_info;
7783 7814
7784 7815 vm.loading.system = false;
7785 7816 });
7786 7817 };
7787 7818
7788 7819 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7789 7820 // #
7790 7821 // # This program is free software: you can redistribute it and/or modify
7791 7822 // # it under the terms of the GNU Affero General Public License, version 3
7792 7823 // # (only), as published by the Free Software Foundation.
7793 7824 // #
7794 7825 // # This program is distributed in the hope that it will be useful,
7795 7826 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7796 7827 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7797 7828 // # GNU General Public License for more details.
7798 7829 // #
7799 7830 // # You should have received a copy of the GNU Affero General Public License
7800 7831 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7801 7832 // #
7802 7833 // # This program is dual-licensed. If you wish to learn more about the
7803 7834 // # AppEnlight Enterprise Edition, including its added features, Support
7804 7835 // # services, and proprietary license terms, please see
7805 7836 // # https://rhodecode.com/licenses/
7806 7837
7807 7838 angular.module('appenlight.components.adminUsersCreateView', [])
7808 7839 .component('adminUsersCreateView', {
7809 7840 templateUrl: 'components/views/admin-users-create-view/admin-users-create-view.html',
7810 7841 controller: AdminUsersCreateViewController
7811 7842 });
7812 7843
7813 7844 AdminUsersCreateViewController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
7814 7845
7815 7846 function AdminUsersCreateViewController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
7816 7847
7817 7848 var vm = this;
7818 7849 vm.$state = $state;
7819 7850 vm.loading = {user: false};
7820 7851
7821 7852
7822 7853 if (typeof $state.params.userId !== 'undefined') {
7823 7854 vm.loading.user = true;
7824 7855 var userId = $state.params.userId;
7825 7856 vm.user = usersResource.get({userId: userId}, function (data) {
7826 7857 vm.loading.user = false;
7827 7858 // cast to true for angular checkbox
7828 7859 if (vm.user.status === 1) {
7829 7860 vm.user.status = true;
7830 7861 }
7831 7862 });
7832 7863
7833 7864 vm.resource_permissions = usersPropertyResource.query(
7834 7865 {userId: userId, key: 'resource_permissions'}, function (data) {
7835 7866 vm.loading.resource_permissions = false;
7836 7867 var tmpObj = {
7837 7868 'user': {
7838 7869 'application': {},
7839 7870 'dashboard': {}
7840 7871 },
7841 7872 'group': {
7842 7873 'application': {},
7843 7874 'dashboard': {}
7844 7875 }
7845 7876 };
7846 7877 _.each(data, function (item) {
7847 7878
7848 7879 var section = tmpObj[item.type][item.resource_type];
7849 7880 if (typeof section[item.resource_id] == 'undefined'){
7850 7881 section[item.resource_id] = {
7851 7882 self:item,
7852 7883 permissions: []
7853 7884 }
7854 7885 }
7855 7886 section[item.resource_id].permissions.push(item.perm_name);
7856 7887
7857 7888 });
7858 7889 vm.resourcePermissions = tmpObj;
7859 7890 });
7860 7891
7861 7892 }
7862 7893 else {
7863 7894 var userId = null;
7864 7895 vm.user = {
7865 7896 status: true
7866 7897 }
7867 7898 }
7868 7899
7869 7900 var formResponse = function (response) {
7870 7901 if (response.status == 422) {
7871 7902 setServerValidation(vm.profileForm, response.data);
7872 7903 }
7873 7904 vm.loading.user = false;
7874 7905 }
7875 7906
7876 7907 vm.createUser = function () {
7877 7908 vm.loading.user = true;
7878 7909
7879 7910 if (userId) {
7880 7911 usersResource.update({userId: vm.user.id}, vm.user, function (data) {
7881 7912 setServerValidation(vm.profileForm);
7882 7913 vm.loading.user = false;
7883 7914 }, formResponse);
7884 7915 }
7885 7916 else {
7886 7917 usersResource.save(vm.user, function (data) {
7887 7918 $state.go('admin.user.update', {userId: data.id});
7888 7919 }, formResponse);
7889 7920 }
7890 7921 }
7891 7922
7892 7923 vm.generatePassword = function () {
7893 7924 var length = 8;
7894 7925 var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
7895 7926 vm.gen_pass = "";
7896 7927 for (var i = 0, n = charset.length; i < length; ++i) {
7897 7928 vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
7898 7929 }
7899 7930 vm.user.user_password = '' + vm.gen_pass;
7900 7931
7901 7932 }
7902 7933
7903 7934 vm.reloginUser = function () {
7904 7935 sectionViewResource.get({
7905 7936 section: 'admin_section', view: 'relogin_user',
7906 7937 user_id: vm.user.id
7907 7938 }, function () {
7908 7939 window.location = AeConfig.urls.baseUrl;
7909 7940 });
7910 7941
7911 7942 }
7912 7943 };
7913 7944
7914 7945 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7915 7946 // #
7916 7947 // # This program is free software: you can redistribute it and/or modify
7917 7948 // # it under the terms of the GNU Affero General Public License, version 3
7918 7949 // # (only), as published by the Free Software Foundation.
7919 7950 // #
7920 7951 // # This program is distributed in the hope that it will be useful,
7921 7952 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7922 7953 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7923 7954 // # GNU General Public License for more details.
7924 7955 // #
7925 7956 // # You should have received a copy of the GNU Affero General Public License
7926 7957 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7927 7958 // #
7928 7959 // # This program is dual-licensed. If you wish to learn more about the
7929 7960 // # AppEnlight Enterprise Edition, including its added features, Support
7930 7961 // # services, and proprietary license terms, please see
7931 7962 // # https://rhodecode.com/licenses/
7932 7963
7933 7964 angular.module('appenlight.components.adminUsersListView', [])
7934 7965 .component('adminUsersListView', {
7935 7966 templateUrl: 'components/views/admin-users-list-view/admin-users-list-view.html',
7936 7967 controller: AdminUserListViewController
7937 7968 });
7938 7969
7939 7970 AdminUserListViewController.$inject = ['usersResource'];
7940 7971
7941 7972 function AdminUserListViewController(usersResource) {
7942 7973
7943 7974 var vm = this;
7944 7975 vm.loading = {users: true};
7945 7976
7946 7977 vm.users = usersResource.query({}, function (data) {
7947 7978 vm.loading = {users: false};
7948 7979 vm.activeUsers = _.reduce(vm.users, function(memo, val){
7949 7980 if (val.status == 1){
7950 7981 return memo + 1;
7951 7982 }
7952 7983 return memo;
7953 7984 }, 0);
7954 7985
7955 7986 });
7956 7987
7957 7988
7958 7989 vm.removeUser = function (user) {
7959 7990 usersResource.remove({userId: user.id}, function (data, responseHeaders) {
7960 7991
7961 7992 if (data) {
7962 7993 var index = vm.users.indexOf(user);
7963 7994 if (index !== -1) {
7964 7995 vm.users.splice(index, 1);
7965 7996 vm.activeUsers -= 1;
7966 7997 }
7967 7998 }
7968 7999 });
7969 8000 }
7970 8001 };
7971 8002
7972 8003 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7973 8004 // #
7974 8005 // # This program is free software: you can redistribute it and/or modify
7975 8006 // # it under the terms of the GNU Affero General Public License, version 3
7976 8007 // # (only), as published by the Free Software Foundation.
7977 8008 // #
7978 8009 // # This program is distributed in the hope that it will be useful,
7979 8010 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7980 8011 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7981 8012 // # GNU General Public License for more details.
7982 8013 // #
7983 8014 // # You should have received a copy of the GNU Affero General Public License
7984 8015 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7985 8016 // #
7986 8017 // # This program is dual-licensed. If you wish to learn more about the
7987 8018 // # AppEnlight Enterprise Edition, including its added features, Support
7988 8019 // # services, and proprietary license terms, please see
7989 8020 // # https://rhodecode.com/licenses/
7990 8021
7991 8022 angular.module('appenlight.components.adminView', [])
7992 8023 .component('adminView', {
7993 8024 templateUrl: 'components/views/admin-view/admin-view.html',
7994 8025 controller: AdminViewController
7995 8026 });
7996 8027
7997 8028 AdminViewController.$inject = ['$state'];
7998 8029
7999 8030 function AdminViewController($state) {
8000 8031 this.$state = $state;
8001 8032 console.info('AdminViewController');
8002 8033 }
8003 8034
8004 8035 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8005 8036 // #
8006 8037 // # This program is free software: you can redistribute it and/or modify
8007 8038 // # it under the terms of the GNU Affero General Public License, version 3
8008 8039 // # (only), as published by the Free Software Foundation.
8009 8040 // #
8010 8041 // # This program is distributed in the hope that it will be useful,
8011 8042 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8012 8043 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8013 8044 // # GNU General Public License for more details.
8014 8045 // #
8015 8046 // # You should have received a copy of the GNU Affero General Public License
8016 8047 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8017 8048 // #
8018 8049 // # This program is dual-licensed. If you wish to learn more about the
8019 8050 // # AppEnlight Enterprise Edition, including its added features, Support
8020 8051 // # services, and proprietary license terms, please see
8021 8052 // # https://rhodecode.com/licenses/
8022 8053
8023 8054 angular.module('appenlight.components.integrationsListView', [])
8024 8055 .component('integrationsListView', {
8025 8056 templateUrl: 'components/views/applications-integrations-view/applications-integrations-view.html',
8026 8057 controller: IntegrationsListViewController
8027 8058 });
8028 8059
8029 8060 IntegrationsListViewController.$inject = ['$state', 'applicationsResource'];
8030 8061
8031 8062 function IntegrationsListViewController($state, applicationsResource) {
8032 8063
8033 8064 var vm = this;
8034 8065 vm.loading = {application: true};
8035 8066 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
8036 8067 vm.loading.application = false;
8037 8068 $state.current.data.resource = vm.resource;
8038 8069 });
8039 8070 }
8040 8071
8041 8072 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8042 8073 // #
8043 8074 // # This program is free software: you can redistribute it and/or modify
8044 8075 // # it under the terms of the GNU Affero General Public License, version 3
8045 8076 // # (only), as published by the Free Software Foundation.
8046 8077 // #
8047 8078 // # This program is distributed in the hope that it will be useful,
8048 8079 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8049 8080 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8050 8081 // # GNU General Public License for more details.
8051 8082 // #
8052 8083 // # You should have received a copy of the GNU Affero General Public License
8053 8084 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8054 8085 // #
8055 8086 // # This program is dual-licensed. If you wish to learn more about the
8056 8087 // # AppEnlight Enterprise Edition, including its added features, Support
8057 8088 // # services, and proprietary license terms, please see
8058 8089 // # https://rhodecode.com/licenses/
8059 8090
8060 8091 angular.module('appenlight.components.applicationsListView', [])
8061 8092 .component('applicationsListView', {
8062 8093 templateUrl: 'components/views/applications-list-view/applications-list-view.html',
8063 8094 controller: ApplicationsListViewController
8064 8095 });
8065 8096
8066 8097 ApplicationsListViewController.$inject = ['$state', 'applicationsResource'];
8067 8098
8068 8099 function ApplicationsListViewController($state, applicationsResource) {
8069 8100
8070 8101 var vm = this;
8071 8102 vm.$state = $state;
8072 8103 vm.loading = {applications: true};
8073 8104 vm.applications = applicationsResource.query(null, function(){
8074 8105 vm.loading.applications = false;
8075 8106 });
8076 8107 }
8077 8108
8078 8109 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8079 8110 // #
8080 8111 // # This program is free software: you can redistribute it and/or modify
8081 8112 // # it under the terms of the GNU Affero General Public License, version 3
8082 8113 // # (only), as published by the Free Software Foundation.
8083 8114 // #
8084 8115 // # This program is distributed in the hope that it will be useful,
8085 8116 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8086 8117 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8087 8118 // # GNU General Public License for more details.
8088 8119 // #
8089 8120 // # You should have received a copy of the GNU Affero General Public License
8090 8121 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8091 8122 // #
8092 8123 // # This program is dual-licensed. If you wish to learn more about the
8093 8124 // # AppEnlight Enterprise Edition, including its added features, Support
8094 8125 // # services, and proprietary license terms, please see
8095 8126 // # https://rhodecode.com/licenses/
8096 8127
8097 8128 angular.module('appenlight.components.applicationsPurgeLogsView', [])
8098 8129 .component('applicationsPurgeLogsView', {
8099 8130 templateUrl: 'components/views/applications-purge-logs-view/applications-purge-logs-view.html',
8100 8131 controller: applicationsPurgeLogsViewController
8101 8132 });
8102 8133
8103 8134 applicationsPurgeLogsViewController.$inject = ['$state' ,'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
8104 8135
8105 8136 function applicationsPurgeLogsViewController($state, applicationsResource, sectionViewResource, logsNoIdResource) {
8106 8137
8107 8138 var vm = this;
8108 8139 vm.$state = $state;
8109 8140 vm.loading = {applications: true};
8110 8141
8111 8142 vm.namespace = null;
8112 8143 vm.selectedResource = null;
8113 8144 vm.commonNamespaces = [];
8114 8145
8115 8146 vm.applications = applicationsResource.query({'type':'update_reports'}, function () {
8116 8147 vm.loading.applications = false;
8117 8148 vm.selectedResource = vm.applications[0].resource_id;
8118 8149 vm.getCommonKeys();
8119 8150 });
8120 8151
8121 8152 /**
8122 8153 * Fetches most commonly used tags in logs
8123 8154 */
8124 8155 vm.getCommonKeys = function () {
8125 8156 sectionViewResource.get({
8126 8157 section: 'logs_section',
8127 8158 view: 'common_tags',
8128 8159 resource: vm.selectedResource
8129 8160 }, function (data) {
8130 8161 vm.commonNamespaces = data['namespaces']
8131 8162 });
8132 8163 };
8133 8164
8134 8165 vm.purgeLogs = function () {
8135 8166 vm.loading.applications = true;
8136 8167 logsNoIdResource.delete({resource:vm.selectedResource,
8137 8168 namespace: vm.namespace}, function(){
8138 8169 vm.loading.applications = false;
8139 8170 });
8140 8171 }
8141 8172 }
8142 8173
8143 8174 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8144 8175 // #
8145 8176 // # This program is free software: you can redistribute it and/or modify
8146 8177 // # it under the terms of the GNU Affero General Public License, version 3
8147 8178 // # (only), as published by the Free Software Foundation.
8148 8179 // #
8149 8180 // # This program is distributed in the hope that it will be useful,
8150 8181 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8151 8182 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8152 8183 // # GNU General Public License for more details.
8153 8184 // #
8154 8185 // # You should have received a copy of the GNU Affero General Public License
8155 8186 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8156 8187 // #
8157 8188 // # This program is dual-licensed. If you wish to learn more about the
8158 8189 // # AppEnlight Enterprise Edition, including its added features, Support
8159 8190 // # services, and proprietary license terms, please see
8160 8191 // # https://rhodecode.com/licenses/
8161 8192
8162 8193 angular.module('appenlight.components.applicationsUpdateView', [])
8163 8194 .component('applicationsUpdateView', {
8164 8195 templateUrl: 'components/views/applications-update-view/applications-update-view.html',
8165 8196 controller: applicationsUpdateViewController
8166 8197 });
8167 8198
8168 8199 applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder', 'AeConfig'];
8169 8200
8170 8201 function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder, AeConfig) {
8171 8202 'use strict';
8172 8203
8173 8204 var vm = this;
8174 8205 vm.AeConfig = AeConfig;
8175 8206 vm.$state = $state;
8176 8207 vm.loading = {application: false};
8177 8208
8178 8209 vm.groupingOptions = [
8179 8210 ['url_type', 'Error Type + location'],
8180 8211 ['url_traceback', 'Traceback + location'],
8181 8212 ['traceback_server', 'Traceback + Server'],
8182 8213 ];
8183 8214 var resourceId = $state.params.resourceId;
8184 8215 var options = {};
8185 8216 vm.momentJs = moment;
8186 8217 vm.formTransferModel = {password:''};
8187 8218
8188 8219 // set initial data
8189 8220
8190 8221 if (resourceId === 'new') {
8191 8222 vm.resource = {
8192 8223 resource_id: null,
8193 8224 slow_report_threshold: 10,
8194 8225 error_report_threshold: 10,
8195 8226 allow_permanent_storage: true,
8196 8227 default_grouping: vm.groupingOptions[1][0]
8197 8228 };
8198 8229 }
8199 8230 else {
8200 8231 vm.loading.application = true;
8201 8232 vm.resource = applicationsResource.get({
8202 8233 'resourceId': resourceId
8203 8234 }, function (data) {
8204 8235 vm.loading.application = false;
8205 8236 });
8206 8237 }
8207 8238
8208 8239
8209 8240 vm.updateBasicForm = function () {
8210 8241 vm.loading.application = true;
8211 8242 if (vm.resource.resource_id === null) {
8212 8243 applicationsNoIdResource.save(null, vm.resource, function (data) {
8213 8244 stateHolder.AeUser.addApplication(data);
8214 8245 $state.go('applications.update', {resourceId: data.resource_id});
8215 8246 setServerValidation(vm.BasicForm);
8216 8247 }, function (response) {
8217 8248 if (response.status == 422) {
8218 8249 setServerValidation(vm.BasicForm, response.data);
8219 8250 }
8220 8251 vm.loading.application = false;
8221 8252
8222 8253 });
8223 8254 }
8224 8255 else {
8225 8256 applicationsResource.update({resourceId: vm.resource.resource_id},
8226 8257 vm.resource, function (data) {
8227 8258 vm.resource = data;
8228 8259 vm.loading.application = false;
8229 8260 setServerValidation(vm.BasicForm);
8230 8261 }, function (response) {
8231 8262 if (response.status == 422) {
8232 8263 setServerValidation(vm.BasicForm, response.data);
8233 8264 }
8234 8265 vm.loading.application = false;
8235 8266 });
8236 8267 }
8237 8268 };
8238 8269
8239 8270 vm.addRule = function () {
8240 8271
8241 8272 applicationsPropertyResource.save({
8242 8273 resourceId: vm.resource.resource_id,
8243 8274 key: 'postprocessing_rules'
8244 8275 }, null,
8245 8276 function (data) {
8246 8277 vm.resource.postprocessing_rules.push(data);
8247 8278 }
8248 8279 );
8249 8280 };
8250 8281
8251 8282 vm.regenerateAPIKeys = function(){
8252 8283 vm.loading.application = true;
8253 8284 applicationsPropertyResource.save({
8254 8285 resourceId: vm.resource.resource_id,
8255 8286 key: 'api_key'
8256 8287 }, {password: vm.regenerateAPIKeysPassword},
8257 8288 function (data) {
8258 8289 vm.resource = data;
8259 8290 vm.loading.application = false;
8260 8291 vm.regenerateAPIKeysPassword = '';
8261 8292 setServerValidation(vm.regenerateAPIKeysForm);
8262 8293 },
8263 8294 function (response) {
8264 8295 if (response.status == 422) {
8265 8296 setServerValidation(vm.regenerateAPIKeysForm, response.data);
8266 8297
8267 8298 }
8268 8299 vm.loading.application = false;
8269 8300 }
8270 8301 )
8271 8302 };
8272 8303
8273 8304 vm.deleteApplication = function(){
8274 8305 vm.loading.application = true;
8275 8306 applicationsPropertyResource.update({
8276 8307 resourceId: vm.resource.resource_id,
8277 8308 key: 'delete_resource'
8278 8309 }, vm.formDeleteModel,
8279 8310 function (data) {
8280 8311 stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
8281 8312 $state.go('applications.list');
8282 8313 },
8283 8314 function (response) {
8284 8315 if (response.status == 422) {
8285 8316 setServerValidation(vm.formDelete, response.data);
8286 8317
8287 8318 }
8288 8319 vm.loading.application = false;
8289 8320 }
8290 8321 );
8291 8322 };
8292 8323
8293 8324 vm.transferApplication = function(){
8294 8325 vm.loading.application = true;
8295 8326 applicationsPropertyResource.update({
8296 8327 resourceId: vm.resource.resource_id,
8297 8328 key: 'owner'
8298 8329 }, vm.formTransferModel,
8299 8330 function (data) {
8300 8331 $state.go('applications.list');
8301 8332 },
8302 8333 function (response) {
8303 8334 if (response.status == 422) {
8304 8335 setServerValidation(vm.formTransfer, response.data);
8305 8336
8306 8337 }
8307 8338 vm.loading.application = false;
8308 8339 }
8309 8340 )
8310 8341 }
8311 8342
8312 8343 }
8313 8344
8314 8345 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8315 8346 // #
8316 8347 // # This program is free software: you can redistribute it and/or modify
8317 8348 // # it under the terms of the GNU Affero General Public License, version 3
8318 8349 // # (only), as published by the Free Software Foundation.
8319 8350 // #
8320 8351 // # This program is distributed in the hope that it will be useful,
8321 8352 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8322 8353 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8323 8354 // # GNU General Public License for more details.
8324 8355 // #
8325 8356 // # You should have received a copy of the GNU Affero General Public License
8326 8357 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8327 8358 // #
8328 8359 // # This program is dual-licensed. If you wish to learn more about the
8329 8360 // # AppEnlight Enterprise Edition, including its added features, Support
8330 8361 // # services, and proprietary license terms, please see
8331 8362 // # https://rhodecode.com/licenses/
8332 8363
8333 8364 angular.module('appenlight.components.eventBrowserView', [])
8334 8365 .component('eventBrowserView', {
8335 8366 templateUrl: 'components/views/event-browser/event-browser.html',
8336 8367 controller: EventBrowserController
8337 8368 });
8338 8369
8339 8370 EventBrowserController.$inject = ['eventsNoIdResource', 'eventsResource'];
8340 8371
8341 8372 function EventBrowserController(eventsNoIdResource, eventsResource) {
8342 8373 console.info('EventBrowserController');
8343 8374 var vm = this;
8344 8375
8345 8376 vm.loading = {events: true};
8346 8377
8347 8378 vm.events = eventsNoIdResource.query(
8348 8379 {key: 'events'},
8349 8380 function (data) {
8350 8381 vm.loading.events = false;
8351 8382 });
8352 8383
8353 8384
8354 8385 vm.closeEvent = function (event) {
8355 8386
8356 8387 eventsResource.update({eventId: event.id}, {status: 0}, function (data) {
8357 8388 event.status = 0;
8358 8389 });
8359 8390 }
8360 8391
8361 8392 }
8362 8393
8363 8394 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8364 8395 // #
8365 8396 // # This program is free software: you can redistribute it and/or modify
8366 8397 // # it under the terms of the GNU Affero General Public License, version 3
8367 8398 // # (only), as published by the Free Software Foundation.
8368 8399 // #
8369 8400 // # This program is distributed in the hope that it will be useful,
8370 8401 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8371 8402 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8372 8403 // # GNU General Public License for more details.
8373 8404 // #
8374 8405 // # You should have received a copy of the GNU Affero General Public License
8375 8406 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8376 8407 // #
8377 8408 // # This program is dual-licensed. If you wish to learn more about the
8378 8409 // # AppEnlight Enterprise Edition, including its added features, Support
8379 8410 // # services, and proprietary license terms, please see
8380 8411 // # https://rhodecode.com/licenses/
8381 8412
8382 8413 angular.module('appenlight.components.indexDashboardView', [])
8383 8414 .component('indexDashboardView', {
8384 8415 templateUrl: 'components/views/index-dashboard/index-dashboard.html',
8385 8416 controller: IndexDashboardController
8386 8417 });
8387 8418
8388 8419 IndexDashboardController.$inject = ['$rootScope', '$scope', '$location','$cookies', '$interval', 'stateHolder', 'applicationsPropertyResource', 'AeConfig'];
8389 8420
8390 8421 function IndexDashboardController($rootScope, $scope, $location, $cookies, $interval, stateHolder, applicationsPropertyResource, AeConfig) {
8391 8422 var vm = this;
8392 8423 stateHolder.section = 'dashboard';
8393 8424 vm.timeOptions = {};
8394 8425 var allowed = ['1h', '4h', '12h', '24h', '1w', '2w', '1M'];
8395 8426 _.each(allowed, function (key) {
8396 8427 if (allowed.indexOf(key) !== -1) {
8397 8428 vm.timeOptions[key] = AeConfig.timeOptions[key];
8398 8429 }
8399 8430 });
8400 8431 vm.stateHolder = stateHolder;
8401 8432 vm.urls = AeConfig.urls;
8402 8433 vm.applications = stateHolder.AeUser.applications_map;
8403 8434 vm.show_dashboard = false;
8404 8435 vm.resource = null;
8405 8436 vm.graphType = {selected: null};
8406 8437 vm.timeSpan = vm.timeOptions['1h'];
8407 8438 vm.trendingReports = [];
8408 8439 vm.exceptions = 0;
8409 8440 vm.satisfyingRequests = 0;
8410 8441 vm.toleratedRequests = 0;
8411 8442 vm.frustratingRequests = 0;
8412 8443 vm.uptimeStats = 0;
8413 8444 vm.apdexStats = [];
8414 8445 vm.seriesRequestsData = [];
8415 8446 vm.seriesMetricsData = [];
8416 8447 vm.seriesSlowData = [];
8417 8448 vm.slowCalls = [];
8418 8449 vm.slowURIS = [];
8419 8450
8420 8451 vm.reportChartConfig = {
8421 8452 data: {
8422 8453 json: [],
8423 8454 xFormat: '%Y-%m-%dT%H:%M:%S'
8424 8455 },
8425 8456 color: {
8426 8457 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8427 8458 },
8428 8459 axis: {
8429 8460 x: {
8430 8461 type: 'timeseries',
8431 8462 tick: {
8432 8463 culling: {
8433 8464 max: 6 // the number of tick texts will be adjusted to less than this value
8434 8465 },
8435 8466 format: '%Y-%m-%d %H:%M'
8436 8467 }
8437 8468 },
8438 8469 y: {
8439 8470 tick: {
8440 8471 count: 5,
8441 8472 format: d3.format('.2s')
8442 8473 }
8443 8474 }
8444 8475 },
8445 8476 subchart: {
8446 8477 show: true,
8447 8478 size: {
8448 8479 height: 20
8449 8480 }
8450 8481 },
8451 8482 size: {
8452 8483 height: 250
8453 8484 },
8454 8485 zoom: {
8455 8486 rescale: true
8456 8487 },
8457 8488 grid: {
8458 8489 x: {
8459 8490 show: true
8460 8491 },
8461 8492 y: {
8462 8493 show: true
8463 8494 }
8464 8495 },
8465 8496 tooltip: {
8466 8497 format: {
8467 8498 title: function (d) {
8468 8499 return '' + d;
8469 8500 },
8470 8501 value: function (v) {
8471 8502 return v
8472 8503 }
8473 8504 }
8474 8505 }
8475 8506 };
8476 8507 vm.reportChartData = {};
8477 8508
8478 8509 vm.reportSlowChartConfig = {
8479 8510 data: {
8480 8511 json: [],
8481 8512 xFormat: '%Y-%m-%dT%H:%M:%S'
8482 8513 },
8483 8514 color: {
8484 8515 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8485 8516 },
8486 8517 axis: {
8487 8518 x: {
8488 8519 type: 'timeseries',
8489 8520 tick: {
8490 8521 culling: {
8491 8522 max: 6 // the number of tick texts will be adjusted to less than this value
8492 8523 },
8493 8524 format: '%Y-%m-%d %H:%M'
8494 8525 }
8495 8526 },
8496 8527 y: {
8497 8528 tick: {
8498 8529 count: 5,
8499 8530 format: d3.format('.2s')
8500 8531 }
8501 8532 }
8502 8533 },
8503 8534 subchart: {
8504 8535 show: true,
8505 8536 size: {
8506 8537 height: 20
8507 8538 }
8508 8539 },
8509 8540 size: {
8510 8541 height: 250
8511 8542 },
8512 8543 zoom: {
8513 8544 rescale: true
8514 8545 },
8515 8546 grid: {
8516 8547 x: {
8517 8548 show: true
8518 8549 },
8519 8550 y: {
8520 8551 show: true
8521 8552 }
8522 8553 },
8523 8554 tooltip: {
8524 8555 format: {
8525 8556 title: function (d) {
8526 8557 return '' + d;
8527 8558 },
8528 8559 value: function (v) {
8529 8560 return v
8530 8561 }
8531 8562 }
8532 8563 }
8533 8564 };
8534 8565 vm.reportSlowChartData = {};
8535 8566
8536 8567 vm.metricsChartConfig = {
8537 8568 data: {
8538 8569 json: [],
8539 8570 xFormat: '%Y-%m-%dT%H:%M:%S',
8540 8571 keys: {
8541 8572 x: 'x',
8542 8573 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
8543 8574 },
8544 8575 names: {
8545 8576 main: 'View/Application logic',
8546 8577 sql: 'Relational database queries',
8547 8578 nosql: 'NoSql datastore calls',
8548 8579 tmpl: 'Template rendering',
8549 8580 custom: 'Custom timed calls',
8550 8581 remote: 'Requests to remote resources'
8551 8582 },
8552 8583 type: 'area',
8553 8584 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
8554 8585 order: null
8555 8586 },
8556 8587 color: {
8557 8588 pattern: ['#6baed6', '#c7e9c0', '#fd8d3c', '#d6616b', '#ffcc00', '#c6dbef']
8558 8589 },
8559 8590 axis: {
8560 8591 x: {
8561 8592 type: 'timeseries',
8562 8593 tick: {
8563 8594 culling: {
8564 8595 max: 6 // the number of tick texts will be adjusted to less than this value
8565 8596 },
8566 8597 format: '%Y-%m-%d %H:%M'
8567 8598 }
8568 8599 },
8569 8600 y: {
8570 8601 tick: {
8571 8602 count: 5,
8572 8603 format: d3.format('.2f')
8573 8604 }
8574 8605 }
8575 8606 },
8576 8607 point: {
8577 8608 show: false
8578 8609 },
8579 8610 subchart: {
8580 8611 show: true,
8581 8612 size: {
8582 8613 height: 20
8583 8614 }
8584 8615 },
8585 8616 size: {
8586 8617 height: 350
8587 8618 },
8588 8619 zoom: {
8589 8620 rescale: true
8590 8621 },
8591 8622 grid: {
8592 8623 x: {
8593 8624 show: true
8594 8625 },
8595 8626 y: {
8596 8627 show: true
8597 8628 }
8598 8629 },
8599 8630 tooltip: {
8600 8631 format: {
8601 8632 title: function (d) {
8602 8633 return '' + d;
8603 8634 },
8604 8635 value: function (v) {
8605 8636 return v
8606 8637 }
8607 8638 }
8608 8639 }
8609 8640 };
8610 8641 vm.metricsChartData = {};
8611 8642
8612 8643 vm.responseChartConfig = {
8613 8644 data: {
8614 8645 json: [],
8615 8646 xFormat: '%Y-%m-%dT%H:%M:%S'
8616 8647 },
8617 8648 color: {
8618 8649 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8619 8650 },
8620 8651 axis: {
8621 8652 x: {
8622 8653 type: 'timeseries',
8623 8654 tick: {
8624 8655 culling: {
8625 8656 max: 6 // the number of tick texts will be adjusted to less than this value
8626 8657 },
8627 8658 format: '%Y-%m-%d %H:%M'
8628 8659 }
8629 8660 },
8630 8661 y: {
8631 8662 tick: {
8632 8663 count: 5,
8633 8664 format: d3.format('.2f')
8634 8665 }
8635 8666 }
8636 8667 },
8637 8668 point: {
8638 8669 show: false
8639 8670 },
8640 8671 subchart: {
8641 8672 show: true,
8642 8673 size: {
8643 8674 height: 20
8644 8675 }
8645 8676 },
8646 8677 size: {
8647 8678 height: 350
8648 8679 },
8649 8680 zoom: {
8650 8681 rescale: true
8651 8682 },
8652 8683 grid: {
8653 8684 x: {
8654 8685 show: true
8655 8686 },
8656 8687 y: {
8657 8688 show: true
8658 8689 }
8659 8690 },
8660 8691 tooltip: {
8661 8692 format: {
8662 8693 title: function (d) {
8663 8694 return '' + d;
8664 8695 },
8665 8696 value: function (v) {
8666 8697 return v
8667 8698 }
8668 8699 }
8669 8700 }
8670 8701 };
8671 8702 vm.responseChartData = {};
8672 8703
8673 8704 vm.requestsChartConfig = {
8674 8705 data: {
8675 8706 json: [],
8676 8707 xFormat: '%Y-%m-%dT%H:%M:%S'
8677 8708 },
8678 8709 color: {
8679 8710 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8680 8711 },
8681 8712 axis: {
8682 8713 x: {
8683 8714 type: 'timeseries',
8684 8715 tick: {
8685 8716 culling: {
8686 8717 max: 6 // the number of tick texts will be adjusted to less than this value
8687 8718 },
8688 8719 format: '%Y-%m-%d %H:%M'
8689 8720 }
8690 8721 },
8691 8722 y: {
8692 8723 tick: {
8693 8724 count: 5,
8694 8725 format: d3.format('.2f')
8695 8726 }
8696 8727 }
8697 8728 },
8698 8729 point: {
8699 8730 show: false
8700 8731 },
8701 8732 subchart: {
8702 8733 show: true,
8703 8734 size: {
8704 8735 height: 20
8705 8736 }
8706 8737 },
8707 8738 size: {
8708 8739 height: 350
8709 8740 },
8710 8741 zoom: {
8711 8742 rescale: true
8712 8743 },
8713 8744 grid: {
8714 8745 x: {
8715 8746 show: true
8716 8747 },
8717 8748 y: {
8718 8749 show: true
8719 8750 }
8720 8751 },
8721 8752 tooltip: {
8722 8753 format: {
8723 8754 title: function (d) {
8724 8755 return '' + d;
8725 8756 },
8726 8757 value: function (v) {
8727 8758 return v
8728 8759 }
8729 8760 }
8730 8761 }
8731 8762 };
8732 8763 vm.requestsChartData = {};
8733 8764
8734 8765 vm.loading = {
8735 8766 'apdex': true,
8736 8767 'reports': true,
8737 8768 'graphs': true,
8738 8769 'slowCalls': true,
8739 8770 'slowURIS': true,
8740 8771 'requestsBreakdown': true,
8741 8772 'series': true
8742 8773 };
8743 8774 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
8744 8775
8745 8776 $rootScope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
8746 8777 var ws_report = message.message.report;
8747 8778 if (ws_report.http_status != 500) {
8748 8779 return
8749 8780 }
8750 8781 if (vm.stream.paused == true) {
8751 8782 return
8752 8783 }
8753 8784 if (vm.stream.filtered && ws_report.resource_id != vm.resource) {
8754 8785 return
8755 8786 }
8756 8787 var should_insert = true;
8757 8788 _.each(vm.stream.reports, function (report) {
8758 8789 if (report.report_id == ws_report.report_id) {
8759 8790 report.occurences = ws_report.occurences;
8760 8791 should_insert = false;
8761 8792 }
8762 8793 });
8763 8794 if (should_insert) {
8764 8795 if (vm.stream.reports.length > 7) {
8765 8796 vm.stream.reports.pop();
8766 8797 }
8767 8798 vm.stream.reports.unshift(ws_report);
8768 8799 }
8769 8800 });
8770 8801
8771 8802 vm.determineStartState = function () {
8772 8803 if (stateHolder.AeUser.applications.length) {
8773 8804 vm.resource = Number($location.search().resource);
8774 8805
8775 8806 if (!vm.resource){
8776 8807 var cookieResource = $cookies.getObject('resource');
8777 8808
8778 8809
8779 8810 if (cookieResource) {
8780 8811 vm.resource = cookieResource;
8781 8812 }
8782 8813 else{
8783 8814 vm.resource = stateHolder.AeUser.applications[0].resource_id;
8784 8815 }
8785 8816 }
8786 8817 }
8787 8818
8788 8819 var timespan = $location.search().timespan;
8789 8820
8790 8821 if(_.has(vm.timeOptions, timespan)){
8791 8822 vm.timeSpan = vm.timeOptions[timespan];
8792 8823 }
8793 8824 else{
8794 8825 vm.timeSpan = vm.timeOptions['1h'];
8795 8826 }
8796 8827
8797 8828 var graphType = $location.search().graphtype;
8798 8829 if(!graphType){
8799 8830 vm.graphType = {selected: 'metrics_graphs'};
8800 8831 }
8801 8832 else{
8802 8833 vm.graphType = {selected: graphType};
8803 8834 }
8804 8835 vm.updateSearchParams();
8805 8836 };
8806 8837
8807 8838 vm.updateSearchParams = function () {
8808 8839 $location.search('resource', vm.resource);
8809 8840 $location.search('timespan', vm.timeSpan.key);
8810 8841 $location.search('graphtype', vm.graphType.selected);
8811 8842 stateHolder.resource = vm.resource;
8812 8843
8813 8844 if (vm.resource){
8814 8845 $cookies.putObject('resource', vm.resource,
8815 8846 {expires:new Date(3000, 1, 1)});
8816 8847 }
8817 8848 vm.refreshData();
8818 8849 };
8819 8850
8820 8851 vm.refreshData = function () {
8821 8852 vm.fetchApdexStats();
8822 8853 vm.fetchTrendingReports();
8823 8854 vm.fetchMetrics();
8824 8855 vm.fetchRequestsBreakdown();
8825 8856 vm.fetchSlowCalls();
8826 8857 };
8827 8858
8828 8859 vm.changedTimeSpan = function(){
8829 8860 vm.startDateFilter = timeSpanToStartDate(vm.timeSpan.key);
8830 8861 vm.refreshData();
8831 8862 };
8832 8863
8833 8864 vm.intervalId = $interval(function () {
8834 8865 if (_.contains(['30m', "1h"], vm.timeSpan.key)) {
8835 8866 // don't do anything if window is unfocused
8836 8867 if(document.hidden === true){
8837 8868 return ;
8838 8869 }
8839 8870 vm.refreshData();
8840 8871 }
8841 8872 }, 60000);
8842 8873
8843 8874 vm.fetchApdexStats = function () {
8844 8875 vm.loading.apdex = true;
8845 8876 vm.apdexStats = applicationsPropertyResource.query({
8846 8877 'key': 'apdex_stats',
8847 8878 'resourceId': vm.resource,
8848 8879 "start_date": timeSpanToStartDate(vm.timeSpan.key)
8849 8880 },
8850 8881 function (data) {
8851 8882 vm.loading.apdex = false;
8852 8883
8853 8884 vm.exceptions = _.reduce(data, function (memo, row) {
8854 8885 return memo + row.errors;
8855 8886 }, 0);
8856 8887 vm.satisfyingRequests = _.reduce(data, function (memo, row) {
8857 8888 return memo + row.satisfying_requests;
8858 8889 }, 0);
8859 8890 vm.toleratedRequests = _.reduce(data, function (memo, row) {
8860 8891 return memo + row.tolerated_requests;
8861 8892 }, 0);
8862 8893 vm.frustratingRequests = _.reduce(data, function (memo, row) {
8863 8894 return memo + row.frustrating_requests;
8864 8895 }, 0);
8865 8896 if (data.length) {
8866 8897 vm.uptimeStats = data[0].uptime;
8867 8898 }
8868 8899
8869 8900 },
8870 8901 function () {
8871 8902 vm.loading.apdex = false;
8872 8903 }
8873 8904 );
8874 8905 }
8875 8906
8876 8907 vm.fetchMetrics = function () {
8877 8908 vm.loading.series = true;
8878 8909 applicationsPropertyResource.query({
8879 8910 'resourceId': vm.resource,
8880 8911 'key': vm.graphType.selected,
8881 8912 "start_date": timeSpanToStartDate(vm.timeSpan.key)
8882 8913 }, function (data) {
8883 8914 if (vm.graphType.selected == 'metrics_graphs') {
8884 8915 vm.metricsChartData = {
8885 8916 json: data,
8886 8917 xFormat: '%Y-%m-%dT%H:%M:%S',
8887 8918 keys: {
8888 8919 x: 'x',
8889 8920 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
8890 8921 },
8891 8922 names: {
8892 8923 main: 'View/Application logic',
8893 8924 sql: 'Relational database queries',
8894 8925 nosql: 'NoSql datastore calls',
8895 8926 tmpl: 'Template rendering',
8896 8927 custom: 'Custom timed calls',
8897 8928 remote: 'Requests to remote resources'
8898 8929 },
8899 8930 type: 'area',
8900 8931 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
8901 8932 order: null
8902 8933 };
8903 8934 }
8904 8935 else if (vm.graphType.selected == 'report_graphs') {
8905 8936 vm.reportChartData = {
8906 8937 json: data,
8907 8938 xFormat: '%Y-%m-%dT%H:%M:%S',
8908 8939 keys: {
8909 8940 x: 'x',
8910 8941 value: ["not_found", "report"]
8911 8942 },
8912 8943 names: {
8913 8944 report: 'Errors',
8914 8945 not_found: '404\'s requests'
8915 8946 },
8916 8947 type: 'bar'
8917 8948 };
8918 8949 }
8919 8950 else if (vm.graphType.selected == 'slow_report_graphs') {
8920 8951 vm.reportSlowChartData = {
8921 8952 json: data,
8922 8953 xFormat: '%Y-%m-%dT%H:%M:%S',
8923 8954 keys: {
8924 8955 x: 'x',
8925 8956 value: ["slow_report"]
8926 8957 },
8927 8958 names: {
8928 8959 slow_report: 'Slow reports'
8929 8960 },
8930 8961 type: 'bar'
8931 8962 };
8932 8963 }
8933 8964 else if (vm.graphType.selected == 'response_graphs') {
8934 8965 vm.responseChartData = {
8935 8966 json: data,
8936 8967 xFormat: '%Y-%m-%dT%H:%M:%S',
8937 8968 keys: {
8938 8969 x: 'x',
8939 8970 value: ["today", "days_ago_2", "days_ago_7"]
8940 8971 },
8941 8972 names: {
8942 8973 today: 'Today',
8943 8974 "days_ago_2": '2 days ago',
8944 8975 "days_ago_7": '7 days ago'
8945 8976 }
8946 8977 };
8947 8978 }
8948 8979 else if (vm.graphType.selected == 'requests_graphs') {
8949 8980 vm.requestsChartData = {
8950 8981 json: data,
8951 8982 xFormat: '%Y-%m-%dT%H:%M:%S',
8952 8983 keys: {
8953 8984 x: 'x',
8954 8985 value: ["requests"]
8955 8986 },
8956 8987 names: {
8957 8988 requests: 'Requests/s'
8958 8989 }
8959 8990 };
8960 8991 }
8961 8992 vm.loading.series = false;
8962 8993 }, function(){
8963 8994 vm.loading.series = false;
8964 8995 });
8965 8996 }
8966 8997
8967 8998 vm.fetchSlowCalls = function () {
8968 8999 vm.loading.slowCalls = true;
8969 9000 applicationsPropertyResource.query({
8970 9001 'resourceId': vm.resource,
8971 9002 "start_date": timeSpanToStartDate(vm.timeSpan.key),
8972 9003 'key': 'slow_calls'
8973 9004 }, function (data) {
8974 9005 vm.slowCalls = data;
8975 9006 vm.loading.slowCalls = false;
8976 9007 }, function () {
8977 9008 vm.loading.slowCalls = false;
8978 9009 });
8979 9010 }
8980 9011
8981 9012 vm.fetchRequestsBreakdown = function () {
8982 9013 vm.loading.requestsBreakdown = true;
8983 9014 applicationsPropertyResource.query({
8984 9015 'resourceId': vm.resource,
8985 9016 "start_date": timeSpanToStartDate(vm.timeSpan.key),
8986 9017 'key': 'requests_breakdown'
8987 9018 }, function (data) {
8988 9019 vm.requestsBreakdown = data;
8989 9020 vm.loading.requestsBreakdown = false;
8990 9021 }, function () {
8991 9022 vm.loading.requestsBreakdown = false;
8992 9023 });
8993 9024 }
8994 9025
8995 9026 vm.fetchTrendingReports = function () {
8996 9027
8997 9028 if (vm.graphType.selected == 'slow_report_graphs') {
8998 9029 var report_type = 'slow';
8999 9030 }
9000 9031 else {
9001 9032 var report_type = 'error';
9002 9033 }
9003 9034
9004 9035 vm.loading.reports = true;
9005 9036 vm.trendingReports = applicationsPropertyResource.query({
9006 9037 'key': 'trending_reports',
9007 9038 'resourceId': vm.resource,
9008 9039 "start_date": timeSpanToStartDate(vm.timeSpan.key),
9009 9040 "report_type": report_type
9010 9041 },
9011 9042 function () {
9012 9043 vm.loading.reports = false;
9013 9044 },
9014 9045 function () {
9015 9046 vm.loading.reports = false;
9016 9047 }
9017 9048 );
9018 9049 };
9019 9050
9020 9051 $scope.$on('$destroy',function(){
9021 9052 $interval.cancel(vm.intervalId);
9022 9053 });
9023 9054
9024 9055 if (stateHolder.AeUser.applications.length){
9025 9056 vm.show_dashboard = true;
9026 9057 vm.determineStartState();
9027 9058 }
9028 9059 }
9029 9060
9030 9061 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9031 9062 // #
9032 9063 // # This program is free software: you can redistribute it and/or modify
9033 9064 // # it under the terms of the GNU Affero General Public License, version 3
9034 9065 // # (only), as published by the Free Software Foundation.
9035 9066 // #
9036 9067 // # This program is distributed in the hope that it will be useful,
9037 9068 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9038 9069 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9039 9070 // # GNU General Public License for more details.
9040 9071 // #
9041 9072 // # You should have received a copy of the GNU Affero General Public License
9042 9073 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9043 9074 // #
9044 9075 // # This program is dual-licensed. If you wish to learn more about the
9045 9076 // # AppEnlight Enterprise Edition, including its added features, Support
9046 9077 // # services, and proprietary license terms, please see
9047 9078 // # https://rhodecode.com/licenses/
9048 9079
9049 9080
9050 9081 ApplicationsIntegrationsEditViewController.$inject = ['$state', 'integrationResource'];
9051 9082
9052 9083 function ApplicationsIntegrationsEditViewController($state, integrationResource) {
9053 9084
9054 9085 var vm = this;
9055 9086 vm.$state = $state;
9056 9087 vm.loading = {integration: true};
9057 9088 vm.config = integrationResource.get(
9058 9089 {
9059 9090 integration: $state.params.integration,
9060 9091 action: 'setup',
9061 9092 resourceId: $state.params.resourceId
9062 9093 }, function (data) {
9063 9094 vm.loading.integration = false;
9064 9095 });
9065 9096
9066 9097 vm.configureIntegration = function () {
9067 9098 console.info('configureIntegration');
9068 9099 vm.loading.integration = true;
9069 9100 integrationResource.save(
9070 9101 {
9071 9102 integration: $state.params.integration,
9072 9103 action: 'setup',
9073 9104 resourceId: $state.params.resourceId
9074 9105 }, vm.config, function (data) {
9075 9106 vm.loading.integration = false;
9076 9107 setServerValidation(vm.integrationForm);
9077 9108 }, function (response) {
9078 9109 if (response.status == 422) {
9079 9110 setServerValidation(vm.integrationForm, response.data);
9080 9111 }
9081 9112 vm.loading.integration = false;
9082 9113 });
9083 9114 };
9084 9115
9085 9116 vm.removeIntegration = function () {
9086 9117 console.info('removeIntegration');
9087 9118 integrationResource.remove({
9088 9119 integration: $state.params.integration,
9089 9120 resourceId: $state.params.resourceId,
9090 9121 action: 'delete'
9091 9122 },
9092 9123 function () {
9093 9124 $state.go('applications.integrations',
9094 9125 {resourceId: $state.params.resourceId});
9095 9126 }
9096 9127 );
9097 9128 }
9098 9129
9099 9130 vm.testIntegration = function (to_test) {
9100 9131 console.info('testIntegration', to_test);
9101 9132 vm.loading.integration = true;
9102 9133 integrationResource.save(
9103 9134 {
9104 9135 integration: $state.params.integration,
9105 9136 action: 'test_' + to_test,
9106 9137 resourceId: $state.params.resourceId
9107 9138 }, vm.config, function (data) {
9108 9139 vm.loading.integration = false;
9109 9140 }, function (response) {
9110 9141 vm.loading.integration = false;
9111 9142 });
9112 9143 }
9113 9144
9114 9145
9115 9146 }
9116 9147
9117 9148 ;angular.module('appenlight.components.bitbucketIntegrationConfigView', [])
9118 9149 .component('bitbucketIntegrationConfigView', {
9119 9150 templateUrl: 'components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
9120 9151 controller: ApplicationsIntegrationsEditViewController
9121 9152 });
9122 9153
9123 9154 ;angular.module('appenlight.components.campfireIntegrationConfigView', [])
9124 9155 .component('campfireIntegrationConfigView', {
9125 9156 templateUrl: 'components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
9126 9157 controller: ApplicationsIntegrationsEditViewController
9127 9158 });
9128 9159
9129 9160 ;angular.module('appenlight.components.flowdockIntegrationConfigView', [])
9130 9161 .component('flowdockIntegrationConfigView', {
9131 9162 templateUrl: 'components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
9132 9163 controller: ApplicationsIntegrationsEditViewController
9133 9164 });
9134 9165
9135 9166 ;angular.module('appenlight.components.githubIntegrationConfigView', [])
9136 9167 .component('githubIntegrationConfigView', {
9137 9168 templateUrl: 'components/views/integrations/github-integration-config-view/github-integration-config-view.html',
9138 9169 controller: ApplicationsIntegrationsEditViewController
9139 9170 });
9140 9171
9141 9172 ;angular.module('appenlight.components.hipchatIntegrationConfigView', [])
9142 9173 .component('hipchatIntegrationConfigView', {
9143 9174 templateUrl: 'components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
9144 9175 controller: ApplicationsIntegrationsEditViewController
9145 9176 });
9146 9177
9147 9178 ;angular.module('appenlight.components.jiraIntegrationConfigView', [])
9148 9179 .component('jiraIntegrationConfigView', {
9149 9180 templateUrl: 'components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
9150 9181 controller: ApplicationsIntegrationsEditViewController
9151 9182 });
9152 9183
9153 9184 ;angular.module('appenlight.components.slackIntegrationConfigView', [])
9154 9185 .component('slackIntegrationConfigView', {
9155 9186 templateUrl: 'components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
9156 9187 controller: ApplicationsIntegrationsEditViewController
9157 9188 });
9158 9189
9159 9190 ;angular.module('appenlight.components.webhooksIntegrationConfigView', [])
9160 9191 .component('webhooksIntegrationConfigView', {
9161 9192 templateUrl: 'components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
9162 9193 controller: ApplicationsIntegrationsEditViewController
9163 9194 });
9164 9195
9165 9196 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9166 9197 // #
9167 9198 // # This program is free software: you can redistribute it and/or modify
9168 9199 // # it under the terms of the GNU Affero General Public License, version 3
9169 9200 // # (only), as published by the Free Software Foundation.
9170 9201 // #
9171 9202 // # This program is distributed in the hope that it will be useful,
9172 9203 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9173 9204 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9174 9205 // # GNU General Public License for more details.
9175 9206 // #
9176 9207 // # You should have received a copy of the GNU Affero General Public License
9177 9208 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9178 9209 // #
9179 9210 // # This program is dual-licensed. If you wish to learn more about the
9180 9211 // # AppEnlight Enterprise Edition, including its added features, Support
9181 9212 // # services, and proprietary license terms, please see
9182 9213 // # https://rhodecode.com/licenses/
9183 9214
9184 9215 angular.module('appenlight.components.logsBrowserView', [])
9185 9216 .component('logsBrowserView', {
9186 9217 templateUrl: 'components/views/logs-browser/logs-browser.html',
9187 9218 controller: LogsBrowserController
9188 9219 });
9189 9220
9190 9221 LogsBrowserController.$inject = ['$location', 'stateHolder', 'typeAheadTagHelper', 'logsNoIdResource', 'sectionViewResource'];
9191 9222
9192 9223 function LogsBrowserController($location, stateHolder, typeAheadTagHelper, logsNoIdResource, sectionViewResource) {
9193 9224 var vm = this;
9194 9225 vm.logEventsChartConfig = {
9195 9226 data: {
9196 9227 json: [],
9197 9228 xFormat: '%Y-%m-%dT%H:%M:%S'
9198 9229 },
9199 9230 color: {
9200 9231 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9201 9232 },
9202 9233 axis: {
9203 9234 x: {
9204 9235 type: 'timeseries',
9205 9236 tick: {
9206 9237 format: '%Y-%m-%d'
9207 9238 }
9208 9239 },
9209 9240 y: {
9210 9241 tick: {
9211 9242 count: 5,
9212 9243 format: d3.format('.2s')
9213 9244 }
9214 9245 }
9215 9246 },
9216 9247 subchart: {
9217 9248 show: true,
9218 9249 size: {
9219 9250 height: 20
9220 9251 }
9221 9252 },
9222 9253 size: {
9223 9254 height: 250
9224 9255 },
9225 9256 zoom: {
9226 9257 rescale: true
9227 9258 },
9228 9259 grid: {
9229 9260 x: {
9230 9261 show: true
9231 9262 },
9232 9263 y: {
9233 9264 show: true
9234 9265 }
9235 9266 },
9236 9267 tooltip: {
9237 9268 format: {
9238 9269 title: function (d) {
9239 9270 return '' + d;
9240 9271 },
9241 9272 value: function (v) {
9242 9273 return v
9243 9274 }
9244 9275 }
9245 9276 }
9246 9277 };
9247 9278 vm.logEventsChartData = {};
9248 9279 stateHolder.section = 'logs';
9249 9280 vm.today = function () {
9250 9281 vm.pickerDate = new Date();
9251 9282 };
9252 9283 vm.today();
9253 9284
9254 9285 vm.applications = stateHolder.AeUser.applications_map;
9255 9286 vm.logsPage = [];
9256 9287 vm.itemCount = 0;
9257 9288 vm.itemsPerPage = 250;
9258 9289 vm.page = 1;
9259 9290 vm.$location = $location;
9260 9291 vm.isLoading = {
9261 9292 logs: true,
9262 9293 series: true
9263 9294 };
9264 9295 vm.filterTypeAheadOptions = [
9265 9296 {
9266 9297 type: 'message',
9267 9298 text: 'message:',
9268 9299 'description': 'Full-text search in your logs',
9269 9300 tag: 'Message',
9270 9301 example: 'message:text-im-looking-for'
9271 9302 },
9272 9303 {
9273 9304 type: 'namespace',
9274 9305 text: 'namespace:',
9275 9306 'description': 'Query logs from specific namespace',
9276 9307 tag: 'Namespace',
9277 9308 example: "namespace:module.foo"
9278 9309 },
9279 9310 {
9280 9311 type: 'resource',
9281 9312 text: 'resource:',
9282 9313 'description': 'Restrict resultset to application',
9283 9314 tag: 'Application',
9284 9315 example: "resource:ID"
9285 9316 },
9286 9317 {
9287 9318 type: 'request_id',
9288 9319 text: 'request_id:',
9289 9320 'description': 'Show logs with specific request id',
9290 9321 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9291 9322 tag: 'Request ID'
9292 9323 },
9293 9324 {
9294 9325 type: 'level',
9295 9326 text: 'level:',
9296 9327 'description': 'Show entries with specific log level',
9297 9328 example: 'level:warning',
9298 9329 tag: 'Level'
9299 9330 },
9300 9331 {
9301 9332 type: 'server_name',
9302 9333 text: 'server_name:',
9303 9334 'description': 'Show entries tagged with this key/value pair',
9304 9335 example: 'server_name:hostname',
9305 9336 tag: 'Tag'
9306 9337 },
9307 9338 {
9308 9339 type: 'start_date',
9309 9340 text: 'start_date:',
9310 9341 'description': 'Show results newer than this date (press TAB for dropdown)',
9311 9342 example: 'start_date:2014-08-15T13:00',
9312 9343 tag: 'Start Date'
9313 9344 },
9314 9345 {
9315 9346 type: 'end_date',
9316 9347 text: 'end_date:',
9317 9348 'description': 'Show results older than this date (press TAB for dropdown)',
9318 9349 example: 'start_date:2014-08-15T23:59',
9319 9350 tag: 'End Date'
9320 9351 },
9321 9352 {type: 'level', value: 'debug', text: 'level:debug'},
9322 9353 {type: 'level', value: 'info', text: 'level:info'},
9323 9354 {type: 'level', value: 'warning', text: 'level:warning'},
9324 9355 {type: 'level', value: 'critical', text: 'level:critical'}
9325 9356 ];
9326 9357 vm.filterTypeAhead = null;
9327 9358 vm.showDatePicker = false;
9328 9359 vm.manualOpen = false;
9329 9360 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9330 9361 vm.removeSearchTag = function (tag) {
9331 9362 $location.search(tag.type, null);
9332 9363 vm.refresh();
9333 9364 };
9334 9365 vm.addSearchTag = function (tag) {
9335 9366 $location.search(tag.type, tag.value);
9336 9367 vm.refresh();
9337 9368 };
9338 9369
9339 9370 vm.paginationChange = function(){
9340 9371 $location.search('page', vm.page);
9341 9372 vm.refresh();
9342 9373 };
9343 9374
9344 9375
9345 9376 _.each(vm.applications, function (item) {
9346 9377 vm.filterTypeAheadOptions.push({
9347 9378 type: 'resource',
9348 9379 text: 'resource:' + item.resource_id + ':' + item.resource_name,
9349 9380 example: 'resource:' + item.resource_id,
9350 9381 'tag': item.resource_name,
9351 9382 'description': 'Restrict resultset to this application'
9352 9383 });
9353 9384 });
9354 9385
9355 9386 vm.typeAheadTag = function (event) {
9356 9387 var text = vm.filterTypeAhead;
9357 9388 if (_.isObject(vm.filterTypeAhead)) {
9358 9389 text = vm.filterTypeAhead.text;
9359 9390 };
9360 9391 if (!vm.filterTypeAhead) {
9361 9392 return
9362 9393 }
9363 9394 var parsed = text.split(':');
9364 9395 var tag = {'type': null, 'value': null};
9365 9396 // app tags have : twice
9366 9397 if (parsed.length > 2 && parsed[0] == 'resource') {
9367 9398 tag.type = 'resource';
9368 9399 tag.value = parsed[1];
9369 9400 }
9370 9401 // normal tag:value
9371 9402 else if (parsed.length > 1) {
9372 9403 tag.type = parsed[0];
9373 9404 tag.value = parsed.slice(1).join(':');
9374 9405 }
9375 9406 else {
9376 9407 tag.type = 'message';
9377 9408 tag.value = parsed.join(':');
9378 9409 }
9379 9410
9380 9411 // set datepicker hour based on type of field
9381 9412 if ('start_date:' == text) {
9382 9413 vm.showDatePicker = true;
9383 9414 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
9384 9415 }
9385 9416 else if ('end_date:' == text) {
9386 9417 vm.showDatePicker = true;
9387 9418 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
9388 9419 }
9389 9420
9390 9421 if (event.keyCode != 13 || !tag.type || !tag.value) {
9391 9422 return
9392 9423 }
9393 9424 vm.showDatePicker = false;
9394 9425 // aka we selected one of main options
9395 9426 vm.addSearchTag({type: tag.type, value: tag.value});
9396 9427 // clear typeahead
9397 9428 vm.filterTypeAhead = undefined;
9398 9429 };
9399 9430
9400 9431
9401 9432 vm.pickerDateChanged = function(){
9402 9433 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
9403 9434 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
9404 9435 }
9405 9436 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
9406 9437 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
9407 9438 }
9408 9439 vm.showDatePicker = false;
9409 9440 };
9410 9441
9411 9442 vm.fetchLogs = function (searchParams) {
9412 9443 vm.isLoading.logs = true;
9413 9444 logsNoIdResource.query(searchParams, function (data, getResponseHeaders) {
9414 9445 vm.isLoading.logs = false;
9415 9446 var headers = getResponseHeaders();
9416 9447 vm.logsPage = data;
9417 9448 vm.itemCount = headers['x-total-count'];
9418 9449 vm.itemsPerPage = headers['x-items-per-page'];
9419 9450 }, function () {
9420 9451 vm.isLoading.logs = false;
9421 9452 });
9422 9453 };
9423 9454
9424 9455 vm.fetchSeriesData = function (searchParams) {
9425 9456 searchParams['section'] = 'logs_section';
9426 9457 searchParams['view'] = 'fetch_series';
9427 9458 vm.isLoading.series = true;
9428 9459 sectionViewResource.query(searchParams, function (data) {
9429 9460
9430 9461 vm.logEventsChartData = {
9431 9462 json: data,
9432 9463 xFormat: '%Y-%m-%dT%H:%M:%S',
9433 9464 keys: {
9434 9465 x: 'x',
9435 9466 value: ["logs"]
9436 9467 },
9437 9468 names: {
9438 9469 logs: 'Log events'
9439 9470 },
9440 9471 type: 'bar'
9441 9472 };
9442 9473 vm.isLoading.series = false;
9443 9474 }, function () {
9444 9475 vm.isLoading.series = false;
9445 9476 });
9446 9477 };
9447 9478
9448 9479 vm.filterId = function (log) {
9449 9480 $location.search('request_id', log.request_id);
9450 9481 vm.refresh();
9451 9482 };
9452 9483
9453 9484 vm.refresh = function(){
9454 9485 vm.searchParams = parseSearchToTags($location.search());
9455 9486 vm.page = Number(vm.searchParams.page) || 1;
9456 9487 var params = parseTagsToSearch(vm.searchParams);
9457 9488 vm.fetchLogs(params);
9458 9489 vm.fetchSeriesData(params);
9459 9490 };
9460 9491 console.info('page load');
9461 9492 vm.refresh();
9462 9493 }
9463 9494
9464 9495 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9465 9496 // #
9466 9497 // # This program is free software: you can redistribute it and/or modify
9467 9498 // # it under the terms of the GNU Affero General Public License, version 3
9468 9499 // # (only), as published by the Free Software Foundation.
9469 9500 // #
9470 9501 // # This program is distributed in the hope that it will be useful,
9471 9502 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9472 9503 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9473 9504 // # GNU General Public License for more details.
9474 9505 // #
9475 9506 // # You should have received a copy of the GNU Affero General Public License
9476 9507 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9477 9508 // #
9478 9509 // # This program is dual-licensed. If you wish to learn more about the
9479 9510 // # AppEnlight Enterprise Edition, including its added features, Support
9480 9511 // # services, and proprietary license terms, please see
9481 9512 // # https://rhodecode.com/licenses/
9482 9513
9483 9514 angular.module('appenlight.components.reportView', [])
9484 9515 .component('reportView', {
9485 9516 templateUrl: 'components/views/report-view/report-view.html',
9486 9517 controller: ReportViewController
9487 9518 });
9488 9519
9489 9520 ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal',
9490 9521 '$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
9491 9522 'logsNoIdResource', 'stateHolder'];
9492 9523
9493 9524 function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
9494 9525 var vm = this;
9495 9526 vm.window = $window;
9496 9527 vm.stateHolder = stateHolder;
9497 9528 vm.$state = $state;
9498 9529 vm.reportHistoryConfig = {
9499 9530 data: {
9500 9531 json: [],
9501 9532 xFormat: '%Y-%m-%dT%H:%M:%S'
9502 9533 },
9503 9534 color: {
9504 9535 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9505 9536 },
9506 9537 axis: {
9507 9538 x: {
9508 9539 type: 'timeseries',
9509 9540 tick: {
9510 9541 format: '%Y-%m-%d'
9511 9542 }
9512 9543 },
9513 9544 y: {
9514 9545 tick: {
9515 9546 count: 5,
9516 9547 format: d3.format('.2s')
9517 9548 }
9518 9549 }
9519 9550 },
9520 9551 subchart: {
9521 9552 show: true,
9522 9553 size: {
9523 9554 height: 20
9524 9555 }
9525 9556 },
9526 9557 size: {
9527 9558 height: 250
9528 9559 },
9529 9560 zoom: {
9530 9561 rescale: true
9531 9562 },
9532 9563 grid: {
9533 9564 x: {
9534 9565 show: true
9535 9566 },
9536 9567 y: {
9537 9568 show: true
9538 9569 }
9539 9570 },
9540 9571 tooltip: {
9541 9572 format: {
9542 9573 title: function (d) {
9543 9574 return '' + d;
9544 9575 },
9545 9576 value: function (v) {
9546 9577 return v
9547 9578 }
9548 9579 }
9549 9580 }
9550 9581 };
9551 9582 vm.mentionedPeople = [];
9552 9583 vm.reportHistoryData = {};
9553 9584 vm.textTraceback = true;
9554 9585 vm.rawTraceback = '';
9555 9586 vm.traceback = '';
9556 9587 vm.reportType = 'report';
9557 9588 vm.report = null;
9558 9589 vm.showLong = false;
9559 9590 vm.reportLogs = null;
9560 9591 vm.requestStats = null;
9561 9592 vm.comment = null;
9562 9593 vm.is_loading = {
9563 9594 report: true,
9564 9595 logs: true,
9565 9596 history: true
9566 9597 };
9567 9598
9568 9599 vm.searchMentionedPeople = function(term){
9569 9600 //vm.mentionedPeople = [];
9570 9601 var term = term.toLowerCase();
9571 9602 reportGroupPropertyResource.get({
9572 9603 groupId: vm.report.group_id,
9573 9604 key: 'assigned_users'
9574 9605 }, null,
9575 9606 function (data) {
9576 9607 var users = [];
9577 9608 _.each(data.assigned, function(u){
9578 9609 users.push({label: u.user_name});
9579 9610 });
9580 9611 _.each(data.unassigned, function(u){
9581 9612 users.push({label: u.user_name});
9582 9613 });
9583 9614
9584 9615 var result = _.filter(users, function(u){
9585 9616 return u.label.toLowerCase().indexOf(term) !== -1;
9586 9617 });
9587 9618 vm.mentionedPeople = result;
9588 9619 });
9589 9620 };
9590 9621
9591 9622 vm.searchTag = function (tag, value) {
9592 9623
9593 9624 if (vm.report.report_type === 3) {
9594 9625 $location.url($state.href('report.list_slow'));
9595 9626 }
9596 9627 else {
9597 9628 $location.url($state.href('report.list'));
9598 9629 }
9599 9630 $location.search(tag, value);
9600 9631 };
9601 9632
9602 9633 vm.tabs = {
9603 9634 slow_calls:false,
9604 9635 request_details:false,
9605 9636 logs:false,
9606 9637 comments:false,
9607 9638 affected_users:false
9608 9639 };
9609 9640 if ($cookies.selectedReportTab) {
9610 9641 vm.tabs[$cookies.selectedReportTab] = true;
9611 9642 }
9612 9643 else{
9613 9644 $cookies.selectedReportTab = 'request_details';
9614 9645 vm.tabs.request_details = true;
9615 9646 }
9616 9647
9617 9648 vm.fetchLogs = function () {
9618 9649 if (!vm.report.request_id){
9619 9650 return
9620 9651 }
9621 9652 vm.is_loading.logs = true;
9622 9653 logsNoIdResource.query({request_id: vm.report.request_id},
9623 9654 function (data) {
9624 9655 vm.is_loading.logs = false;
9625 9656 vm.reportLogs = data;
9626 9657 }, function () {
9627 9658 vm.is_loading.logs = false;
9628 9659 });
9629 9660 };
9630 9661 vm.addComment = function () {
9631 9662 reportGroupPropertyResource.save({
9632 9663 groupId: vm.report.group_id,
9633 9664 key: 'comments'
9634 9665 }, {body: vm.comment},
9635 9666 function (data) {
9636 9667 vm.report.comments.push(data);
9637 9668 });
9638 9669 vm.comment = '';
9639 9670 };
9640 9671
9641 9672 vm.fetchReport = function () {
9642 9673 vm.is_loading.report = true;
9643 9674 reportGroupResource.get($state.params, function (data) {
9644 9675 vm.is_loading.report = false;
9645 9676 if (data.request) {
9646 9677 try {
9647 9678 var to_sort = _.pairs(data.request);
9648 9679 data.request = _.object(_.sortBy(to_sort, function (i) {
9649 9680 return i[0]
9650 9681 }));
9651 9682 }
9652 9683 catch (err) {
9653 9684 }
9654 9685 }
9655 9686 vm.report = data;
9656 9687 if (vm.report.req_stats) {
9657 9688 vm.requestStats = [];
9658 9689 _.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
9659 9690 vm.requestStats.push({
9660 9691 name: p[0],
9661 9692 value: vm.report.req_stats[p[0]].toFixed(3),
9662 9693 percent: p[1],
9663 9694 calls: vm.report.req_stats[p[0] + '_calls']
9664 9695 })
9665 9696 });
9666 9697 }
9667 9698 vm.traceback = data.traceback;
9668 9699 _.each(vm.traceback, function (frame) {
9669 9700 if (frame.line) {
9670 9701 vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
9671 9702 }
9672 9703 vm.rawTraceback += ' ' + frame.cline + "\r\n";
9673 9704 });
9674 9705
9675 9706 if (stateHolder.AeUser.id){
9676 9707 vm.fetchHistory();
9677 9708 }
9678 9709
9679 9710 vm.selectedTab($cookies.selectedReportTab);
9680 9711
9681 9712 }, function (response) {
9682 9713
9683 9714 if (response.status == 403) {
9684 9715 var uid = response.headers('x-appenlight-uid');
9685 9716 if (!uid) {
9686 9717 window.location = '/register?came_from=' + encodeURIComponent(window.location);
9687 9718 }
9688 9719 }
9689 9720 vm.is_loading.report = false;
9690 9721 });
9691 9722 };
9692 9723
9693 9724 vm.selectedTab = function(tab_name){
9694 9725 $cookies.selectedReportTab = tab_name;
9695 9726 if (tab_name == 'logs' && vm.reportLogs === null) {
9696 9727 vm.fetchLogs();
9697 9728 }
9698 9729 };
9699 9730
9700 9731 vm.markFixed = function () {
9701 9732 reportGroupResource.update({
9702 9733 groupId: vm.report.group_id
9703 9734 }, {fixed: !vm.report.group.fixed},
9704 9735 function (data) {
9705 9736 vm.report.group.fixed = data.fixed;
9706 9737 });
9707 9738 };
9708 9739
9709 9740 vm.markPublic = function () {
9710 9741 reportGroupResource.update({
9711 9742 groupId: vm.report.group_id
9712 9743 }, {public: !vm.report.group.public},
9713 9744 function (data) {
9714 9745 vm.report.group.public = data.public;
9715 9746 });
9716 9747 };
9717 9748
9718 9749 vm.delete = function () {
9719 9750 reportGroupResource.delete({'groupId': vm.report.group_id},
9720 9751 function (data) {
9721 9752 $state.go('report.list');
9722 9753 })
9723 9754 };
9724 9755
9725 9756 vm.assignUsersModal = function (index) {
9726 9757 vm.opts = {
9727 9758 backdrop: 'static',
9728 9759 templateUrl: 'AssignReportCtrl.html',
9729 9760 controller: 'AssignReportCtrl as ctrl',
9730 9761 resolve: {
9731 9762 report: function () {
9732 9763 return vm.report;
9733 9764 }
9734 9765 }
9735 9766 };
9736 9767 var modalInstance = $uibModal.open(vm.opts);
9737 9768 modalInstance.result.then(function (report) {
9738 9769
9739 9770 }, function () {
9740 9771 console.info('Modal dismissed at: ' + new Date());
9741 9772 });
9742 9773
9743 9774 };
9744 9775
9745 9776 vm.fetchHistory = function () {
9746 9777 reportGroupPropertyResource.query({
9747 9778 groupId: vm.report.group_id,
9748 9779 key: 'history'
9749 9780 }, function (data) {
9750 9781 vm.reportHistoryData = {
9751 9782 json: data,
9752 9783 keys: {
9753 9784 x: 'x',
9754 9785 value: ["reports"]
9755 9786 },
9756 9787 names: {
9757 9788 reports: 'Reports history'
9758 9789 },
9759 9790 type: 'bar'
9760 9791 };
9761 9792 vm.is_loading.history = false;
9762 9793 });
9763 9794 };
9764 9795
9765 9796 vm.nextDetail = function () {
9766 9797 $state.go('report.view_detail', {
9767 9798 groupId: vm.report.group_id,
9768 9799 reportId: vm.report.group.next_report
9769 9800 });
9770 9801 };
9771 9802 vm.previousDetail = function () {
9772 9803 $state.go('report.view_detail', {
9773 9804 groupId: vm.report.group_id,
9774 9805 reportId: vm.report.group.previous_report
9775 9806 });
9776 9807 };
9777 9808
9778 9809 vm.runIntegration = function (integration_name) {
9779 9810
9780 9811 if (integration_name == 'bitbucket') {
9781 9812 var controller = 'BitbucketIntegrationCtrl as ctrl';
9782 9813 var template_url = 'templates/integrations/bitbucket.html';
9783 9814 }
9784 9815 else if (integration_name == 'github') {
9785 9816 var controller = 'GithubIntegrationCtrl as ctrl';
9786 9817 var template_url = 'templates/integrations/github.html';
9787 9818 }
9788 9819 else if (integration_name == 'jira') {
9789 9820 var controller = 'JiraIntegrationCtrl as ctrl';
9790 9821 var template_url = 'templates/integrations/jira.html';
9791 9822 }
9792 9823 else {
9793 9824 return false;
9794 9825 }
9795 9826
9796 9827 vm.opts = {
9797 9828 backdrop: 'static',
9798 9829 templateUrl: template_url,
9799 9830 controller: controller,
9800 9831 resolve: {
9801 9832 integrationName: function () {
9802 9833 return integration_name
9803 9834 },
9804 9835 report: function () {
9805 9836 return vm.report;
9806 9837 }
9807 9838 }
9808 9839 };
9809 9840 var modalInstance = $uibModal.open(vm.opts);
9810 9841 modalInstance.result.then(function (report) {
9811 9842
9812 9843 }, function () {
9813 9844 console.info('Modal dismissed at: ' + new Date());
9814 9845 });
9815 9846
9816 9847 };
9817 9848
9818 9849 // load report
9819 9850 vm.fetchReport();
9820 9851
9821 9852
9822 9853 }
9823 9854
9824 9855 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9825 9856 // #
9826 9857 // # This program is free software: you can redistribute it and/or modify
9827 9858 // # it under the terms of the GNU Affero General Public License, version 3
9828 9859 // # (only), as published by the Free Software Foundation.
9829 9860 // #
9830 9861 // # This program is distributed in the hope that it will be useful,
9831 9862 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9832 9863 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9833 9864 // # GNU General Public License for more details.
9834 9865 // #
9835 9866 // # You should have received a copy of the GNU Affero General Public License
9836 9867 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
9837 9868 // #
9838 9869 // # This program is dual-licensed. If you wish to learn more about the
9839 9870 // # AppEnlight Enterprise Edition, including its added features, Support
9840 9871 // # services, and proprietary license terms, please see
9841 9872 // # https://rhodecode.com/licenses/
9842 9873
9843 9874 angular.module('appenlight.components.reportsBrowserView', [])
9844 9875 .component('reportsBrowserView', {
9845 9876 templateUrl: 'components/views/reports-browser-view/reports-browser-view.html',
9846 9877 controller: reportsBrowserViewController
9847 9878 });
9848 9879
9849 9880 reportsBrowserViewController.$inject = ['$location', '$cookies',
9850 9881 'stateHolder', 'typeAheadTagHelper', 'reportsResource'];
9851 9882
9852 9883 function reportsBrowserViewController($location, $cookies, stateHolder,
9853 9884 typeAheadTagHelper, reportsResource) {
9854 9885 var vm = this;
9855 9886 vm.applications = stateHolder.AeUser.applications_map;
9856 9887 stateHolder.section = 'reports';
9857 9888 vm.today = function () {
9858 9889 vm.pickerDate = new Date();
9859 9890 };
9860 9891 vm.today();
9861 9892 vm.reportsPage = [];
9862 9893 vm.page = 1;
9863 9894 vm.itemCount = 0;
9864 9895 vm.itemsPerPage = 250;
9865 9896 typeAheadTagHelper.tags = [];
9866 9897 vm.searchParams = {tags: [], page: 1, type: 'report'};
9867 9898 vm.is_loading = false;
9868 9899 vm.filterTypeAheadOptions = [
9869 9900 {
9870 9901 type: 'error',
9871 9902 text: 'error:',
9872 9903 'description': 'Full-text search in your reports',
9873 9904 example: 'error:text-im-looking-for',
9874 9905 tag: 'Error'
9875 9906 },
9876 9907 {
9877 9908 type: 'view_name',
9878 9909 text: 'view_name:',
9879 9910 'description': 'Query reports occured in specific views',
9880 9911 example: "view_name:module.foo",
9881 9912 tag: 'View Name'
9882 9913 },
9883 9914 {
9884 9915 type: 'resource',
9885 9916 text: 'resource:',
9886 9917 'description': 'Restrict resultset to application',
9887 9918 example: "resource:ID",
9888 9919 tag: 'Application'
9889 9920 },
9890 9921 {
9891 9922 type: 'priority',
9892 9923 text: 'priority:',
9893 9924 'description': 'Show reports with specific priority',
9894 9925 example: 'priority:8',
9895 9926 tag: 'Priority'
9896 9927 },
9897 9928 {
9898 9929 type: 'min_occurences',
9899 9930 text: 'min_occurences:',
9900 9931 'description': 'Show reports from groups with at least X occurences',
9901 9932 example: 'min_occurences:25',
9902 9933 tag: 'Occurences'
9903 9934 },
9904 9935 {
9905 9936 type: 'url_path',
9906 9937 text: 'url_path:',
9907 9938 'description': 'Show reports from specific URL paths',
9908 9939 example: 'url_path:/foo/bar/baz',
9909 9940 tag: 'Url Path'
9910 9941 },
9911 9942 {
9912 9943 type: 'url_domain',
9913 9944 text: 'url_domain:',
9914 9945 'description': 'Show reports from specific domain',
9915 9946 example: 'url_domain:domain.com',
9916 9947 tag: 'Domain'
9917 9948 },
9918 9949 {
9919 9950 type: 'report_status',
9920 9951 text: 'report_status:',
9921 9952 'description': 'Show reports from groups with specific status',
9922 9953 example: 'report_status:never_reviewed',
9923 9954 tag: 'Status'
9924 9955 },
9925 9956 {
9926 9957 type: 'request_id',
9927 9958 text: 'request_id:',
9928 9959 'description': 'Show reports with specific request id',
9929 9960 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9930 9961 tag: 'Request ID'
9931 9962 },
9932 9963 {
9933 9964 type: 'server_name',
9934 9965 text: 'server_name:',
9935 9966 'description': 'Show reports tagged with this key/value pair',
9936 9967 example: 'server_name:hostname',
9937 9968 tag: 'Tag'
9938 9969 },
9939 9970 {
9940 9971 type: 'http_status',
9941 9972 text: 'http_status:',
9942 9973 'description': 'Show reports with specific HTTP status code',
9943 9974 example: "http_status:",
9944 9975 tag: 'HTTP Status'
9945 9976 },
9946 9977 {
9947 9978 type: 'http_status',
9948 9979 text: 'http_status:500',
9949 9980 'description': 'Show reports with specific HTTP status code',
9950 9981 example: "http_status:500",
9951 9982 tag: 'HTTP Status'
9952 9983 },
9953 9984 {
9954 9985 type: 'http_status',
9955 9986 text: 'http_status:404',
9956 9987 'description': 'Include 404 reports in your search',
9957 9988 example: "http_status:404",
9958 9989 tag: 'HTTP Status'
9959 9990 },
9960 9991 {
9961 9992 type: 'start_date',
9962 9993 text: 'start_date:',
9963 9994 'description': 'Show reports newer than this date (press TAB for dropdown)',
9964 9995 example: 'start_date:2014-08-15T13:00',
9965 9996 tag: 'Start Date'
9966 9997 },
9967 9998 {
9968 9999 type: 'end_date',
9969 10000 text: 'end_date:',
9970 10001 'description': 'Show reports older than this date (press TAB for dropdown)',
9971 10002 example: 'start_date:2014-08-15T23:59',
9972 10003 tag: 'End Date'
9973 10004 }
9974 10005 ];
9975 10006
9976 10007 vm.filterTypeAhead = undefined;
9977 10008 vm.showDatePicker = false;
9978 10009 vm.manualOpen = false;
9979 10010 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9980 10011 vm.removeSearchTag = function (tag) {
9981 10012 $location.search(tag.type, null);
9982 10013 vm.refresh();
9983 10014 };
9984 10015 vm.addSearchTag = function (tag) {
9985 10016 $location.search(tag.type, tag.value);
9986 10017 vm.refresh();
9987 10018 };
9988 10019 vm.notRelativeTime = false;
9989 10020 if ($cookies.notRelativeTime) {
9990 10021 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
9991 10022 }
9992 10023
9993 10024 vm.changeRelativeTime = function () {
9994 10025 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
9995 10026 };
9996 10027
9997 10028 _.each(_.range(1, 11), function (priority) {
9998 10029 vm.filterTypeAheadOptions.push({
9999 10030 type: 'priority',
10000 10031 text: 'priority:' + priority.toString(),
10001 10032 description: 'Show entries with specific priority',
10002 10033 example: 'priority:' + priority,
10003 10034 tag: 'Priority'
10004 10035 });
10005 10036 });
10006 10037 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
10007 10038 vm.filterTypeAheadOptions.push({
10008 10039 type: 'report_status',
10009 10040 text: 'report_status:' + status,
10010 10041 'description': 'Show only reports with this status',
10011 10042 example: 'report_status:' + status,
10012 10043 tag: 'Status ' + status.toUpperCase()
10013 10044 });
10014 10045 });
10015 10046 _.each(stateHolder.AeUser.applications, function (item) {
10016 10047 vm.filterTypeAheadOptions.push({
10017 10048 type: 'resource',
10018 10049 text: 'resource:' + item.resource_id + ':' + item.resource_name,
10019 10050 example: 'resource:' + item.resource_id,
10020 10051 'tag': item.resource_name,
10021 10052 'description': 'Restrict resultset to this application'
10022 10053 });
10023 10054 });
10024 10055
10025 10056 vm.paginationChange = function(){
10026 10057 $location.search('page', vm.page);
10027 10058 vm.refresh();
10028 10059 };
10029 10060
10030 10061 vm.typeAheadTag = function (event) {
10031 10062 var text = vm.filterTypeAhead;
10032 10063 if (_.isObject(vm.filterTypeAhead)) {
10033 10064 text = vm.filterTypeAhead.text;
10034 10065 }
10035 10066 if (!vm.filterTypeAhead) {
10036 10067 return
10037 10068 }
10038 10069
10039 10070 var parsed = text.split(':');
10040 10071 var tag = {'type': null, 'value': null};
10041 10072 // app tags have : twice
10042 10073 if (parsed.length > 2 && parsed[0] == 'resource') {
10043 10074 tag.type = 'resource';
10044 10075 tag.value = parsed[1];
10045 10076 }
10046 10077 // normal tag:value
10047 10078 else if (parsed.length > 1) {
10048 10079 tag.type = parsed[0];
10049 10080 var tagValue = parsed.slice(1);
10050 10081 if (tagValue) {
10051 10082 tag.value = tagValue.join(':');
10052 10083 }
10053 10084 }
10054 10085 else {
10055 10086 tag.type = 'error';
10056 10087 tag.value = parsed.join(':');
10057 10088 }
10058 10089
10059 10090 // set datepicker hour based on type of field
10060 10091 if ('start_date:' == text) {
10061 10092 vm.showDatePicker = true;
10062 10093 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10063 10094 }
10064 10095 else if ('end_date:' == text) {
10065 10096 vm.showDatePicker = true;
10066 10097 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10067 10098 }
10068 10099
10069 10100 if (event.keyCode != 13 || !tag.type || !tag.value) {
10070 10101 return
10071 10102 }
10072 10103 vm.showDatePicker = false;
10073 10104 // aka we selected one of main options
10074 10105 vm.addSearchTag({type: tag.type, value: tag.value});
10075 10106 // clear typeahead
10076 10107 vm.filterTypeAhead = undefined;
10077 10108 };
10078 10109
10079 10110 vm.pickerDateChanged = function(){
10080 10111 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
10081 10112 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10082 10113 }
10083 10114 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
10084 10115 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10085 10116 }
10086 10117 vm.showDatePicker = false;
10087 10118 };
10088 10119
10089 10120 var reportPresentation = function (report) {
10090 10121 report.presentation = {};
10091 10122 if (report.group.public) {
10092 10123 report.presentation.className = 'public';
10093 10124 report.presentation.tooltip = 'Public';
10094 10125 }
10095 10126 else if (report.group.fixed) {
10096 10127 report.presentation.className = 'fixed';
10097 10128 report.presentation.tooltip = 'Fixed';
10098 10129 }
10099 10130 else if (report.group.read) {
10100 10131 report.presentation.className = 'reviewed';
10101 10132 report.presentation.tooltip = 'Reviewed';
10102 10133 }
10103 10134 else {
10104 10135 report.presentation.className = 'new';
10105 10136 report.presentation.tooltip = 'New';
10106 10137 }
10107 10138 return report;
10108 10139 };
10109 10140
10110 10141 vm.fetchReports = function (searchParams) {
10111 10142 vm.is_loading = true;
10112 10143 reportsResource.query(searchParams, function (data, getResponseHeaders) {
10113 10144 var headers = getResponseHeaders();
10114 10145
10115 10146 vm.is_loading = false;
10116 10147 vm.reportsPage = _.map(data, function (item) {
10117 10148 return reportPresentation(item);
10118 10149 });
10119 10150 vm.itemCount = headers['x-total-count'];
10120 10151 vm.itemsPerPage = headers['x-items-per-page'];
10121 10152 }, function () {
10122 10153 vm.is_loading = false;
10123 10154 });
10124 10155 };
10125 10156
10126 10157 vm.filterId = function (log) {
10127 10158 vm.searchParams.tags.push({
10128 10159 type: "request_id",
10129 10160 value: log.request_id
10130 10161 });
10131 10162 vm.refresh();
10132 10163 };
10133 10164
10134 10165 vm.refresh = function(){
10135 10166 vm.searchParams = parseSearchToTags($location.search());
10136 10167 vm.page = Number(vm.searchParams.page) || 1;
10137 10168 var params = parseTagsToSearch(vm.searchParams);
10138 10169
10139 10170 vm.fetchReports(params);
10140 10171 };
10141 10172 // initial load
10142 10173 vm.refresh();
10143 10174 }
10144 10175
10145 10176 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10146 10177 // #
10147 10178 // # This program is free software: you can redistribute it and/or modify
10148 10179 // # it under the terms of the GNU Affero General Public License, version 3
10149 10180 // # (only), as published by the Free Software Foundation.
10150 10181 // #
10151 10182 // # This program is distributed in the hope that it will be useful,
10152 10183 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10153 10184 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10154 10185 // # GNU General Public License for more details.
10155 10186 // #
10156 10187 // # You should have received a copy of the GNU Affero General Public License
10157 10188 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10158 10189 // #
10159 10190 // # This program is dual-licensed. If you wish to learn more about the
10160 10191 // # AppEnlight Enterprise Edition, including its added features, Support
10161 10192 // # services, and proprietary license terms, please see
10162 10193 // # https://rhodecode.com/licenses/
10163 10194
10164 10195 'use strict';
10165 10196
10166 10197 /* Controllers */
10167 10198
10168 10199 angular.module('appenlight.components.reportsSlowBrowserView', [])
10169 10200 .component('reportsSlowBrowserView', {
10170 10201 templateUrl: 'components/views/reports-slow-browser-view/reports-slow-browser-view.html',
10171 10202 controller: ReportsSlowBrowserViewController
10172 10203 });
10173 10204
10174 10205 ReportsSlowBrowserViewController.$inject = ['$location', '$cookies',
10175 10206 'stateHolder', 'typeAheadTagHelper', 'slowReportsResource']
10176 10207
10177 10208 function ReportsSlowBrowserViewController($location, $cookies, stateHolder, typeAheadTagHelper, slowReportsResource) {
10178 10209 var vm = this;
10179 10210 vm.applications = stateHolder.AeUser.applications_map;
10180 10211 stateHolder.section = 'slow_reports';
10181 10212 vm.today = function () {
10182 10213 vm.pickerDate = new Date();
10183 10214 };
10184 10215 vm.today();
10185 10216 vm.reportsPage = [];
10186 10217 vm.page = 1;
10187 10218 vm.itemCount = 0;
10188 10219 vm.itemsPerPage = 250;
10189 10220 typeAheadTagHelper.tags = [];
10190 10221 vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
10191 10222 vm.is_loading = false;
10192 10223 vm.filterTypeAheadOptions = [
10193 10224 {
10194 10225 type: 'view_name',
10195 10226 text: 'view_name:',
10196 10227 'description': 'Query reports occured in specific views',
10197 10228 tag: 'View Name',
10198 10229 example: "view_name:module.foo"
10199 10230 },
10200 10231 {
10201 10232 type: 'resource',
10202 10233 text: 'resource:',
10203 10234 'description': 'Restrict resultset to application',
10204 10235 tag: 'Application',
10205 10236 example: "resource:ID"
10206 10237 },
10207 10238 {
10208 10239 type: 'priority',
10209 10240 text: 'priority:',
10210 10241 'description': 'Show reports with specific priority',
10211 10242 example: 'priority:8',
10212 10243 tag: 'Priority'
10213 10244 },
10214 10245 {
10215 10246 type: 'min_occurences',
10216 10247 text: 'min_occurences:',
10217 10248 'description': 'Show reports from groups with at least X occurences',
10218 10249 example: 'min_occurences:25',
10219 10250 tag: 'Min. occurences'
10220 10251 },
10221 10252 {
10222 10253 type: 'min_duration',
10223 10254 text: 'min_duration:',
10224 10255 'description': 'Show reports from groups with average duration >= Xs',
10225 10256 example: 'min_duration:4.5',
10226 10257 tag: 'Min. duration'
10227 10258 },
10228 10259 {
10229 10260 type: 'url_path',
10230 10261 text: 'url_path:',
10231 10262 'description': 'Show reports from specific URL paths',
10232 10263 example: 'url_path:/foo/bar/baz',
10233 10264 tag: 'Url Path'
10234 10265 },
10235 10266 {
10236 10267 type: 'url_domain',
10237 10268 text: 'url_domain:',
10238 10269 'description': 'Show reports from specific domain',
10239 10270 example: 'url_domain:domain.com',
10240 10271 tag: 'Domain'
10241 10272 },
10242 10273 {
10243 10274 type: 'request_id',
10244 10275 text: 'request_id:',
10245 10276 'description': 'Show reports with specific request id',
10246 10277 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
10247 10278 tag: 'Request ID'
10248 10279 },
10249 10280 {
10250 10281 type: 'report_status',
10251 10282 text: 'report_status:',
10252 10283 'description': 'Show reports from groups with specific status',
10253 10284 example: 'report_status:never_reviewed',
10254 10285 tag: 'Status'
10255 10286 },
10256 10287 {
10257 10288 type: 'server_name',
10258 10289 text: 'server_name:',
10259 10290 'description': 'Show reports tagged with this key/value pair',
10260 10291 example: 'server_name:hostname',
10261 10292 tag: 'Tag'
10262 10293 },
10263 10294 {
10264 10295 type: 'start_date',
10265 10296 text: 'start_date:',
10266 10297 'description': 'Show reports newer than this date (press TAB for dropdown)',
10267 10298 example: 'start_date:2014-08-15T13:00',
10268 10299 tag: 'Start Date'
10269 10300 },
10270 10301 {
10271 10302 type: 'end_date',
10272 10303 text: 'end_date:',
10273 10304 'description': 'Show reports older than this date (press TAB for dropdown)',
10274 10305 example: 'start_date:2014-08-15T23:59',
10275 10306 tag: 'End Date'
10276 10307 }
10277 10308 ];
10278 10309
10279 10310 vm.filterTypeAhead = undefined;
10280 10311 vm.showDatePicker = false;
10281 10312 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
10282 10313 vm.removeSearchTag = function (tag) {
10283 10314 $location.search(tag.type, null);
10284 10315 vm.refresh();
10285 10316 };
10286 10317 vm.addSearchTag = function (tag) {
10287 10318 $location.search(tag.type, tag.value);
10288 10319 vm.refresh();
10289 10320 };
10290 10321 vm.manualOpen = false;
10291 10322 vm.notRelativeTime = false;
10292 10323 if ($cookies.notRelativeTime) {
10293 10324 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
10294 10325 }
10295 10326
10296 10327
10297 10328 vm.changeRelativeTime = function () {
10298 10329 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
10299 10330 };
10300 10331
10301 10332 _.each(_.range(1, 11), function (priority) {
10302 10333 vm.filterTypeAheadOptions.push({
10303 10334 type: 'priority',
10304 10335 text: 'priority:' + priority.toString(),
10305 10336 description: 'Show entries with specific priority',
10306 10337 example: 'priority:' + priority,
10307 10338 tag: 'Priority'
10308 10339 });
10309 10340 });
10310 10341 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
10311 10342 vm.filterTypeAheadOptions.push({
10312 10343 type: 'report_status',
10313 10344 text: 'report_status:' + status,
10314 10345 'description': 'Show only reports with this status',
10315 10346 example: 'report_status:' + status,
10316 10347 tag: 'Status ' + status.toUpperCase()
10317 10348 });
10318 10349 });
10319 10350 _.each(stateHolder.AeUser.applications, function (item) {
10320 10351 vm.filterTypeAheadOptions.push({
10321 10352 type: 'resource',
10322 10353 text: 'resource:' + item.resource_id + ':' + item.resource_name,
10323 10354 example: 'resource:' + item.resource_id,
10324 10355 'tag': item.resource_name,
10325 10356 'description': 'Restrict resultset to this application'
10326 10357 });
10327 10358 });
10328 10359
10329 10360 vm.typeAheadTag = function (event) {
10330 10361 var text = vm.filterTypeAhead;
10331 10362 if (_.isObject(vm.filterTypeAhead)) {
10332 10363 text = vm.filterTypeAhead.text;
10333 10364 };
10334 10365 if (!vm.filterTypeAhead) {
10335 10366 return
10336 10367 }
10337 10368 var parsed = text.split(':');
10338 10369 var tag = {'type': null, 'value': null};
10339 10370 // app tags have : twice
10340 10371 if (parsed.length > 2 && parsed[0] == 'resource') {
10341 10372 tag.type = 'resource';
10342 10373 tag.value = parsed[1];
10343 10374 }
10344 10375 // normal tag:value
10345 10376 else if (parsed.length > 1) {
10346 10377 tag.type = parsed[0];
10347 10378 var tagValue = parsed.slice(1);
10348 10379 if (tagValue) {
10349 10380 tag.value = tagValue.join(':');
10350 10381 }
10351 10382 }
10352 10383
10353 10384 // set datepicker hour based on type of field
10354 10385 if ('start_date:' == text) {
10355 10386 vm.showDatePicker = true;
10356 10387 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10357 10388 }
10358 10389 else if ('end_date:' == text) {
10359 10390 vm.showDatePicker = true;
10360 10391 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10361 10392 }
10362 10393
10363 10394 if (event.keyCode != 13 || !tag.type || !tag.value) {
10364 10395 return
10365 10396 }
10366 10397 vm.showDatePicker = false;
10367 10398 // aka we selected one of main options
10368 10399 vm.addSearchTag({type: tag.type, value: tag.value});
10369 10400 // clear typeahead
10370 10401 vm.filterTypeAhead = undefined;
10371 10402 };
10372 10403
10373 10404 vm.paginationChange = function(){
10374 10405 $location.search('page', vm.page);
10375 10406 vm.refresh();
10376 10407 };
10377 10408
10378 10409 vm.pickerDateChanged = function(){
10379 10410 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
10380 10411 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10381 10412 }
10382 10413 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
10383 10414 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10384 10415 }
10385 10416 vm.showDatePicker = false;
10386 10417 };
10387 10418
10388 10419 var reportPresentation = function (report) {
10389 10420 report.presentation = {};
10390 10421 if (report.group.public) {
10391 10422 report.presentation.className = 'public';
10392 10423 report.presentation.tooltip = 'Public';
10393 10424 }
10394 10425 else if (report.group.fixed) {
10395 10426 report.presentation.className = 'fixed';
10396 10427 report.presentation.tooltip = 'Fixed';
10397 10428 }
10398 10429 else if (report.group.read) {
10399 10430 report.presentation.className = 'reviewed';
10400 10431 report.presentation.tooltip = 'Reviewed';
10401 10432 }
10402 10433 else {
10403 10434 report.presentation.className = 'new';
10404 10435 report.presentation.tooltip = 'New';
10405 10436 }
10406 10437 return report;
10407 10438 };
10408 10439
10409 10440 vm.fetchReports = function (searchParams) {
10410 10441 vm.is_loading = true;
10411 10442 slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
10412 10443 var headers = getResponseHeaders();
10413 10444
10414 10445 vm.is_loading = false;
10415 10446 vm.reportsPage = _.map(data, function (item) {
10416 10447 return reportPresentation(item);
10417 10448 });
10418 10449 vm.itemCount = headers['x-total-count'];
10419 10450 vm.itemsPerPage = headers['x-items-per-page'];
10420 10451 }, function () {
10421 10452 vm.is_loading = false;
10422 10453 });
10423 10454 };
10424 10455
10425 10456 vm.filterId = function (log) {
10426 10457 vm.searchParams.tags.push({
10427 10458 type: "request_id",
10428 10459 value: log.request_id
10429 10460 });
10430 10461 vm.refresh();
10431 10462 };
10432 10463 vm.refresh = function(){
10433 10464 vm.searchParams = parseSearchToTags($location.search());
10434 10465 vm.page = Number(vm.searchParams.page) || 1;
10435 10466 var params = parseTagsToSearch(vm.searchParams);
10436 10467 vm.fetchReports(params);
10437 10468 };
10438 10469
10439 10470 //initial load
10440 10471 vm.refresh();
10441 10472 }
10442 10473
10443 10474 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10444 10475 // #
10445 10476 // # This program is free software: you can redistribute it and/or modify
10446 10477 // # it under the terms of the GNU Affero General Public License, version 3
10447 10478 // # (only), as published by the Free Software Foundation.
10448 10479 // #
10449 10480 // # This program is distributed in the hope that it will be useful,
10450 10481 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10451 10482 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10452 10483 // # GNU General Public License for more details.
10453 10484 // #
10454 10485 // # You should have received a copy of the GNU Affero General Public License
10455 10486 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10456 10487 // #
10457 10488 // # This program is dual-licensed. If you wish to learn more about the
10458 10489 // # AppEnlight Enterprise Edition, including its added features, Support
10459 10490 // # services, and proprietary license terms, please see
10460 10491 // # https://rhodecode.com/licenses/
10461 10492
10462 10493 angular.module('appenlight.components.settingsView', [])
10463 10494 .component('settingsView', {
10464 10495 templateUrl: 'components/views/settings-view/settings-view.html',
10465 10496 controller: SettingsViewController
10466 10497 });
10467 10498
10468 SettingsViewController.$inject = ['$state'];
10499 SettingsViewController.$inject = ['$state', 'AeConfig'];
10469 10500
10470 function SettingsViewController($state) {
10501 function SettingsViewController($state, AeConfig) {
10471 10502 this.$state = $state;
10503 this.AeConfig = AeConfig;
10472 10504 console.info('SettingsViewController');
10473 10505 }
10474 10506
10475 10507 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10476 10508 // #
10477 10509 // # This program is free software: you can redistribute it and/or modify
10478 10510 // # it under the terms of the GNU Affero General Public License, version 3
10479 10511 // # (only), as published by the Free Software Foundation.
10480 10512 // #
10481 10513 // # This program is distributed in the hope that it will be useful,
10482 10514 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10483 10515 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10484 10516 // # GNU General Public License for more details.
10485 10517 // #
10486 10518 // # You should have received a copy of the GNU Affero General Public License
10487 10519 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10488 10520 // #
10489 10521 // # This program is dual-licensed. If you wish to learn more about the
10490 10522 // # AppEnlight Enterprise Edition, including its added features, Support
10491 10523 // # services, and proprietary license terms, please see
10492 10524 // # https://rhodecode.com/licenses/
10493 10525
10494 10526 angular.module('appenlight.components.userAlertChannelsEmailNewView', [])
10495 10527 .component('userAlertChannelsEmailNewView', {
10496 10528 templateUrl: 'components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
10497 10529 controller: AlertChannelsEmailController
10498 10530 });
10499 10531
10500 10532 AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
10501 10533
10502 10534 function AlertChannelsEmailController($state, userSelfPropertyResource) {
10503 10535
10504 10536 var vm = this;
10505 10537 vm.$state = $state;
10506 10538 vm.loading = {email: false};
10507 10539 vm.form = {};
10508 10540
10509 10541 vm.createChannel = function () {
10510 10542 vm.loading.email = true;
10511 10543
10512 10544 userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
10513 10545 //vm.loading.email = false;
10514 10546 //setServerValidation(vm.channelForm);
10515 10547 //vm.form = {};
10516 10548 $state.go('user.alert_channels.list');
10517 10549 }, function (response) {
10518 10550 if (response.status == 422) {
10519 10551 setServerValidation(vm.channelForm, response.data);
10520 10552 }
10521 10553 vm.loading.email = false;
10522 10554 });
10523 10555 }
10524 10556 }
10525 10557
10526 10558 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10527 10559 // #
10528 10560 // # This program is free software: you can redistribute it and/or modify
10529 10561 // # it under the terms of the GNU Affero General Public License, version 3
10530 10562 // # (only), as published by the Free Software Foundation.
10531 10563 // #
10532 10564 // # This program is distributed in the hope that it will be useful,
10533 10565 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10534 10566 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10535 10567 // # GNU General Public License for more details.
10536 10568 // #
10537 10569 // # You should have received a copy of the GNU Affero General Public License
10538 10570 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10539 10571 // #
10540 10572 // # This program is dual-licensed. If you wish to learn more about the
10541 10573 // # AppEnlight Enterprise Edition, including its added features, Support
10542 10574 // # services, and proprietary license terms, please see
10543 10575 // # https://rhodecode.com/licenses/
10544 10576
10545 10577 angular.module('appenlight.components.userAlertChannelsListView', [])
10546 10578 .component('userAlertChannelsListView', {
10547 10579 templateUrl: 'components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
10548 10580 controller: userAlertChannelsListViewController
10549 10581 });
10550 10582
10551 10583 userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
10552 10584
10553 10585 function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
10554 10586
10555 10587 var vm = this;
10556 10588 vm.$state = $state;
10557 10589 vm.loading = {channels: true, applications: true, actions:true};
10558 10590
10559 10591 vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
10560 10592 function (data) {
10561 10593 vm.loading.channels = false;
10562 10594 });
10563 10595
10564 10596 vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
10565 10597 function (data) {
10566 10598 vm.loading.actions = false;
10567 10599 });
10568 10600
10569 10601 vm.applications = applicationsNoIdResource.query({permission: 'view'},
10570 10602 function (data) {
10571 10603 vm.loading.applications = false;
10572 10604 });
10573 10605
10574 10606 var allOps = {
10575 10607 'eq': 'Equal',
10576 10608 'ne': 'Not equal',
10577 10609 'ge': 'Greater or equal',
10578 10610 'gt': 'Greater than',
10579 10611 'le': 'Lesser or equal',
10580 10612 'lt': 'Lesser than',
10581 10613 'startswith': 'Starts with',
10582 10614 'endswith': 'Ends with',
10583 10615 'contains': 'Contains'
10584 10616 };
10585 10617
10586 10618 var fieldOps = {};
10587 10619 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
10588 10620 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
10589 10621 fieldOps['duration'] = ['ge', 'le'];
10590 10622 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
10591 10623 'contains'];
10592 10624 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
10593 10625 'contains'];
10594 10626 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
10595 10627 'contains'];
10596 10628 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
10597 10629 'contains'];
10598 10630 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
10599 10631
10600 10632 var possibleFields = {
10601 10633 '__AND__': 'All met (composite rule)',
10602 10634 '__OR__': 'One met (composite rule)',
10603 10635 '__NOT__': 'Not met (composite rule)',
10604 10636 'http_status': 'HTTP Status',
10605 10637 'duration': 'Request duration',
10606 10638 'group:priority': 'Group -> Priority',
10607 10639 'url_domain': 'Domain',
10608 10640 'url_path': 'URL Path',
10609 10641 'error': 'Error',
10610 10642 'tags:server_name': 'Tag -> Server name',
10611 10643 'group:occurences': 'Group -> Occurences'
10612 10644 };
10613 10645
10614 10646 vm.ruleDefinitions = {
10615 10647 fieldOps: fieldOps,
10616 10648 allOps: allOps,
10617 10649 possibleFields: possibleFields
10618 10650 };
10619 10651
10620 10652 vm.addAction = function (channel) {
10621 10653
10622 10654 userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
10623 10655 vm.alertActions.push(data);
10624 10656 }, function (response) {
10625 10657 if (response.status == 422) {
10626 10658
10627 10659 }
10628 10660 });
10629 10661 };
10630 10662
10631 10663 vm.updateChannel = function (channel, subKey) {
10632 10664 var params = {
10633 10665 key: 'alert_channels',
10634 10666 channel_name: channel['channel_name'],
10635 10667 channel_value: channel['channel_value']
10636 10668 };
10637 10669 var toUpdate = {};
10638 10670 if (['daily_digest', 'send_alerts'].indexOf(subKey) !== -1) {
10639 10671 toUpdate[subKey] = !channel[subKey];
10640 10672 }
10641 10673 userSelfPropertyResource.update(params, toUpdate, function (data) {
10642 10674 _.extend(channel, data);
10643 10675 });
10644 10676 };
10645 10677
10646 10678 vm.removeChannel = function (channel) {
10647 10679
10648 10680 userSelfPropertyResource.delete({
10649 10681 key: 'alert_channels',
10650 10682 channel_name: channel.channel_name,
10651 10683 channel_value: channel.channel_value
10652 10684 }, function () {
10653 10685 vm.alertChannels = _.filter(vm.alertChannels, function(item){
10654 10686 return item != channel;
10655 10687 });
10656 10688 });
10657 10689
10658 10690 }
10659 10691
10660 10692 }
10661 10693
10662 10694 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10663 10695 // #
10664 10696 // # This program is free software: you can redistribute it and/or modify
10665 10697 // # it under the terms of the GNU Affero General Public License, version 3
10666 10698 // # (only), as published by the Free Software Foundation.
10667 10699 // #
10668 10700 // # This program is distributed in the hope that it will be useful,
10669 10701 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10670 10702 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10671 10703 // # GNU General Public License for more details.
10672 10704 // #
10673 10705 // # You should have received a copy of the GNU Affero General Public License
10674 10706 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10675 10707 // #
10676 10708 // # This program is dual-licensed. If you wish to learn more about the
10677 10709 // # AppEnlight Enterprise Edition, including its added features, Support
10678 10710 // # services, and proprietary license terms, please see
10679 10711 // # https://rhodecode.com/licenses/
10680 10712
10681 10713 angular.module('appenlight.components.userAuthTokensView', [])
10682 10714 .component('userAuthTokensView', {
10683 10715 templateUrl: 'components/views/user-auth-tokens-view/user-auth-tokens-view.html',
10684 10716 controller: userAuthTokensViewController
10685 10717 });
10686 10718
10687 10719 userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
10688 10720
10689 10721 function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
10690 10722
10691 10723 var vm = this;
10692 10724 vm.$state = $state;
10693 10725 vm.loading = {tokens: true};
10694 10726
10695 10727 vm.expireOptions = AeConfig.timeOptions;
10696 10728
10697 10729 vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
10698 10730 function (data) {
10699 10731 vm.loading.tokens = false;
10700 10732 });
10701 10733
10702 10734 vm.addToken = function () {
10703 10735 vm.loading.tokens = true;
10704 10736 userSelfPropertyResource.save({key: 'auth_tokens'},
10705 10737 vm.form,
10706 10738 function (data) {
10707 10739 vm.loading.tokens = false;
10708 10740 setServerValidation(vm.TokenForm);
10709 10741 vm.form = {};
10710 10742 vm.tokens.push(data);
10711 10743 }, function (response) {
10712 10744 vm.loading.tokens = false;
10713 10745 if (response.status == 422) {
10714 10746 setServerValidation(vm.TokenForm, response.data);
10715 10747 }
10716 10748 })
10717 10749 };
10718 10750
10719 10751 vm.removeToken = function (token) {
10720 10752 userSelfPropertyResource.delete({
10721 10753 key: 'auth_tokens',
10722 10754 token: token.token
10723 10755 },
10724 10756 function () {
10725 10757 var index = vm.tokens.indexOf(token);
10726 10758 if (index !== -1) {
10727 10759 vm.tokens.splice(index, 1);
10728 10760 }
10729 10761 })
10730 10762 }
10731 10763 }
10732 10764
10733 10765 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10734 10766 // #
10735 10767 // # This program is free software: you can redistribute it and/or modify
10736 10768 // # it under the terms of the GNU Affero General Public License, version 3
10737 10769 // # (only), as published by the Free Software Foundation.
10738 10770 // #
10739 10771 // # This program is distributed in the hope that it will be useful,
10740 10772 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10741 10773 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10742 10774 // # GNU General Public License for more details.
10743 10775 // #
10744 10776 // # You should have received a copy of the GNU Affero General Public License
10745 10777 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10746 10778 // #
10747 10779 // # This program is dual-licensed. If you wish to learn more about the
10748 10780 // # AppEnlight Enterprise Edition, including its added features, Support
10749 10781 // # services, and proprietary license terms, please see
10750 10782 // # https://rhodecode.com/licenses/
10751 10783
10752 10784 angular.module('appenlight.components.userIdentitiesView', [])
10753 10785 .component('userIdentitiesView', {
10754 10786 templateUrl: 'components/views/user-identities-view/user-identities-view.html',
10755 10787 controller: UserIdentitiesController
10756 10788 });
10757 10789
10758 10790 UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
10759 10791
10760 10792 function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
10761 10793
10762 10794 var vm = this;
10763 10795 vm.$state = $state;
10764 10796 vm.AeConfig = AeConfig;
10765 10797 vm.loading = {identities: true};
10766 10798
10767 10799 vm.identities = userSelfPropertyResource.query(
10768 10800 {key: 'external_identities'},
10769 10801 function (data) {
10770 10802 vm.loading.identities = false;
10771 10803
10772 10804 });
10773 10805
10774 10806 vm.removeProvider = function (provider) {
10775 10807
10776 10808 userSelfPropertyResource.delete(
10777 10809 {
10778 10810 key: 'external_identities',
10779 10811 provider: provider.provider,
10780 10812 id: provider.id
10781 10813 },
10782 10814 function (status) {
10783 10815 if (status){
10784 10816 vm.identities = _.filter(vm.identities, function (item) {
10785 10817 return item != provider
10786 10818 });
10787 10819 }
10788 10820
10789 10821 });
10790 10822 }
10791 10823 }
10792 10824
10793 10825 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10794 10826 // #
10795 10827 // # This program is free software: you can redistribute it and/or modify
10796 10828 // # it under the terms of the GNU Affero General Public License, version 3
10797 10829 // # (only), as published by the Free Software Foundation.
10798 10830 // #
10799 10831 // # This program is distributed in the hope that it will be useful,
10800 10832 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10801 10833 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10802 10834 // # GNU General Public License for more details.
10803 10835 // #
10804 10836 // # You should have received a copy of the GNU Affero General Public License
10805 10837 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10806 10838 // #
10807 10839 // # This program is dual-licensed. If you wish to learn more about the
10808 10840 // # AppEnlight Enterprise Edition, including its added features, Support
10809 10841 // # services, and proprietary license terms, please see
10810 10842 // # https://rhodecode.com/licenses/
10811 10843
10812 10844 angular.module('appenlight.components.userPasswordView', [])
10813 10845 .component('userPasswordView', {
10814 10846 templateUrl: 'components/views/user-password-view/user-password-view.html',
10815 10847 controller: UserPasswordViewController
10816 10848 });
10817 10849
10818 10850 UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
10819 10851
10820 10852 function UserPasswordViewController($state, userSelfPropertyResource) {
10821 10853
10822 10854 var vm = this;
10823 10855 vm.$state = $state;
10824 10856 vm.loading = {password: false};
10825 10857 vm.form = {};
10826 10858
10827 10859 vm.updatePassword = function () {
10828 10860 vm.loading.password = true;
10829 10861
10830 10862 userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
10831 10863 vm.loading.password = false;
10832 10864 vm.form = {};
10833 10865 setServerValidation(vm.passwordForm);
10834 10866 }, function (response) {
10835 10867 if (response.status == 422) {
10836 10868
10837 10869 setServerValidation(vm.passwordForm, response.data);
10838 10870
10839 10871 }
10840 10872 vm.loading.password = false;
10841 10873 });
10842 10874 }
10843 10875 }
10844 10876
10845 10877 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10846 10878 // #
10847 10879 // # This program is free software: you can redistribute it and/or modify
10848 10880 // # it under the terms of the GNU Affero General Public License, version 3
10849 10881 // # (only), as published by the Free Software Foundation.
10850 10882 // #
10851 10883 // # This program is distributed in the hope that it will be useful,
10852 10884 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10853 10885 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10854 10886 // # GNU General Public License for more details.
10855 10887 // #
10856 10888 // # You should have received a copy of the GNU Affero General Public License
10857 10889 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10858 10890 // #
10859 10891 // # This program is dual-licensed. If you wish to learn more about the
10860 10892 // # AppEnlight Enterprise Edition, including its added features, Support
10861 10893 // # services, and proprietary license terms, please see
10862 10894 // # https://rhodecode.com/licenses/
10863 10895
10864 10896 angular.module('appenlight.components.userProfileView', [])
10865 10897 .component('userProfileView', {
10866 10898 templateUrl: 'components/views/user-profile-view/user-profile-view.html',
10867 10899 controller: UserProfileViewController
10868 10900 });
10869 10901
10870 10902 UserProfileViewController.$inject = ['$state', 'userSelfResource'];
10871 10903
10872 10904 function UserProfileViewController($state, userSelfResource) {
10873 10905
10874 10906 var vm = this;
10875 10907 vm.$state = $state;
10876 10908 vm.loading = {profile: true};
10877 10909
10878 10910 vm.user = userSelfResource.get(null, function (data) {
10879 10911 vm.loading.profile = false;
10880 10912
10881 10913 });
10882 10914
10883 10915 vm.updateProfile = function () {
10884 10916 vm.loading.profile = true;
10885 10917
10886 10918
10887 10919 vm.user.$update(null, function () {
10888 10920 vm.loading.profile = false;
10889 10921 setServerValidation(vm.profileForm);
10890 10922 }, function (response) {
10891 10923 if (response.status == 422) {
10892 10924 setServerValidation(vm.profileForm, response.data);
10893 10925 }
10894 10926 vm.loading.profile = false;
10895 10927 });
10896 10928 }
10897 10929 }
10898 10930
10899 10931 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10900 10932 // #
10901 10933 // # This program is free software: you can redistribute it and/or modify
10902 10934 // # it under the terms of the GNU Affero General Public License, version 3
10903 10935 // # (only), as published by the Free Software Foundation.
10904 10936 // #
10905 10937 // # This program is distributed in the hope that it will be useful,
10906 10938 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10907 10939 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10908 10940 // # GNU General Public License for more details.
10909 10941 // #
10910 10942 // # You should have received a copy of the GNU Affero General Public License
10911 10943 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10912 10944 // #
10913 10945 // # This program is dual-licensed. If you wish to learn more about the
10914 10946 // # AppEnlight Enterprise Edition, including its added features, Support
10915 10947 // # services, and proprietary license terms, please see
10916 10948 // # https://rhodecode.com/licenses/
10917 10949
10918 10950 var aeconfig = angular.module('appenlight.config', []);
10919 10951 aeconfig.factory('AeConfig', function () {
10920 10952 var obj = {};
10921 10953 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
10922 10954 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
10923 10955 obj.plugins = decodeEncodedJSON(window.AE.plugins);
10924 obj.topNav = decodeEncodedJSON(window.AE.topNav);
10956 obj.topNav = {
10957 menuDashboardsItems: [],
10958 menuReportsItems: [],
10959 menuLogsItems: [],
10960 menuSettingsItems: [],
10961 menuAdminItems: []
10962 };
10963 obj.settingsNav = {
10964 menuApplicationsItems: [],
10965 menuUserSettingsItems: [],
10966 menuNotificationsItems: []
10967 };
10968 obj.adminNav = {};
10925 10969 obj.ws_url = window.AE.ws_url;
10926 10970 obj.urls = window.AE.urls;
10927 10971 // set keys on values because we wont be able to retrieve them everywhere
10928 10972 for (var key in obj.timeOptions) {
10929 10973 obj.timeOptions[key]['key'] = key;
10930 10974 }
10931 10975 console.info('config', obj);
10932 10976 return obj;
10933 10977 });
10934 10978
10935 10979 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
10936 10980 // #
10937 10981 // # This program is free software: you can redistribute it and/or modify
10938 10982 // # it under the terms of the GNU Affero General Public License, version 3
10939 10983 // # (only), as published by the Free Software Foundation.
10940 10984 // #
10941 10985 // # This program is distributed in the hope that it will be useful,
10942 10986 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
10943 10987 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10944 10988 // # GNU General Public License for more details.
10945 10989 // #
10946 10990 // # You should have received a copy of the GNU Affero General Public License
10947 10991 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
10948 10992 // #
10949 10993 // # This program is dual-licensed. If you wish to learn more about the
10950 10994 // # AppEnlight Enterprise Edition, including its added features, Support
10951 10995 // # services, and proprietary license terms, please see
10952 10996 // # https://rhodecode.com/licenses/
10953 10997
10954 10998 angular.module('appenlight.controllers')
10955 10999 .controller('BitbucketIntegrationCtrl', BitbucketIntegrationCtrl)
10956 11000
10957 11001 BitbucketIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
10958 11002
10959 11003 function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
10960 11004 var vm = this;
10961 11005 vm.loading = true;
10962 11006 vm.assignees = [];
10963 11007 vm.report = report;
10964 11008 vm.integrationName = integrationName;
10965 11009 vm.statuses = [];
10966 11010 vm.priorities = [];
10967 11011 vm.error_messages = [];
10968 11012 vm.form = {
10969 11013 content: '\n' +
10970 11014 'Issue created for report: ' +
10971 11015 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
10972 11016 };
10973 11017
10974 11018 vm.fetchInfo = function () {
10975 11019 integrationResource.get({
10976 11020 resourceId: vm.report.resource_id,
10977 11021 action: 'info',
10978 11022 integration: vm.integrationName
10979 11023 }, null,
10980 11024 function (data) {
10981 11025 vm.loading = false;
10982 11026 if (data.error_messages) {
10983 11027 vm.error_messages = data.error_messages;
10984 11028 }
10985 11029 vm.assignees = data.assignees;
10986 11030 vm.priorities = data.priorities;
10987 11031 vm.form.responsible = vm.assignees[0];
10988 11032 vm.form.priority = vm.priorities[0];
10989 11033 }, function (error_data) {
10990 11034 if (error_data.data.error_messages) {
10991 11035 vm.error_messages = error_data.data.error_messages;
10992 11036 }
10993 11037 else {
10994 11038 vm.error_messages = ['There was a problem processing your request'];
10995 11039 }
10996 11040 });
10997 11041 };
10998 11042 vm.ok = function () {
10999 11043 vm.loading = true;
11000 11044 vm.form.group_id = vm.report.group_id;
11001 11045 integrationResource.save({
11002 11046 resourceId: vm.report.resource_id,
11003 11047 action: 'create-issue',
11004 11048 integration: vm.integrationName
11005 11049 }, vm.form,
11006 11050 function (data) {
11007 11051 vm.loading = false;
11008 11052 if (data.error_messages) {
11009 11053 vm.error_messages = data.error_messages;
11010 11054 }
11011 11055 if (data !== false) {
11012 11056 $uibModalInstance.dismiss('success');
11013 11057 }
11014 11058 }, function (error_data) {
11015 11059 if (error_data.data.error_messages) {
11016 11060 vm.error_messages = error_data.data.error_messages;
11017 11061 }
11018 11062 else {
11019 11063 vm.error_messages = ['There was a problem processing your request'];
11020 11064 }
11021 11065 });
11022 11066 };
11023 11067 vm.cancel = function () {
11024 11068 $uibModalInstance.dismiss('cancel');
11025 11069 };
11026 11070 vm.fetchInfo();
11027 11071 }
11028 11072
11029 11073 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11030 11074 // #
11031 11075 // # This program is free software: you can redistribute it and/or modify
11032 11076 // # it under the terms of the GNU Affero General Public License, version 3
11033 11077 // # (only), as published by the Free Software Foundation.
11034 11078 // #
11035 11079 // # This program is distributed in the hope that it will be useful,
11036 11080 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11037 11081 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11038 11082 // # GNU General Public License for more details.
11039 11083 // #
11040 11084 // # You should have received a copy of the GNU Affero General Public License
11041 11085 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11042 11086 // #
11043 11087 // # This program is dual-licensed. If you wish to learn more about the
11044 11088 // # AppEnlight Enterprise Edition, including its added features, Support
11045 11089 // # services, and proprietary license terms, please see
11046 11090 // # https://rhodecode.com/licenses/
11047 11091
11048 11092 angular.module('appenlight.controllers')
11049 11093 .controller('GithubIntegrationCtrl', GithubIntegrationCtrl);
11050 11094
11051 11095 GithubIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
11052 11096
11053 11097 function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
11054 11098 var vm = this;
11055 11099 vm.loading = true;
11056 11100 vm.assignees = [];
11057 11101 vm.report = report;
11058 11102 vm.integrationName = integrationName;
11059 11103 vm.statuses = [];
11060 11104 vm.assignees = [];
11061 11105 vm.error_messages = [];
11062 11106 vm.form = {
11063 11107 content: '\n' +
11064 11108 'Issue created for report: ' +
11065 11109 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
11066 11110 };
11067 11111
11068 11112 vm.fetchInfo = function () {
11069 11113 integrationResource.get({
11070 11114 resourceId: vm.report.resource_id,
11071 11115 action: 'info',
11072 11116 integration: vm.integrationName
11073 11117 }, null,
11074 11118 function (data) {
11075 11119 vm.loading = false;
11076 11120 if (data.error_messages) {
11077 11121 vm.error_messages = data.error_messages;
11078 11122 }
11079 11123 else {
11080 11124 vm.assignees = data.assignees;
11081 11125 vm.statuses = data.statuses;
11082 11126 vm.form.responsible = vm.assignees[0];
11083 11127 vm.form.status = vm.statuses[0];
11084 11128 }
11085 11129 }, function (error_data) {
11086 11130 if (error_data.data.error_messages) {
11087 11131 vm.error_messages = error_data.data.error_messages;
11088 11132 }
11089 11133 else {
11090 11134 vm.error_messages = ['There was a problem processing your request'];
11091 11135 }
11092 11136 });
11093 11137 };
11094 11138 vm.ok = function () {
11095 11139 vm.loading = true;
11096 11140 vm.form.group_id = vm.report.group_id;
11097 11141 integrationResource.save({
11098 11142 resourceId: vm.report.resource_id,
11099 11143 action: 'create-issue',
11100 11144 integration: vm.integrationName
11101 11145 }, vm.form,
11102 11146 function (data) {
11103 11147 vm.loading = false;
11104 11148 if (data.error_messages) {
11105 11149 vm.error_messages = data.error_messages;
11106 11150 }
11107 11151 else {
11108 11152 $uibModalInstance.dismiss('success');
11109 11153 }
11110 11154 }, function (error_data) {
11111 11155 if (error_data.data.error_messages) {
11112 11156 vm.error_messages = error_data.data.error_messages;
11113 11157 }
11114 11158 else {
11115 11159 vm.error_messages = ['There was a problem processing your request'];
11116 11160 }
11117 11161 });
11118 11162 };
11119 11163 vm.cancel = function () {
11120 11164 $uibModalInstance.dismiss('cancel');
11121 11165 };
11122 11166 vm.fetchInfo();
11123 11167 }
11124 11168
11125 11169 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11126 11170 // #
11127 11171 // # This program is free software: you can redistribute it and/or modify
11128 11172 // # it under the terms of the GNU Affero General Public License, version 3
11129 11173 // # (only), as published by the Free Software Foundation.
11130 11174 // #
11131 11175 // # This program is distributed in the hope that it will be useful,
11132 11176 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11133 11177 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11134 11178 // # GNU General Public License for more details.
11135 11179 // #
11136 11180 // # You should have received a copy of the GNU Affero General Public License
11137 11181 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11138 11182 // #
11139 11183 // # This program is dual-licensed. If you wish to learn more about the
11140 11184 // # AppEnlight Enterprise Edition, including its added features, Support
11141 11185 // # services, and proprietary license terms, please see
11142 11186 // # https://rhodecode.com/licenses/
11143 11187
11144 11188 angular.module('appenlight.controllers')
11145 11189 .controller('JiraIntegrationCtrl', JiraIntegrationCtrl)
11146 11190
11147 11191 JiraIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
11148 11192
11149 11193 function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
11150 11194 var vm = this;
11151 11195 vm.loading = true;
11152 11196 vm.assignees = [];
11153 11197 vm.report = report;
11154 11198 vm.integrationName = integrationName;
11155 11199 vm.statuses = [];
11156 11200 vm.priorities = [];
11157 11201 vm.issue_types = [];
11158 11202 vm.error_messages = [];
11159 11203 vm.form = {
11160 11204 content: '\n' +
11161 11205 'Issue created for report: ' +
11162 11206 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
11163 11207 };
11164 11208
11165 11209 vm.fetchInfo = function () {
11166 11210 integrationResource.get({
11167 11211 resourceId: vm.report.resource_id,
11168 11212 action: 'info',
11169 11213 integration: vm.integrationName
11170 11214 }, null,
11171 11215 function (data) {
11172 11216 vm.loading = false;
11173 11217 if (data.error_messages) {
11174 11218 vm.error_messages = data.error_messages;
11175 11219 }
11176 11220 vm.assignees = data.assignees;
11177 11221 vm.priorities = data.priorities;
11178 11222 vm.issue_types = data.issue_types;
11179 11223 vm.form.issue_type = vm.issue_types[0];
11180 11224 vm.form.responsible = vm.assignees[0];
11181 11225 vm.form.priority = vm.priorities[0];
11182 11226 }, function (error_data) {
11183 11227
11184 11228 if (error_data.data.error_messages) {
11185 11229 vm.error_messages = error_data.data.error_messages;
11186 11230 }
11187 11231 else {
11188 11232 vm.error_messages = ['There was a problem processing your request'];
11189 11233 }
11190 11234 });
11191 11235 };
11192 11236 vm.ok = function () {
11193 11237 vm.loading = true;
11194 11238 vm.form.group_id = vm.report.group_id;
11195 11239 integrationResource.save({
11196 11240 resourceId: vm.report.resource_id,
11197 11241 action: 'create-issue',
11198 11242 integration: vm.integrationName
11199 11243 }, vm.form,
11200 11244 function (data) {
11201 11245 vm.loading = false;
11202 11246 if (data.error_messages) {
11203 11247 vm.error_messages = data.error_messages;
11204 11248 }
11205 11249 if (data !== false) {
11206 11250 $uibModalInstance.dismiss('success');
11207 11251 }
11208 11252 }, function (error_data) {
11209 11253 if (error_data.data.error_messages) {
11210 11254 vm.error_messages = error_data.data.error_messages;
11211 11255 }
11212 11256 else {
11213 11257 vm.error_messages = ['There was a problem processing your request'];
11214 11258 }
11215 11259 });
11216 11260 };
11217 11261 vm.cancel = function () {
11218 11262 $uibModalInstance.dismiss('cancel');
11219 11263 };
11220 11264 vm.fetchInfo();
11221 11265 }
11222 11266
11223 11267 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11224 11268 // #
11225 11269 // # This program is free software: you can redistribute it and/or modify
11226 11270 // # it under the terms of the GNU Affero General Public License, version 3
11227 11271 // # (only), as published by the Free Software Foundation.
11228 11272 // #
11229 11273 // # This program is distributed in the hope that it will be useful,
11230 11274 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11231 11275 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11232 11276 // # GNU General Public License for more details.
11233 11277 // #
11234 11278 // # You should have received a copy of the GNU Affero General Public License
11235 11279 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11236 11280 // #
11237 11281 // # This program is dual-licensed. If you wish to learn more about the
11238 11282 // # AppEnlight Enterprise Edition, including its added features, Support
11239 11283 // # services, and proprietary license terms, please see
11240 11284 // # https://rhodecode.com/licenses/
11241 11285
11242 11286 angular.module('appenlight.controllers').controller('AssignReportCtrl', AssignReportCtrl);
11243 11287 AssignReportCtrl.$inject = ['$uibModalInstance', 'reportGroupPropertyResource', 'report'];
11244 11288
11245 11289 function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report) {
11246 11290 var vm = this;
11247 11291 vm.loading = true;
11248 11292 vm.assignedUsers = [];
11249 11293 vm.unAssignedUsers = [];
11250 11294 vm.report = report;
11251 11295 vm.fetchAssignments = function () {
11252 11296 reportGroupPropertyResource.get({
11253 11297 groupId: vm.report.group_id,
11254 11298 key: 'assigned_users'
11255 11299 }, null,
11256 11300 function (data) {
11257 11301 vm.assignedUsers = data.assigned;
11258 11302 vm.unAssignedUsers = data.unassigned;
11259 11303 vm.loading = false;
11260 11304 });
11261 11305 }
11262 11306
11263 11307 vm.reassignUser = function (user) {
11264 11308 var is_assigned = vm.assignedUsers.indexOf(user);
11265 11309 if (is_assigned != -1) {
11266 11310 vm.assignedUsers.splice(is_assigned, 1);
11267 11311 vm.unAssignedUsers.push(user);
11268 11312 return
11269 11313 }
11270 11314 var is_unassigned = vm.unAssignedUsers.indexOf(user);
11271 11315 if (is_unassigned != -1) {
11272 11316 vm.unAssignedUsers.splice(is_unassigned, 1);
11273 11317 vm.assignedUsers.push(user);
11274 11318 return
11275 11319 }
11276 11320 }
11277 11321 vm.updateAssignments = function () {
11278 11322 var post = {'unassigned': [], 'assigned': []};
11279 11323 _.each(vm.assignedUsers, function (u) {
11280 11324 post['assigned'].push(u.user_name)
11281 11325 });
11282 11326 _.each(vm.unAssignedUsers, function (u) {
11283 11327 post['unassigned'].push(u.user_name)
11284 11328 });
11285 11329 vm.loading = true;
11286 11330 reportGroupPropertyResource.update({
11287 11331 groupId: vm.report.group_id,
11288 11332 key: 'assigned_users'
11289 11333 }, post,
11290 11334 function (data) {
11291 11335 vm.loading = false;
11292 11336 $uibModalInstance.close(vm.report);
11293 11337 });
11294 11338 };
11295 11339
11296 11340
11297 11341 vm.ok = function () {
11298 11342 vm.updateAssignments();
11299 11343 };
11300 11344
11301 11345 vm.cancel = function () {
11302 11346 $uibModalInstance.dismiss('cancel');
11303 11347 };
11304 11348
11305 11349 vm.fetchAssignments();
11306 11350
11307 11351 }
11308 11352
11309 11353 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11310 11354 // #
11311 11355 // # This program is free software: you can redistribute it and/or modify
11312 11356 // # it under the terms of the GNU Affero General Public License, version 3
11313 11357 // # (only), as published by the Free Software Foundation.
11314 11358 // #
11315 11359 // # This program is distributed in the hope that it will be useful,
11316 11360 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11317 11361 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11318 11362 // # GNU General Public License for more details.
11319 11363 // #
11320 11364 // # You should have received a copy of the GNU Affero General Public License
11321 11365 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11322 11366 // #
11323 11367 // # This program is dual-licensed. If you wish to learn more about the
11324 11368 // # AppEnlight Enterprise Edition, including its added features, Support
11325 11369 // # services, and proprietary license terms, please see
11326 11370 // # https://rhodecode.com/licenses/
11327 11371
11328 11372 // This code is inspired by https://github.com/jettro/c3-angular-sample/tree/master/js
11329 11373 // License is MIT
11330 11374
11331 11375
11332 11376 angular.module('appenlight.directives.c3chart', [])
11333 11377 .controller('ChartCtrl', ['$scope', '$timeout', function ($scope, $timeout) {
11334 11378 $scope.chart = null;
11335 11379 this.showGraph = function () {
11336 11380 var config = angular.copy($scope.config);
11337 11381 var firstLoad = true;
11338 11382 config.bindto = "#" + $scope.domid;
11339 11383 var originalXTickCount = null;
11340 11384 if ($scope.data && $scope.config) {
11341 11385 if (!_.isEmpty($scope.data)) {
11342 11386 _.extend(config.data, angular.copy($scope.data));
11343 11387 }
11344 11388
11345 11389 config.onresized = function () {
11346 11390 if (this.currentWidth < 400){
11347 11391 $scope.chart.internal.config.axis_x_tick_culling_max = 3;
11348 11392 }
11349 11393 else if (this.currentWidth < 600){
11350 11394 $scope.chart.internal.config.axis_x_tick_culling_max = 5;
11351 11395 }
11352 11396 else{
11353 11397 $scope.chart.internal.config.axis_x_tick_culling_max = originalXTickCount;
11354 11398 }
11355 11399 $scope.chart.flush();
11356 11400 };
11357 11401
11358 11402
11359 11403 $scope.chart = c3.generate(config);
11360 11404 originalXTickCount = $scope.chart.internal.config.axis_x_tick_culling_max;
11361 11405 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11362 11406 }
11363 11407
11364 11408 if ($scope.update) {
11365 11409
11366 11410 $scope.$watch('data', function () {
11367 11411 if (!firstLoad) {
11368 11412
11369 11413 $scope.chart.load(angular.copy($scope.data), {unload: true});
11370 11414 if (typeof $scope.data.groups != 'undefined') {
11371 11415
11372 11416 $scope.chart.groups($scope.data.groups);
11373 11417 }
11374 11418 if (typeof $scope.data.names != 'undefined') {
11375 11419
11376 11420 $scope.chart.data.names($scope.data.names);
11377 11421 }
11378 11422 $scope.chart.flush();
11379 11423 }
11380 11424 }, true);
11381 11425 }
11382 11426 $scope.$watch('config.regions', function (newValue, oldValue) {
11383 11427 if (newValue === oldValue) {
11384 11428 return
11385 11429 }
11386 11430 if (typeof $scope.config.regions != 'undefined') {
11387 11431
11388 11432 $scope.chart.regions($scope.config.regions);
11389 11433 }
11390 11434 });
11391 11435
11392 11436 firstLoad = false;
11393 11437 $scope.$watch('resizetrigger', function (newValue, oldValue) {
11394 11438 if (newValue !== oldValue) {
11395 11439 $timeout(function () {
11396 11440 $scope.chart.resize();
11397 11441 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11398 11442 });
11399 11443 }
11400 11444 });
11401 11445 };
11402 11446 }])
11403 11447 .directive('c3chart', function ($timeout) {
11404 11448 var chartLinker = function (scope, element, attrs, chartCtrl) {
11405 11449 // Trick to wait for all rendering of the DOM to be finished.
11406 11450 // then we can tell c3js to "connect" to our dom node
11407 11451 $timeout(function () {
11408 11452 chartCtrl.showGraph()
11409 11453 });
11410 11454
11411 11455 scope.$on("$destroy", function () {
11412 11456 if (scope.chart !== null) {
11413 11457 scope.chart = scope.chart.destroy();
11414 11458 delete element;
11415 11459 delete scope.chart;
11416 11460 }
11417 11461 }
11418 11462 );
11419 11463 };
11420 11464 return {
11421 11465 "restrict": "E",
11422 11466 "controller": "ChartCtrl",
11423 11467 "scope": {
11424 11468 "domid": "@domid",
11425 11469 "config": "=config",
11426 11470 "data": "=data",
11427 11471 "resizetrigger": "=resizetrigger",
11428 11472 "update": "=update"
11429 11473 },
11430 11474 "template": "<div id='{{domid}}' class='chart'></div>",
11431 11475 "replace": true,
11432 11476 "link": chartLinker
11433 11477 }
11434 11478 });
11435 11479
11436 11480 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11437 11481 // #
11438 11482 // # This program is free software: you can redistribute it and/or modify
11439 11483 // # it under the terms of the GNU Affero General Public License, version 3
11440 11484 // # (only), as published by the Free Software Foundation.
11441 11485 // #
11442 11486 // # This program is distributed in the hope that it will be useful,
11443 11487 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11444 11488 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11445 11489 // # GNU General Public License for more details.
11446 11490 // #
11447 11491 // # You should have received a copy of the GNU Affero General Public License
11448 11492 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11449 11493 // #
11450 11494 // # This program is dual-licensed. If you wish to learn more about the
11451 11495 // # AppEnlight Enterprise Edition, including its added features, Support
11452 11496 // # services, and proprietary license terms, please see
11453 11497 // # https://rhodecode.com/licenses/
11454 11498
11455 11499 angular.module('appenlight.directives.confirmValidate', []).
11456 11500 directive('confirmValidate', [function () {
11457 11501 return {
11458 11502 restrict: 'A',
11459 11503 require: 'ngModel',
11460 11504 link: function ($scope, elem, attrs, ngModel) {
11461 11505 ngModel.$validators.confirm = function (modelValue, viewValue) {
11462 11506 var value = modelValue || viewValue;
11463 11507
11464 11508 if (value.toLowerCase() == 'confirm') {
11465 11509 return true;
11466 11510 }
11467 11511 return false;
11468 11512 }
11469 11513 }
11470 11514 }
11471 11515 }])
11472 11516
11473 11517 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11474 11518 // #
11475 11519 // # This program is free software: you can redistribute it and/or modify
11476 11520 // # it under the terms of the GNU Affero General Public License, version 3
11477 11521 // # (only), as published by the Free Software Foundation.
11478 11522 // #
11479 11523 // # This program is distributed in the hope that it will be useful,
11480 11524 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11481 11525 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11482 11526 // # GNU General Public License for more details.
11483 11527 // #
11484 11528 // # You should have received a copy of the GNU Affero General Public License
11485 11529 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11486 11530 // #
11487 11531 // # This program is dual-licensed. If you wish to learn more about the
11488 11532 // # AppEnlight Enterprise Edition, including its added features, Support
11489 11533 // # services, and proprietary license terms, please see
11490 11534 // # https://rhodecode.com/licenses/
11491 11535
11492 11536 angular.module('appenlight.directives.focus', []).directive('focus', function () {
11493 11537 return function (scope, element, attrs) {
11494 11538 attrs.$observe('focus', function (newValue) {
11495 11539 newValue === 'true' && element[0].focus();
11496 11540 });
11497 11541 }
11498 11542 });
11499 11543
11500 11544 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11501 11545 // #
11502 11546 // # This program is free software: you can redistribute it and/or modify
11503 11547 // # it under the terms of the GNU Affero General Public License, version 3
11504 11548 // # (only), as published by the Free Software Foundation.
11505 11549 // #
11506 11550 // # This program is distributed in the hope that it will be useful,
11507 11551 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11508 11552 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11509 11553 // # GNU General Public License for more details.
11510 11554 // #
11511 11555 // # You should have received a copy of the GNU Affero General Public License
11512 11556 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11513 11557 // #
11514 11558 // # This program is dual-licensed. If you wish to learn more about the
11515 11559 // # AppEnlight Enterprise Edition, including its added features, Support
11516 11560 // # services, and proprietary license terms, please see
11517 11561 // # https://rhodecode.com/licenses/
11518 11562
11519 11563 angular.module('appenlight.directives.formErrors', []).
11520 11564 directive('formErrors', function() {
11521 11565 return {
11522 11566 scope: {
11523 11567 errors: '='
11524 11568 },
11525 11569 template: '<div ng-repeat="errorMessage in errors"><div class="form-error alert alert-error">{{ errorMessage }}</div></div>'
11526 11570 }
11527 11571 })
11528 11572
11529 11573 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11530 11574 // #
11531 11575 // # This program is free software: you can redistribute it and/or modify
11532 11576 // # it under the terms of the GNU Affero General Public License, version 3
11533 11577 // # (only), as published by the Free Software Foundation.
11534 11578 // #
11535 11579 // # This program is distributed in the hope that it will be useful,
11536 11580 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11537 11581 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11538 11582 // # GNU General Public License for more details.
11539 11583 // #
11540 11584 // # You should have received a copy of the GNU Affero General Public License
11541 11585 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11542 11586 // #
11543 11587 // # This program is dual-licensed. If you wish to learn more about the
11544 11588 // # AppEnlight Enterprise Edition, including its added features, Support
11545 11589 // # services, and proprietary license terms, please see
11546 11590 // # https://rhodecode.com/licenses/
11547 11591
11548 11592 angular.module('appenlight.directives.humanFormat', []).
11549 11593 directive('humanFormat', [function () {
11550 11594 /* json inspector */
11551 11595 return {
11552 11596 restrict: "A",
11553 11597 scope: {
11554 11598 vars: '=',
11555 11599 },
11556 11600 "link": function (scope, element, attrs) {
11557 11601 scope.$watch('vars', function (newValue, oldValue, scope) {
11558 11602 element.empty();
11559 11603 element.append(JsonHuman.format(scope.vars));
11560 11604 });
11561 11605
11562 11606 }
11563 11607 }
11564 11608 }])
11565 11609
11566 11610 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11567 11611 // #
11568 11612 // # This program is free software: you can redistribute it and/or modify
11569 11613 // # it under the terms of the GNU Affero General Public License, version 3
11570 11614 // # (only), as published by the Free Software Foundation.
11571 11615 // #
11572 11616 // # This program is distributed in the hope that it will be useful,
11573 11617 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11574 11618 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11575 11619 // # GNU General Public License for more details.
11576 11620 // #
11577 11621 // # You should have received a copy of the GNU Affero General Public License
11578 11622 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11579 11623 // #
11580 11624 // # This program is dual-licensed. If you wish to learn more about the
11581 11625 // # AppEnlight Enterprise Edition, including its added features, Support
11582 11626 // # services, and proprietary license terms, please see
11583 11627 // # https://rhodecode.com/licenses/
11584 11628
11585 11629 angular.module('appenlight.directives.isoToRelativeTime', []).
11586 11630 directive('isoToRelativeTime', function () {
11587 11631 return {
11588 11632 "restrict": "E",
11589 11633 scope: {
11590 11634 time: '@'
11591 11635 },
11592 11636 "link": function (scope, element) {
11593 11637 scope.$watch('time', function(newValue, oldValue, scope){
11594 11638 element.empty();
11595 11639 element.html(moment.utc(newValue).fromNow());
11596 11640 });
11597 11641 }
11598 11642 }
11599 11643 })
11600 11644
11601 11645 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11602 11646 // #
11603 11647 // # This program is free software: you can redistribute it and/or modify
11604 11648 // # it under the terms of the GNU Affero General Public License, version 3
11605 11649 // # (only), as published by the Free Software Foundation.
11606 11650 // #
11607 11651 // # This program is distributed in the hope that it will be useful,
11608 11652 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11609 11653 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11610 11654 // # GNU General Public License for more details.
11611 11655 // #
11612 11656 // # You should have received a copy of the GNU Affero General Public License
11613 11657 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11614 11658 // #
11615 11659 // # This program is dual-licensed. If you wish to learn more about the
11616 11660 // # AppEnlight Enterprise Edition, including its added features, Support
11617 11661 // # services, and proprietary license terms, please see
11618 11662 // # https://rhodecode.com/licenses/
11619 11663
11620 11664 angular.module('appenlight.controllers')
11621 11665 .controller('ApplicationPermissionsController', ApplicationPermissionsController);
11622 11666
11623 11667 ApplicationPermissionsController.$inject = ['sectionViewResource',
11624 11668 'applicationsPropertyResource', 'groupsResource']
11625 11669
11626 11670
11627 11671 function ApplicationPermissionsController(sectionViewResource, applicationsPropertyResource , groupsResource) {
11628 11672 var vm = this;
11629 11673 vm.form = {
11630 11674 autocompleteUser: '',
11631 11675 selectedGroup: null,
11632 11676 selectedUserPermissions: {},
11633 11677 selectedGroupPermissions: {}
11634 11678 }
11635 11679 vm.possibleGroups = groupsResource.query(null, function(){
11636 11680 if (vm.possibleGroups.length > 0){
11637 11681 vm.form.selectedGroup = vm.possibleGroups[0].id;
11638 11682 }
11639 11683 });
11640 11684
11641 11685 vm.possibleUsers = [];
11642 11686 _.each(vm.resource.possible_permissions, function (perm) {
11643 11687 vm.form.selectedUserPermissions[perm] = false;
11644 11688 vm.form.selectedGroupPermissions[perm] = false;
11645 11689 });
11646 11690
11647 11691 /**
11648 11692 * Converts the permission list into {user, permission_list objects}
11649 11693 * for rendering in templates
11650 11694 * **/
11651 11695 var tmpObj = {
11652 11696 user: {},
11653 11697 group: {}
11654 11698 };
11655 11699 _.each(vm.currentPermissions, function (perm) {
11656 11700
11657 11701 if (perm.type == 'user') {
11658 11702 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
11659 11703 tmpObj[perm.type][perm.user_name] = {
11660 11704 self: perm,
11661 11705 permissions: []
11662 11706 }
11663 11707 }
11664 11708 if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
11665 11709 tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
11666 11710 }
11667 11711 }
11668 11712 else {
11669 11713 if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
11670 11714 tmpObj[perm.type][perm.group_name] = {
11671 11715 self: perm,
11672 11716 permissions: []
11673 11717 }
11674 11718 }
11675 11719 if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
11676 11720 tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
11677 11721 }
11678 11722
11679 11723 }
11680 11724 });
11681 11725 vm.currentPermissions = {
11682 11726 user: _.values(tmpObj.user),
11683 11727 group: _.values(tmpObj.group),
11684 11728 };
11685 11729
11686 11730
11687 11731
11688 11732 vm.searchUsers = function (searchPhrase) {
11689 11733
11690 11734 vm.searchingUsers = true;
11691 11735 return sectionViewResource.query({
11692 11736 section: 'users_section',
11693 11737 view: 'search_users',
11694 11738 'user_name': searchPhrase
11695 11739 }).$promise.then(function (data) {
11696 11740 vm.searchingUsers = false;
11697 11741 return _.map(data, function (item) {
11698 11742 return item;
11699 11743 });
11700 11744 });
11701 11745 };
11702 11746
11703 11747
11704 11748 vm.setGroupPermission = function(){
11705 11749 var POSTObj = {
11706 11750 'group_id': vm.form.selectedGroup,
11707 11751 'permissions': []
11708 11752 };
11709 11753 for (var key in vm.form.selectedGroupPermissions) {
11710 11754 if (vm.form.selectedGroupPermissions[key]) {
11711 11755 POSTObj.permissions.push(key)
11712 11756 }
11713 11757 }
11714 11758 applicationsPropertyResource.save({
11715 11759 key: 'group_permissions',
11716 11760 resourceId: vm.resource.resource_id
11717 11761 }, POSTObj,
11718 11762 function (data) {
11719 11763 var found_row = false;
11720 11764 _.each(vm.currentPermissions.group, function (perm) {
11721 11765 if (perm.self.group_id == data.group.id) {
11722 11766 perm['permissions'] = data['permissions'];
11723 11767 found_row = true;
11724 11768 }
11725 11769 });
11726 11770 if (!found_row) {
11727 11771 data.self = data.group;
11728 11772 // normalize data format
11729 11773 data.self.group_id = data.self.id;
11730 11774 vm.currentPermissions.group.push(data);
11731 11775 }
11732 11776 });
11733 11777
11734 11778 }
11735 11779
11736 11780
11737 11781 vm.setUserPermission = function () {
11738 11782
11739 11783 var POSTObj = {
11740 11784 'user_name': vm.form.autocompleteUser,
11741 11785 'permissions': []
11742 11786 };
11743 11787 for (var key in vm.form.selectedUserPermissions) {
11744 11788 if (vm.form.selectedUserPermissions[key]) {
11745 11789 POSTObj.permissions.push(key)
11746 11790 }
11747 11791 }
11748 11792 applicationsPropertyResource.save({
11749 11793 key: 'user_permissions',
11750 11794 resourceId: vm.resource.resource_id
11751 11795 }, POSTObj,
11752 11796 function (data) {
11753 11797 var found_row = false;
11754 11798 _.each(vm.currentPermissions.user, function (perm) {
11755 11799 if (perm.self.user_name == data['user_name']) {
11756 11800 perm['permissions'] = data['permissions'];
11757 11801 found_row = true;
11758 11802 }
11759 11803 });
11760 11804 if (!found_row) {
11761 11805 data.self = data;
11762 11806 vm.currentPermissions.user.push(data);
11763 11807 }
11764 11808 });
11765 11809 }
11766 11810
11767 11811 vm.removeUserPermission = function (perm_name, curr_perm) {
11768 11812
11769 11813
11770 11814 var POSTObj = {
11771 11815 key: 'user_permissions',
11772 11816 user_name: curr_perm.self.user_name,
11773 11817 permissions: [perm_name],
11774 11818 resourceId: vm.resource.resource_id
11775 11819 }
11776 11820 applicationsPropertyResource.delete(POSTObj, function (data) {
11777 11821 _.each(vm.currentPermissions.user, function (perm) {
11778 11822 if (perm.self.user_name == data['user_name']) {
11779 11823 perm['permissions'] = data['permissions']
11780 11824 }
11781 11825 });
11782 11826 });
11783 11827 }
11784 11828
11785 11829 vm.removeGroupPermission = function (perm_name, curr_perm) {
11786 11830
11787 11831 var POSTObj = {
11788 11832 key: 'group_permissions',
11789 11833 group_id: curr_perm.self.group_id,
11790 11834 permissions: [perm_name],
11791 11835 resourceId: vm.resource.resource_id
11792 11836 }
11793 11837 applicationsPropertyResource.delete(POSTObj, function (data) {
11794 11838 _.each(vm.currentPermissions.group, function (perm) {
11795 11839 if (perm.self.group_id == data.group.id) {
11796 11840 perm['permissions'] = data['permissions']
11797 11841 }
11798 11842 });
11799 11843 });
11800 11844 }
11801 11845 }
11802 11846
11803 11847 angular.module('appenlight.directives.permissionsForm',[])
11804 11848 .directive('permissionsForm', function () {
11805 11849 return {
11806 11850 "restrict": "E",
11807 11851 "controller": "ApplicationPermissionsController",
11808 11852 controllerAs: 'permissions',
11809 11853 bindToController: true,
11810 11854 scope: {
11811 11855 currentPermissions: '=',
11812 11856 possiblePermissions: '=',
11813 11857 resource: '='
11814 11858 },
11815 11859 templateUrl: 'directives/permissions/permissions.html'
11816 11860 }
11817 11861 })
11818 11862
11819 11863 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11820 11864 // #
11821 11865 // # This program is free software: you can redistribute it and/or modify
11822 11866 // # it under the terms of the GNU Affero General Public License, version 3
11823 11867 // # (only), as published by the Free Software Foundation.
11824 11868 // #
11825 11869 // # This program is distributed in the hope that it will be useful,
11826 11870 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11827 11871 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11828 11872 // # GNU General Public License for more details.
11829 11873 // #
11830 11874 // # You should have received a copy of the GNU Affero General Public License
11831 11875 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11832 11876 // #
11833 11877 // # This program is dual-licensed. If you wish to learn more about the
11834 11878 // # AppEnlight Enterprise Edition, including its added features, Support
11835 11879 // # services, and proprietary license terms, please see
11836 11880 // # https://rhodecode.com/licenses/
11837 11881
11838 11882 angular.module('appenlight.directives.pluginConfig', []).directive('pluginConfig', function () {
11839 11883 return {
11840 11884 scope: {},
11841 11885 bindToController: {
11842 11886 resource: '=',
11843 11887 section: '='
11844 11888 },
11845 11889 restrict: 'E',
11846 11890 templateUrl: 'directives/plugin_config/plugin_config.html',
11847 11891 controller: PluginConfig,
11848 11892 controllerAs: 'plugin_ctrlr'
11849 11893 };
11850 11894
11851 11895 PluginConfig.$inject = ['stateHolder'];
11852 11896
11853 11897 function PluginConfig(stateHolder) {
11854 11898 var vm = this;
11855 11899 vm.plugins = {};
11856 11900 vm.inclusions = stateHolder.plugins.inclusions[vm.section];
11857 11901 }
11858 11902 });
11859 11903
11860 11904 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11861 11905 // #
11862 11906 // # This program is free software: you can redistribute it and/or modify
11863 11907 // # it under the terms of the GNU Affero General Public License, version 3
11864 11908 // # (only), as published by the Free Software Foundation.
11865 11909 // #
11866 11910 // # This program is distributed in the hope that it will be useful,
11867 11911 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11868 11912 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11869 11913 // # GNU General Public License for more details.
11870 11914 // #
11871 11915 // # You should have received a copy of the GNU Affero General Public License
11872 11916 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11873 11917 // #
11874 11918 // # This program is dual-licensed. If you wish to learn more about the
11875 11919 // # AppEnlight Enterprise Edition, including its added features, Support
11876 11920 // # services, and proprietary license terms, please see
11877 11921 // # https://rhodecode.com/licenses/
11878 11922
11879 11923 angular.module('appenlight.directives.postProcessAction', []).directive('postProcessAction', ['applicationsPropertyResource', function (applicationsPropertyResource) {
11880 11924 return {
11881 11925 scope: {},
11882 11926 bindToController:{
11883 11927 action: '=',
11884 11928 resource: '='
11885 11929 },
11886 11930 controller:postProcessActionController,
11887 11931 controllerAs:'ctrl',
11888 11932 restrict: 'E',
11889 11933 templateUrl: 'directives/postprocess_action/postprocess_action.html'
11890 11934 };
11891 11935 function postProcessActionController(){
11892 11936 var vm = this;
11893 11937
11894 11938 var allOps = {
11895 11939 'eq': 'Equal',
11896 11940 'ne': 'Not equal',
11897 11941 'ge': 'Greater or equal',
11898 11942 'gt': 'Greater than',
11899 11943 'le': 'Lesser or equal',
11900 11944 'lt': 'Lesser than',
11901 11945 'startswith': 'Starts with',
11902 11946 'endswith': 'Ends with',
11903 11947 'contains': 'Contains'
11904 11948 };
11905 11949
11906 11950 var fieldOps = {};
11907 11951 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
11908 11952 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
11909 11953 fieldOps['duration'] = ['ge', 'le'];
11910 11954 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
11911 11955 'contains'];
11912 11956 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
11913 11957 'contains'];
11914 11958 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
11915 11959 'contains'];
11916 11960 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
11917 11961 'contains'];
11918 11962 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
11919 11963
11920 11964 var possibleFields = {
11921 11965 '__AND__': 'All met (composite rule)',
11922 11966 '__OR__': 'One met (composite rule)',
11923 11967 '__NOT__': 'Not met (composite rule)',
11924 11968 'http_status': 'HTTP Status',
11925 11969 'duration': 'Request duration',
11926 11970 'group:priority': 'Group -> Priority',
11927 11971 'url_domain': 'Domain',
11928 11972 'url_path': 'URL Path',
11929 11973 'error': 'Error',
11930 11974 'tags:server_name': 'Tag -> Server name',
11931 11975 'group:occurences': 'Group -> Occurences'
11932 11976 };
11933 11977
11934 11978 vm.ruleDefinitions = {
11935 11979 fieldOps: fieldOps,
11936 11980 allOps: allOps,
11937 11981 possibleFields: possibleFields
11938 11982 };
11939 11983
11940 11984 vm.possibleActions = [
11941 11985 ['1', 'Priority +1'],
11942 11986 ['-1', 'Priority -1']
11943 11987 ];
11944 11988
11945 11989 vm.deleteAction = function (action) {
11946 11990 applicationsPropertyResource.remove({
11947 11991 pkey: vm.action.pkey,
11948 11992 resourceId: vm.resource.resource_id,
11949 11993 key: 'postprocessing_rules'
11950 11994 }, function () {
11951 11995 vm.resource.postprocessing_rules.splice(
11952 11996 vm.resource.postprocessing_rules.indexOf(action), 1);
11953 11997 });
11954 11998 };
11955 11999
11956 12000
11957 12001 vm.saveAction = function () {
11958 12002 var params = {
11959 12003 'pkey': vm.action.pkey,
11960 12004 'resourceId': vm.resource.resource_id,
11961 12005 key: 'postprocessing_rules'
11962 12006 };
11963 12007 applicationsPropertyResource.update(params, vm.action,
11964 12008 function (data) {
11965 12009 vm.action.dirty = false;
11966 12010 vm.errors = [];
11967 12011 }, function (response) {
11968 12012 if (response.status == 422) {
11969 12013 var errorDict = angular.fromJson(response.data);
11970 12014 vm.errors = _.values(errorDict);
11971 12015 }
11972 12016 });
11973 12017 };
11974 12018
11975 12019 vm.setDirty = function() {
11976 12020 vm.action.dirty = true;
11977 12021
11978 12022 };
11979 12023 }
11980 12024
11981 12025 }]);
11982 12026
11983 12027 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
11984 12028 // #
11985 12029 // # This program is free software: you can redistribute it and/or modify
11986 12030 // # it under the terms of the GNU Affero General Public License, version 3
11987 12031 // # (only), as published by the Free Software Foundation.
11988 12032 // #
11989 12033 // # This program is distributed in the hope that it will be useful,
11990 12034 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
11991 12035 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11992 12036 // # GNU General Public License for more details.
11993 12037 // #
11994 12038 // # You should have received a copy of the GNU Affero General Public License
11995 12039 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
11996 12040 // #
11997 12041 // # This program is dual-licensed. If you wish to learn more about the
11998 12042 // # AppEnlight Enterprise Edition, including its added features, Support
11999 12043 // # services, and proprietary license terms, please see
12000 12044 // # https://rhodecode.com/licenses/
12001 12045
12002 12046 angular.module('appenlight.directives.recursive', []).directive("recursive", function ($compile) {
12003 12047 return {
12004 12048 restrict: "EACM",
12005 12049 priority: 100000,
12006 12050 compile: function (tElement, tAttr) {
12007 12051 var contents = tElement.contents().remove();
12008 12052 var compiledContents;
12009 12053 return function (scope, iElement, iAttr) {
12010 12054 if (!compiledContents) {
12011 12055 compiledContents = $compile(contents);
12012 12056 }
12013 12057 iElement.append(compiledContents(scope, function (clone) {
12014 12058 return clone;
12015 12059 }));
12016 12060 };
12017 12061 }
12018 12062 };
12019 12063 });
12020 12064
12021 12065 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12022 12066 // #
12023 12067 // # This program is free software: you can redistribute it and/or modify
12024 12068 // # it under the terms of the GNU Affero General Public License, version 3
12025 12069 // # (only), as published by the Free Software Foundation.
12026 12070 // #
12027 12071 // # This program is distributed in the hope that it will be useful,
12028 12072 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12029 12073 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12030 12074 // # GNU General Public License for more details.
12031 12075 // #
12032 12076 // # You should have received a copy of the GNU Affero General Public License
12033 12077 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12034 12078 // #
12035 12079 // # This program is dual-licensed. If you wish to learn more about the
12036 12080 // # AppEnlight Enterprise Edition, including its added features, Support
12037 12081 // # services, and proprietary license terms, please see
12038 12082 // # https://rhodecode.com/licenses/
12039 12083
12040 12084 angular.module('appenlight.directives.reportAlertAction', []).directive('reportAlertAction', ['userSelfPropertyResource', function (userSelfPropertyResource) {
12041 12085 return {
12042 12086 scope: {},
12043 12087 bindToController:{
12044 12088 action: '=',
12045 12089 applications: '=',
12046 12090 possibleChannels: '=',
12047 12091 actions: '=',
12048 12092 ruleDefinitions: '='
12049 12093 },
12050 12094 controller:reportAlertActionController,
12051 12095 controllerAs:'ctrl',
12052 12096 restrict: 'E',
12053 12097 templateUrl: 'directives/report_alert_action/report_alert_action.html'
12054 12098 };
12055 12099 function reportAlertActionController(){
12056 12100 var vm = this;
12057 12101 vm.deleteAction = function (actions, action) {
12058 12102 var get = {
12059 12103 key: 'alert_channels_rules',
12060 12104 pkey: action.pkey
12061 12105 };
12062 12106 userSelfPropertyResource.remove(get, function (data) {
12063 12107 actions.splice(actions.indexOf(action), 1);
12064 12108 });
12065 12109
12066 12110 };
12067 12111
12068 12112 vm.bindChannel = function(){
12069 12113 var post = {
12070 12114 channel_pkey: vm.channelToBind.pkey,
12071 12115 action_pkey: vm.action.pkey
12072 12116 };
12073 12117
12074 12118 userSelfPropertyResource.save({key: 'alert_channels_actions_binds'}, post,
12075 12119 function (data) {
12076 12120 vm.action.channels = [];
12077 12121 vm.action.channels = data.channels;
12078 12122 }, function (response) {
12079 12123 if (response.status == 422) {
12080 12124
12081 12125 }
12082 12126 });
12083 12127 };
12084 12128
12085 12129 vm.unBindChannel = function(channel){
12086 12130 userSelfPropertyResource.delete({
12087 12131 key: 'alert_channels_actions_binds',
12088 12132 channel_pkey: channel.pkey,
12089 12133 action_pkey: vm.action.pkey
12090 12134 },
12091 12135 function (data) {
12092 12136 vm.action.channels = [];
12093 12137 vm.action.channels = data.channels;
12094 12138 }, function (response) {
12095 12139 if (response.status == 422) {
12096 12140
12097 12141 }
12098 12142 });
12099 12143 };
12100 12144
12101 12145 vm.saveAction = function () {
12102 12146 var params = {
12103 12147 key: 'alert_channels_rules',
12104 12148 pkey: vm.action.pkey
12105 12149 };
12106 12150 userSelfPropertyResource.update(params, vm.action,
12107 12151 function (data) {
12108 12152 vm.action.dirty = false;
12109 12153 vm.errors = [];
12110 12154 }, function (response) {
12111 12155 if (response.status == 422) {
12112 12156 var errorDict = angular.fromJson(response.data);
12113 12157 vm.errors = _.values(errorDict);
12114 12158 }
12115 12159 });
12116 12160 };
12117 12161
12118 12162 vm.possibleNotifications = [
12119 12163 ['always', 'Always'],
12120 12164 ['only_first', 'Only New'],
12121 12165 ];
12122 12166
12123 12167 vm.possibleChannels = _.filter(vm.possibleChannels, function(c){
12124 12168 return c.supports_report_alerting }
12125 12169 );
12126 12170
12127 12171 if (vm.possibleChannels.length > 0){
12128 12172 vm.channelToBind = vm.possibleChannels[0];
12129 12173 }
12130 12174
12131 12175 vm.setDirty = function() {
12132 12176 vm.action.dirty = true;
12133 12177
12134 12178 };
12135 12179 }
12136 12180
12137 12181 }]);
12138 12182
12139 12183 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12140 12184 // #
12141 12185 // # This program is free software: you can redistribute it and/or modify
12142 12186 // # it under the terms of the GNU Affero General Public License, version 3
12143 12187 // # (only), as published by the Free Software Foundation.
12144 12188 // #
12145 12189 // # This program is distributed in the hope that it will be useful,
12146 12190 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12147 12191 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12148 12192 // # GNU General Public License for more details.
12149 12193 // #
12150 12194 // # You should have received a copy of the GNU Affero General Public License
12151 12195 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12152 12196 // #
12153 12197 // # This program is dual-licensed. If you wish to learn more about the
12154 12198 // # AppEnlight Enterprise Edition, including its added features, Support
12155 12199 // # services, and proprietary license terms, please see
12156 12200 // # https://rhodecode.com/licenses/
12157 12201
12158 12202 angular.module('appenlight.directives.ruleReadOnly', []).directive('ruleReadOnly', ['userSelfPropertyResource', function (userSelfPropertyResource) {
12159 12203 return {
12160 12204 scope: {},
12161 12205 bindToController:{
12162 12206 parentObj: '=',
12163 12207 rule: '=',
12164 12208 ruleDefinitions: '=',
12165 12209 parentRule: "=",
12166 12210 config: "="
12167 12211 },
12168 12212 restrict: 'E',
12169 12213 templateUrl: 'directives/rule_read_only/rule_read_only.html',
12170 12214 controller:RuleController,
12171 12215 controllerAs:'rule_ctrlr'
12172 12216 }
12173 12217 function RuleController(){
12174 12218 var vm = this;
12175 12219 vm.readOnlyPossibleFields = {};
12176 12220 var labelPairs = _.pairs(vm.parentObj.config);
12177 12221 _.each(labelPairs, function (entry) {
12178 12222 vm.readOnlyPossibleFields[entry[0]] = entry[1].human_label;
12179 12223 });
12180 12224 }
12181 12225 }]);
12182 12226
12183 12227 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12184 12228 // #
12185 12229 // # This program is free software: you can redistribute it and/or modify
12186 12230 // # it under the terms of the GNU Affero General Public License, version 3
12187 12231 // # (only), as published by the Free Software Foundation.
12188 12232 // #
12189 12233 // # This program is distributed in the hope that it will be useful,
12190 12234 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12191 12235 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12192 12236 // # GNU General Public License for more details.
12193 12237 // #
12194 12238 // # You should have received a copy of the GNU Affero General Public License
12195 12239 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12196 12240 // #
12197 12241 // # This program is dual-licensed. If you wish to learn more about the
12198 12242 // # AppEnlight Enterprise Edition, including its added features, Support
12199 12243 // # services, and proprietary license terms, please see
12200 12244 // # https://rhodecode.com/licenses/
12201 12245
12202 12246 angular.module('appenlight.directives.rule', []).directive('rule', function () {
12203 12247 return {
12204 12248 scope: {},
12205 12249 bindToController:{
12206 12250 parentObj: '=',
12207 12251 rule: '=',
12208 12252 ruleDefinitions: '=',
12209 12253 parentRule: "=",
12210 12254 config: "="
12211 12255 },
12212 12256 restrict: 'E',
12213 12257 templateUrl: 'directives/rule/rule.html',
12214 12258 controller:RuleController,
12215 12259 controllerAs:'rule_ctrlr'
12216 12260 };
12217 12261 function RuleController(){
12218 12262 var vm = this;
12219 12263
12220 12264 vm.rule.dirty = false;
12221 12265 vm.oldField = vm.rule.field;
12222 12266
12223 12267 vm.add = function () {
12224 12268 vm.rule.rules.push(
12225 12269 {op: "eq", field: 'http_status', value: ""}
12226 12270 );
12227 12271 vm.setDirty();
12228 12272 };
12229 12273
12230 12274 vm.setDirty = function() {
12231 12275 vm.rule.dirty = true;
12232 12276
12233 12277 if (vm.parentObj){
12234 12278
12235 12279
12236 12280 vm.parentObj.dirty = true;
12237 12281 }
12238 12282 };
12239 12283
12240 12284 vm.fieldChange = function () {
12241 12285 var compound_types = ['__AND__', '__OR__', '__NOT__'];
12242 12286 var new_is_compound = compound_types.indexOf(vm.rule.field) !== -1;
12243 12287 var old_was_compound = compound_types.indexOf(vm.oldField) !== -1;
12244 12288
12245 12289 if (!new_is_compound) {
12246 12290 vm.rule.op = vm.ruleDefinitions.fieldOps[vm.rule.field][0];
12247 12291 }
12248 12292 if ((new_is_compound && !old_was_compound)) {
12249 12293
12250 12294 delete vm.rule.value;
12251 12295 vm.rule.rules = [];
12252 12296 vm.add();
12253 12297 }
12254 12298 else if (!new_is_compound && old_was_compound) {
12255 12299
12256 12300 delete vm.rule.rules;
12257 12301 vm.rule.value = '';
12258 12302 }
12259 12303 vm.oldField = vm.rule.field;
12260 12304 vm.setDirty();
12261 12305 };
12262 12306
12263 12307 vm.deleteRule = function (parent, rule) {
12264 12308 parent.rules.splice(parent.rules.indexOf(rule), 1);
12265 12309 vm.setDirty();
12266 12310 }
12267 12311 }
12268 12312 });
12269 12313
12270 12314 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12271 12315 // #
12272 12316 // # This program is free software: you can redistribute it and/or modify
12273 12317 // # it under the terms of the GNU Affero General Public License, version 3
12274 12318 // # (only), as published by the Free Software Foundation.
12275 12319 // #
12276 12320 // # This program is distributed in the hope that it will be useful,
12277 12321 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12278 12322 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12279 12323 // # GNU General Public License for more details.
12280 12324 // #
12281 12325 // # You should have received a copy of the GNU Affero General Public License
12282 12326 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12283 12327 // #
12284 12328 // # This program is dual-licensed. If you wish to learn more about the
12285 12329 // # AppEnlight Enterprise Edition, including its added features, Support
12286 12330 // # services, and proprietary license terms, please see
12287 12331 // # https://rhodecode.com/licenses/
12288 12332
12289 12333 angular.module('appenlight.directives.smallReportGroupList',[]).
12290 12334 directive('smallReportGroupList', [function () {
12291 12335 return {
12292 12336 restrict: "A",
12293 12337 scope: {
12294 12338 groups: '=',
12295 12339 applications: '='
12296 12340 },
12297 12341 templateUrl: 'templates/reports/small_report_group_list.html'
12298 12342 }
12299 12343 }])
12300 12344
12301 12345 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12302 12346 // #
12303 12347 // # This program is free software: you can redistribute it and/or modify
12304 12348 // # it under the terms of the GNU Affero General Public License, version 3
12305 12349 // # (only), as published by the Free Software Foundation.
12306 12350 // #
12307 12351 // # This program is distributed in the hope that it will be useful,
12308 12352 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12309 12353 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12310 12354 // # GNU General Public License for more details.
12311 12355 // #
12312 12356 // # You should have received a copy of the GNU Affero General Public License
12313 12357 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12314 12358 // #
12315 12359 // # This program is dual-licensed. If you wish to learn more about the
12316 12360 // # AppEnlight Enterprise Edition, including its added features, Support
12317 12361 // # services, and proprietary license terms, please see
12318 12362 // # https://rhodecode.com/licenses/
12319 12363
12320 12364 angular.module('appenlight.directives.smallReportList', []).
12321 12365 directive('smallReportList', [function () {
12322 12366 return {
12323 12367 restrict: "A",
12324 12368 scope: {
12325 12369 reports: '=',
12326 12370 applications: '='
12327 12371 },
12328 12372 templateUrl: 'templates/reports/small_report_list.html'
12329 12373 }
12330 12374 }])
12331 12375
12332 12376 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12333 12377 // #
12334 12378 // # This program is free software: you can redistribute it and/or modify
12335 12379 // # it under the terms of the GNU Affero General Public License, version 3
12336 12380 // # (only), as published by the Free Software Foundation.
12337 12381 // #
12338 12382 // # This program is distributed in the hope that it will be useful,
12339 12383 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12340 12384 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12341 12385 // # GNU General Public License for more details.
12342 12386 // #
12343 12387 // # You should have received a copy of the GNU Affero General Public License
12344 12388 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12345 12389 // #
12346 12390 // # This program is dual-licensed. If you wish to learn more about the
12347 12391 // # AppEnlight Enterprise Edition, including its added features, Support
12348 12392 // # services, and proprietary license terms, please see
12349 12393 // # https://rhodecode.com/licenses/
12350 12394
12351 12395 'use strict';
12352 12396
12353 12397 /* Filters */
12354 12398
12355 12399 angular.module('appenlight.filters').
12356 12400 filter('interpolate', ['version', function (version) {
12357 12401 return function (text) {
12358 12402 return String(text).replace(/\%VERSION\%/mg, version);
12359 12403 }
12360 12404 }])
12361 12405 .filter('isoToRelativeTime', function () {
12362 12406 return function (input) {
12363 12407 return moment.utc(input).fromNow();
12364 12408 }
12365 12409 })
12366 12410
12367 12411 .filter('round', function () {
12368 12412 return function (input, precision) {
12369 12413 return input.toFixed(precision)
12370 12414 }
12371 12415 })
12372 12416
12373 12417 .filter('numberToThousands', function () {
12374 12418 return function (input) {
12375 12419 if (input > 1000000) {
12376 12420 var i = input / 1000000;
12377 12421 return i.toFixed(1).toString() + 'M'
12378 12422 }
12379 12423 else if (input > 1000) {
12380 12424 var i = input / 1000;
12381 12425 return i.toFixed(1).toString() + 'k'
12382 12426 }
12383 12427 else {
12384 12428 return input;
12385 12429 }
12386 12430 }
12387 12431 })
12388 12432 .filter('getOrdered', function () {
12389 12433 return function (input, filterOn) {
12390 12434 var ordered = {};
12391 12435 for (var key in input) {
12392 12436 ordered[input[key][filterOn]] = input[key];
12393 12437 }
12394 12438 return ordered;
12395 12439 };
12396 12440 })
12397 12441 .filter('objectToOrderedArray', function(){
12398 12442 return function(items, field, reverse) {
12399 12443 var filtered = [];
12400 12444 angular.forEach(items, function(item) {
12401 12445 filtered.push(item);
12402 12446 });
12403 12447 filtered.sort(function (a, b) {
12404 12448 return (a[field] > b[field] ? 1 : -1);
12405 12449 });
12406 12450 if(reverse) filtered.reverse();
12407 12451 return filtered;
12408 12452 };
12409 12453 })
12410 12454 .filter('apdexValue', function () {
12411 12455 return function (input) {
12412 12456 if (input.apdex >= 95) {
12413 12457 return 'satisfactory';
12414 12458 } else if (input.apdex >= 80) {
12415 12459 return 'tolerating';
12416 12460 } else {
12417 12461 return 'frustrating';
12418 12462 }
12419 12463 };
12420 12464 })
12421 12465 .filter('truncate', function(){
12422 12466 return function (text, length, end) {
12423 12467 if (isNaN(length))
12424 12468 length = 10;
12425 12469
12426 12470 if (end === undefined)
12427 12471 end = "...";
12428 12472
12429 12473 if (text.length <= length || text.length - end.length <= length) {
12430 12474 return text;
12431 12475 }
12432 12476 else {
12433 12477 return String(text).substring(0, length-end.length) + end;
12434 12478 }
12435 12479
12436 12480 };
12437 12481 })
12438 12482
12439 12483 ;
12440 12484
12441 12485 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12442 12486 // #
12443 12487 // # This program is free software: you can redistribute it and/or modify
12444 12488 // # it under the terms of the GNU Affero General Public License, version 3
12445 12489 // # (only), as published by the Free Software Foundation.
12446 12490 // #
12447 12491 // # This program is distributed in the hope that it will be useful,
12448 12492 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12449 12493 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12450 12494 // # GNU General Public License for more details.
12451 12495 // #
12452 12496 // # You should have received a copy of the GNU Affero General Public License
12453 12497 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12454 12498 // #
12455 12499 // # This program is dual-licensed. If you wish to learn more about the
12456 12500 // # AppEnlight Enterprise Edition, including its added features, Support
12457 12501 // # services, and proprietary license terms, please see
12458 12502 // # https://rhodecode.com/licenses/
12459 12503
12460 12504 angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
12461 12505
12462 12506 $urlRouterProvider.otherwise('/ui');
12463 12507
12464 12508 $stateProvider.state('logs', {
12465 12509 url: '/ui/logs?resource',
12466 12510 component: 'logsBrowserView'
12467 12511 });
12468 12512
12469 12513 $stateProvider.state('front_dashboard', {
12470 12514 url: '/ui',
12471 12515 component: 'indexDashboardView'
12472 12516 });
12473 12517
12474 12518 $stateProvider.state('report', {
12475 12519 abstract: true,
12476 12520 url: '/ui/report',
12477 12521 template: '<ui-view></ui-view>'
12478 12522 });
12479 12523
12480 12524 $stateProvider.state('report.list', {
12481 12525 url: '/list?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
12482 12526 component: 'reportsBrowserView'
12483 12527 });
12484 12528
12485 12529 $stateProvider.state('report.list_slow', {
12486 12530 url: '/list_slow?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
12487 12531 component: 'reportsSlowBrowserView'
12488 12532 });
12489 12533
12490 12534 $stateProvider.state('report.view_detail', {
12491 12535 url: '/:groupId/:reportId',
12492 12536 component: 'reportView'
12493 12537 });
12494 12538 $stateProvider.state('report.view_group', {
12495 12539 url: '/:groupId',
12496 12540 component: 'reportView'
12497 12541 });
12498 12542 $stateProvider.state('events', {
12499 12543 url: '/ui/events',
12500 12544 component: 'eventBrowserView'
12501 12545 });
12502 12546 $stateProvider.state('admin', {
12503 12547 url: '/ui/admin',
12504 12548 component: 'adminView'
12505 12549 });
12506 12550 $stateProvider.state('admin.user', {
12507 12551 abstract: true,
12508 12552 url: '/user',
12509 12553 template: '<ui-view></ui-view>'
12510 12554 });
12511 12555 $stateProvider.state('admin.user.list', {
12512 12556 url: '/list',
12513 12557 component: 'adminUsersListView'
12514 12558 });
12515 12559 $stateProvider.state('admin.user.create', {
12516 12560 url: '/create',
12517 12561 component: 'adminUsersCreateView'
12518 12562 });
12519 12563 $stateProvider.state('admin.user.update', {
12520 12564 url: '/{userId}/update',
12521 12565 component: 'adminUsersCreateView'
12522 12566 });
12523 12567
12524 12568
12525 12569 $stateProvider.state('admin.group', {
12526 12570 abstract: true,
12527 12571 url: '/group',
12528 12572 template: '<ui-view></ui-view>'
12529 12573 });
12530 12574 $stateProvider.state('admin.group.list', {
12531 12575 url: '/list',
12532 12576 component: 'adminGroupsListView'
12533 12577 });
12534 12578 $stateProvider.state('admin.group.create', {
12535 12579 url: '/create',
12536 12580 component: 'adminGroupsCreateView'
12537 12581 });
12538 12582 $stateProvider.state('admin.group.update', {
12539 12583 url: '/{groupId}/update',
12540 12584 component: 'adminGroupsCreateView'
12541 12585 });
12542 12586
12543 12587 $stateProvider.state('admin.application', {
12544 12588 abstract: true,
12545 12589 url: '/application',
12546 12590 template: '<ui-view></ui-view>'
12547 12591 });
12548 12592
12549 12593 $stateProvider.state('admin.application.list', {
12550 12594 url: '/list',
12551 12595 component: 'adminApplicationsListView'
12552 12596 });
12553 12597
12554 12598 $stateProvider.state('admin.partitions', {
12555 12599 url: '/partitions',
12556 12600 component: 'adminPartitionsView'
12557 12601 });
12558 12602 $stateProvider.state('admin.system', {
12559 12603 url: '/system',
12560 12604 component: 'adminSystemView'
12561 12605 });
12562 12606
12563 12607 $stateProvider.state('admin.configs', {
12564 12608 abstract: true,
12565 12609 url: '/configs',
12566 12610 template: '<ui-view></ui-view>'
12567 12611 });
12568 12612
12569 12613 $stateProvider.state('admin.configs.list', {
12570 12614 url: '/list',
12571 12615 component: 'adminConfigurationView'
12572 12616 });
12573 12617
12574 12618 $stateProvider.state('user', {
12575 12619 url: '/ui/user',
12576 12620 component: 'settingsView'
12577 12621 });
12578 12622
12579 12623 $stateProvider.state('user.profile', {
12580 12624 abstract: true,
12581 12625 template: '<ui-view></ui-view>'
12582 12626 });
12583 12627 $stateProvider.state('user.profile.edit', {
12584 12628 url: '/profile',
12585 12629 component: 'userProfileView'
12586 12630 });
12587 12631
12588 12632
12589 12633 $stateProvider.state('user.profile.password', {
12590 12634 url: '/password',
12591 12635 component: 'userPasswordView'
12592 12636 });
12593 12637
12594 12638 $stateProvider.state('user.profile.identities', {
12595 12639 url: '/identities',
12596 12640 component: 'userIdentitiesView'
12597 12641 });
12598 12642
12599 12643 $stateProvider.state('user.profile.auth_tokens', {
12600 12644 url: '/auth_tokens',
12601 12645 component: 'userAuthTokensView'
12602 12646 });
12603 12647
12604 12648 $stateProvider.state('user.alert_channels', {
12605 12649 abstract: true,
12606 12650 url: '/alert_channels',
12607 12651 template: '<ui-view></ui-view>'
12608 12652 });
12609 12653
12610 12654 $stateProvider.state('user.alert_channels.list', {
12611 12655 url: '/list',
12612 12656 component: 'userAlertChannelsListView'
12613 12657 });
12614 12658
12615 12659 $stateProvider.state('user.alert_channels.email', {
12616 12660 url: '/email',
12617 12661 component: 'userAlertChannelsEmailNewView'
12618 12662 });
12619 12663
12620 12664 $stateProvider.state('applications', {
12621 12665 abstract: true,
12622 12666 url: '/ui/applications',
12623 12667 component: 'settingsView'
12624 12668 });
12625 12669
12626 12670 $stateProvider.state('applications.list', {
12627 12671 url: '/list',
12628 12672 component: 'applicationsListView'
12629 12673 });
12630 12674 $stateProvider.state('applications.update', {
12631 12675 url: '/{resourceId}/update',
12632 12676 component: 'applicationsUpdateView'
12633 12677 });
12634 12678
12635 12679 $stateProvider.state('applications.integrations', {
12636 12680 url: '/{resourceId}/integrations',
12637 12681 component: 'integrationsListView',
12638 12682 data: {
12639 12683 resource: null
12640 12684 }
12641 12685 });
12642 12686
12643 12687 $stateProvider.state('applications.purge_logs', {
12644 12688 url: '/purge_logs',
12645 12689 component: 'applicationsPurgeLogsView'
12646 12690 });
12647 12691
12648 12692 $stateProvider.state('applications.integrations.edit', {
12649 12693 url: '/{integration}',
12650 12694 template: function ($stateParams) {
12651 12695 return '<'+ $stateParams.integration + '-integration-config-view>'
12652 12696 }
12653 12697 });
12654 12698
12655 12699 $stateProvider.state('tests', {
12656 12700 url: '/ui/tests',
12657 12701 templateUrl: 'templates/user/alert_channels_test.html',
12658 12702 controller: 'AlertChannelsTestController as test_action'
12659 12703 });
12660 12704
12661 12705 }]);
12662 12706
12663 12707 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12664 12708 // #
12665 12709 // # This program is free software: you can redistribute it and/or modify
12666 12710 // # it under the terms of the GNU Affero General Public License, version 3
12667 12711 // # (only), as published by the Free Software Foundation.
12668 12712 // #
12669 12713 // # This program is distributed in the hope that it will be useful,
12670 12714 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12671 12715 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12672 12716 // # GNU General Public License for more details.
12673 12717 // #
12674 12718 // # You should have received a copy of the GNU Affero General Public License
12675 12719 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12676 12720 // #
12677 12721 // # This program is dual-licensed. If you wish to learn more about the
12678 12722 // # AppEnlight Enterprise Edition, including its added features, Support
12679 12723 // # services, and proprietary license terms, please see
12680 12724 // # https://rhodecode.com/licenses/
12681 12725
12682 12726 angular.module('appenlight.services.chartResultParser',[]).factory('chartResultParser', function () {
12683 12727
12684 12728 function transform(data) {
12685 12729
12686 12730 /** transform result to a format that is more friendly
12687 12731 * to c3js we don't want to export this way as default
12688 12732 * as TSV stuff is less readable overall
12689 12733 *
12690 12734 * we want format of:
12691 12735 * {x: [unix_timestamps],
12692 12736 * key1: [val,list],
12693 12737 * key2: [val,list]...}
12694 12738 *
12695 12739 * OR
12696 12740 *
12697 12741 * handle special case where we want pie/donut for
12698 12742 * aggregation with a single metric, we need to transform
12699 12743 * the data from:
12700 12744 * [y:list, categories:[cat1,cat2,...]]
12701 12745 * to
12702 12746 * [cat1: val, cat2:val...] format to render properly
12703 12747 */
12704 12748 var chartC3Config = {
12705 12749 data: {
12706 12750 json: [],
12707 12751 type: 'bar'
12708 12752 },
12709 12753 point: {
12710 12754 show: false
12711 12755 },
12712 12756 tooltip: {
12713 12757 format: {
12714 12758 title: function (d) {
12715 12759 if (d) {
12716 12760 return '' + d;
12717 12761 }
12718 12762 return '';
12719 12763 },
12720 12764 value: function (value, ratio, id, index) {
12721 12765 return d3.round(value, 3);
12722 12766 }
12723 12767 }
12724 12768 },
12725 12769 regions: data.rect_regions
12726 12770 };
12727 12771 var labels = _.keys(data.system_labels);
12728 12772 var specialCases = ['pie', 'donut', 'gauge'];
12729 12773 if (labels.length === 1 && _.contains(specialCases,
12730 12774 data.chart_type.type)) {
12731 12775 var transformedData = {};
12732 12776
12733 12777 _.each(data.series, function (item) {
12734 12778 transformedData[item['key']] = item[labels[0]];
12735 12779 });
12736 12780 }
12737 12781 else {
12738 12782 var transformedData = {'key': []};
12739 12783
12740 12784 _.each(labels, function (label) {
12741 12785 transformedData[label] = [];
12742 12786 });
12743 12787
12744 12788 _.each(data.series, function (item) {
12745 12789 for (key in item) {
12746 12790 transformedData[key].push(item[key])
12747 12791 }
12748 12792 });
12749 12793 }
12750 12794
12751 12795
12752 12796 if (data.parent_agg.type === 'time_histogram') {
12753 12797 chartC3Config.axis = {
12754 12798 x: {
12755 12799 type: 'timeseries',
12756 12800 tick: {
12757 12801 format: '%Y-%m-%d'
12758 12802 }
12759 12803 }
12760 12804 };
12761 12805 chartC3Config.data.xFormat = '%Y-%m-%dT%H:%M:%S';
12762 12806 }
12763 12807 else if (data.categories) {
12764 12808 chartC3Config.axis = {
12765 12809 x: {
12766 12810 type: 'category',
12767 12811 categories: data.categories
12768 12812 }
12769 12813 };
12770 12814 // we don't want to show key as label if it is being
12771 12815 // used as a category instead
12772 12816 if (data.categories) {
12773 12817 delete transformedData['key'];
12774 12818 }
12775 12819 }
12776 12820
12777 12821 var human_labels = {};
12778 12822 _.each(_.pairs(data.system_labels), function(entry){
12779 12823 human_labels[entry[0]] = entry[1].human_label;
12780 12824 });
12781 12825 var chartC3Data = {
12782 12826 json: transformedData,
12783 12827 names: human_labels,
12784 12828 groups: data.groups,
12785 12829 type: data.chart_type.type
12786 12830 };
12787 12831
12788 12832 if (data.parent_agg.type == 'time_histogram') {
12789 12833 chartC3Data.x = 'key';
12790 12834 }
12791 12835 return {chartC3Data: chartC3Data, chartC3Config: chartC3Config}
12792 12836 }
12793 12837
12794 12838 return transform
12795 12839 });
12796 12840
12797 12841 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12798 12842 // #
12799 12843 // # This program is free software: you can redistribute it and/or modify
12800 12844 // # it under the terms of the GNU Affero General Public License, version 3
12801 12845 // # (only), as published by the Free Software Foundation.
12802 12846 // #
12803 12847 // # This program is distributed in the hope that it will be useful,
12804 12848 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12805 12849 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12806 12850 // # GNU General Public License for more details.
12807 12851 // #
12808 12852 // # You should have received a copy of the GNU Affero General Public License
12809 12853 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12810 12854 // #
12811 12855 // # This program is dual-licensed. If you wish to learn more about the
12812 12856 // # AppEnlight Enterprise Edition, including its added features, Support
12813 12857 // # services, and proprietary license terms, please see
12814 12858 // # https://rhodecode.com/licenses/
12815 12859
12816 12860 var DEFAULT_ACTIONS = {
12817 12861 'get': {method: 'GET', timeout: 60000 * 2},
12818 12862 'save': {method: 'POST', timeout: 60000 * 2},
12819 12863 'query': {method: 'GET', isArray: true, timeout: 60000 * 2},
12820 12864 'remove': {method: 'DELETE', timeout: 30000},
12821 12865 'update': {method: 'PATCH', timeout: 30000},
12822 12866 'delete': {method: 'DELETE', timeout: 30000}
12823 12867 };
12824 12868
12825 12869 angular.module('appenlight.services.resources', []).factory('usersResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12826 12870 return $resource(AeConfig.urls.users, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12827 12871 }]);
12828 12872
12829 12873 angular.module('appenlight.services.resources').factory('userResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12830 12874 return $resource(AeConfig.urls.user, null, angular.copy(DEFAULT_ACTIONS));
12831 12875 }]);
12832 12876
12833 12877 angular.module('appenlight.services.resources').factory('usersPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12834 12878 return $resource(AeConfig.urls.usersProperty, null, angular.copy(DEFAULT_ACTIONS));
12835 12879 }]);
12836 12880
12837 12881 angular.module('appenlight.services.resources').factory('userSelfResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12838 12882 return $resource(AeConfig.urls.userSelf, null, angular.copy(DEFAULT_ACTIONS));
12839 12883 }]);
12840 12884
12841 12885 angular.module('appenlight.services.resources').factory('userSelfPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12842 12886 return $resource(AeConfig.urls.userSelfProperty, null, angular.copy(DEFAULT_ACTIONS));
12843 12887 }]);
12844 12888
12845 12889 angular.module('appenlight.services.resources').factory('logsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12846 12890 return $resource(AeConfig.urls.logsNoId, null, angular.copy(DEFAULT_ACTIONS));
12847 12891 }]);
12848 12892
12849 12893 angular.module('appenlight.services.resources').factory('reportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12850 12894 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12851 12895 }]);
12852 12896
12853 12897 angular.module('appenlight.services.resources').factory('slowReportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12854 12898 return $resource(AeConfig.urls.slowReports, null, angular.copy(DEFAULT_ACTIONS));
12855 12899 }]);
12856 12900
12857 12901 angular.module('appenlight.services.resources').factory('reportGroupResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12858 12902 return $resource(AeConfig.urls.reportGroup, null, angular.copy(DEFAULT_ACTIONS));
12859 12903 }]);
12860 12904
12861 12905 angular.module('appenlight.services.resources').factory('reportGroupPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12862 12906 return $resource(AeConfig.urls.reportGroupProperty, null, angular.copy(DEFAULT_ACTIONS));
12863 12907 }]);
12864 12908
12865 12909
12866 12910 angular.module('appenlight.services.resources').factory('reportResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12867 12911 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12868 12912 }]);
12869 12913
12870 12914 angular.module('appenlight.services.resources').factory('analyticsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12871 12915 return $resource(AeConfig.urls.analyticsAction, null, angular.copy(DEFAULT_ACTIONS));
12872 12916 }]);
12873 12917
12874 12918 angular.module('appenlight.services.resources').factory('reportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12875 12919 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12876 12920 }]);
12877 12921
12878 12922 angular.module('appenlight.services.resources').factory('integrationResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12879 12923 return $resource(AeConfig.urls.integrationAction, null, angular.copy(DEFAULT_ACTIONS));
12880 12924 }]);
12881 12925
12882 12926
12883 12927 angular.module('appenlight.services.resources').factory('adminResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12884 12928 return $resource(AeConfig.urls.adminAction, null, angular.copy(DEFAULT_ACTIONS));
12885 12929 }]);
12886 12930
12887 12931 angular.module('appenlight.services.resources').factory('applicationsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12888 12932 return $resource(AeConfig.urls.applicationsNoId, null, angular.copy(DEFAULT_ACTIONS));
12889 12933 }]);
12890 12934
12891 12935 angular.module('appenlight.services.resources').factory('applicationsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12892 12936 return $resource(AeConfig.urls.applicationsProperty, null, angular.copy(DEFAULT_ACTIONS));
12893 12937 }]);
12894 12938 angular.module('appenlight.services.resources').factory('applicationsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12895 12939 return $resource(AeConfig.urls.applications, null, angular.copy(DEFAULT_ACTIONS));
12896 12940 }]);
12897 12941
12898 12942 angular.module('appenlight.services.resources').factory('sectionViewResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12899 12943 return $resource(AeConfig.urls.sectionView, null, angular.copy(DEFAULT_ACTIONS));
12900 12944 }]);
12901 12945
12902 12946 angular.module('appenlight.services.resources').factory('groupsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12903 12947 return $resource(AeConfig.urls.groupsNoId, null, angular.copy(DEFAULT_ACTIONS));
12904 12948 }]);
12905 12949
12906 12950
12907 12951 angular.module('appenlight.services.resources').factory('groupsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12908 12952 return $resource(AeConfig.urls.groups, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12909 12953 }]);
12910 12954
12911 12955 angular.module('appenlight.services.resources').factory('groupsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12912 12956 return $resource(AeConfig.urls.groupsProperty, null, angular.copy(DEFAULT_ACTIONS));
12913 12957 }]);
12914 12958
12915 12959
12916 12960 angular.module('appenlight.services.resources').factory('eventsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12917 12961 return $resource(AeConfig.urls.eventsNoId, null, angular.copy(DEFAULT_ACTIONS));
12918 12962 }]);
12919 12963
12920 12964
12921 12965 angular.module('appenlight.services.resources').factory('eventsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12922 12966 return $resource(AeConfig.urls.events, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12923 12967 }]);
12924 12968
12925 12969 angular.module('appenlight.services.resources').factory('eventsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12926 12970 return $resource(AeConfig.urls.eventsProperty, null, angular.copy(DEFAULT_ACTIONS));
12927 12971 }]);
12928 12972
12929 12973 angular.module('appenlight.services.resources').factory('configsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12930 12974 return $resource(AeConfig.urls.configsNoId, null, angular.copy(DEFAULT_ACTIONS));
12931 12975 }]);
12932 12976
12933 12977 angular.module('appenlight.services.resources').factory('configsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12934 12978 return $resource(AeConfig.urls.configs, {
12935 12979 key: '@key',
12936 12980 section: '@section'
12937 12981 }, angular.copy(DEFAULT_ACTIONS));
12938 12982 }]);
12939 12983
12940 12984 angular.module('appenlight.services.resources').factory('pluginConfigsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12941 12985 return $resource(AeConfig.urls.pluginConfigs, {
12942 12986 id: '@id',
12943 12987 plugin_name: '@plugin_name'
12944 12988 }, angular.copy(DEFAULT_ACTIONS));
12945 12989 }]);
12946 12990
12947 12991 angular.module('appenlight.services.resources').factory('resourcesPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12948 12992 return $resource(AeConfig.urls.resourceProperty, null, angular.copy(DEFAULT_ACTIONS));
12949 12993 }]);
12950 12994
12951 12995 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
12952 12996 // #
12953 12997 // # This program is free software: you can redistribute it and/or modify
12954 12998 // # it under the terms of the GNU Affero General Public License, version 3
12955 12999 // # (only), as published by the Free Software Foundation.
12956 13000 // #
12957 13001 // # This program is distributed in the hope that it will be useful,
12958 13002 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
12959 13003 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12960 13004 // # GNU General Public License for more details.
12961 13005 // #
12962 13006 // # You should have received a copy of the GNU Affero General Public License
12963 13007 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
12964 13008 // #
12965 13009 // # This program is dual-licensed. If you wish to learn more about the
12966 13010 // # AppEnlight Enterprise Edition, including its added features, Support
12967 13011 // # services, and proprietary license terms, please see
12968 13012 // # https://rhodecode.com/licenses/
12969 13013
12970 13014 angular.module('appenlight.services.stateHolder', []).factory('stateHolder',
12971 13015 ['$timeout', 'AeConfig', function ($timeout, AeConfig) {
12972 13016
12973 13017 var AeUser = {"user_name": null, "id": null};
12974 13018 AeUser.update = function (jsonData) {
12975 13019 jsonData = jsonData || {};
12976 13020 this.applications_map = {};
12977 13021 this.dashboards_map = {};
12978 13022 this.user_name = jsonData.user_name || null;
12979 13023 this.id = jsonData.id;
12980 13024 this.assigned_reports = jsonData.assigned_reports || null;
12981 13025 this.latest_events = jsonData.latest_events || null;
12982 13026 this.permissions = jsonData.permissions || null;
12983 13027 this.groups = jsonData.groups || null;
12984 13028 this.applications = [];
12985 13029 this.dashboards = [];
12986 13030 _.each(jsonData.applications, function (item) {
12987 13031 this.addApplication(item);
12988 13032 }.bind(this));
12989 13033 _.each(jsonData.dashboards, function (item) {
12990 13034 this.addDashboard(item);
12991 13035 }.bind(this));
12992 13036 };
12993 13037 AeUser.addApplication = function (item) {
12994 13038 this.applications.push(item);
12995 13039 this.applications_map[item.resource_id] = item;
12996 13040 };
12997 13041 AeUser.addDashboard = function (item) {
12998 13042 this.dashboards.push(item);
12999 13043 this.dashboards_map[item.resource_id] = item;
13000 13044 };
13001 13045
13002 13046 AeUser.removeApplicationById = function (applicationId) {
13003 13047 this.applications = _.filter(this.applications, function (item) {
13004 13048 return item.resource_id != applicationId;
13005 13049 });
13006 13050 delete this.applications_map[applicationId];
13007 13051 };
13008 13052 AeUser.removeDashboardById = function (dashboardId) {
13009 13053 this.dashboards = _.filter(this.dashboards, function (item) {
13010 13054 return item.resource_id != dashboardId;
13011 13055 });
13012 13056 delete this.dashboards_map[dashboardId];
13013 13057 };
13014 13058
13015 13059 AeUser.hasAppPermission = function (perm_name) {
13016 13060 if (this.permissions.indexOf('root_administration') !== -1) {
13017 13061 return true
13018 13062 }
13019 13063 return this.permissions.indexOf(perm_name) !== -1;
13020 13064 };
13021 13065
13022 13066 AeUser.hasContextPermission = function (permName, ACLList) {
13023 13067 var hasPerm = false;
13024 13068 _.each(ACLList, function (ACL) {
13025 13069 // is this the right perm?
13026 13070 if (ACL.perm_name == permName ||
13027 13071 ACL.perm_name == '__all_permissions__') {
13028 13072 // perm for this user or a group user belongs to
13029 13073 if (ACL.user_name === this.user_name ||
13030 13074 this.groups.indexOf(ACL.group_name) !== -1) {
13031 13075 hasPerm = true
13032 13076 }
13033 13077 }
13034 13078 }.bind(this));
13035 13079
13036 13080 return hasPerm;
13037 13081 };
13038 13082
13039 13083 /**
13040 13084 * Holds some common stuff like flash messages, but important part is
13041 13085 * plugins property that is a registry that holds all information about
13042 13086 * loaded plugins, its mutated via .run() functions on inclusion
13043 13087 * @type {{list: Array, timeout: null, extend: flashMessages.extend, pop: flashMessages.pop, cancelTimeout: flashMessages.cancelTimeout, removeMessages: flashMessages.removeMessages}}
13044 13088 */
13045 13089 var flashMessages = {
13046 13090 list: [],
13047 13091 timeout: null,
13048 13092 extend: function (values) {
13049 13093
13050 13094 if (this.list.length > 2) {
13051 13095 this.list.splice(0, this.list.length - 2);
13052 13096 }
13053 13097 this.list.push.apply(this.list, values);
13054 13098 this.cancelTimeout();
13055 13099 this.removeMessages();
13056 13100 },
13057 13101 pop: function () {
13058 13102
13059 13103 this.list.pop();
13060 13104 },
13061 13105 cancelTimeout: function () {
13062 13106 if (this.timeout) {
13063 13107 $timeout.cancel(this.timeout);
13064 13108 }
13065 13109 },
13066 13110 removeMessages: function () {
13067 13111 var self = this;
13068 13112 this.timeout = $timeout(function () {
13069 13113 while (self.list.length > 0) {
13070 13114 self.list.pop();
13071 13115 }
13072 13116 }, 10000);
13073 13117 }
13074 13118 };
13075 13119 flashMessages.closeAlert = angular.bind(flashMessages, function (index) {
13076 13120 this.list.splice(index, 1);
13077 13121 this.cancelTimeout();
13078 13122 });
13079 13123 /* add flash messages from template generated on non-xhr request level */
13080 13124 try {
13081 13125 if (AeConfig.flashMessages.length > 0) {
13082 13126 flashMessages.list = AeConfig.flashMessages;
13083 13127 }
13084 13128 }
13085 13129 catch (exc) {
13086 13130
13087 13131 }
13088 13132
13089 13133 var Plugins = {
13090 13134 enabled: [],
13091 13135 configs: {},
13092 13136 inclusions: {},
13093 13137 addInclusion: function (name, inclusion) {
13094 13138 var self = this;
13095 13139 if (self.inclusions.hasOwnProperty(name) === false) {
13096 13140 self.inclusions[name] = [];
13097 13141 }
13098 13142 self.inclusions[name].push(inclusion);
13099 }
13143 },
13144 addnavigation: function (name, inclusion) {
13145 var self = this;
13146 if (self.inclusions.hasOwnProperty(name) === false) {
13147 self.inclusions[name] = [];
13148 }
13149 self.inclusions[name].push(inclusion);
13150 },
13100 13151 };
13101 13152
13102 13153 var stateHolder = {
13103 13154 section: 'settings',
13104 13155 resource: null,
13105 13156 plugins: Plugins,
13106 13157 flashMessages: flashMessages,
13107 13158 AeUser: AeUser,
13108 13159 AeConfig: AeConfig
13109 13160 };
13110 13161 return stateHolder;
13111 13162 }]);
13112 13163
13113 13164 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
13114 13165 // #
13115 13166 // # This program is free software: you can redistribute it and/or modify
13116 13167 // # it under the terms of the GNU Affero General Public License, version 3
13117 13168 // # (only), as published by the Free Software Foundation.
13118 13169 // #
13119 13170 // # This program is distributed in the hope that it will be useful,
13120 13171 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
13121 13172 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13122 13173 // # GNU General Public License for more details.
13123 13174 // #
13124 13175 // # You should have received a copy of the GNU Affero General Public License
13125 13176 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
13126 13177 // #
13127 13178 // # This program is dual-licensed. If you wish to learn more about the
13128 13179 // # AppEnlight Enterprise Edition, including its added features, Support
13129 13180 // # services, and proprietary license terms, please see
13130 13181 // # https://rhodecode.com/licenses/
13131 13182
13132 13183 angular.module('appenlight.services.typeAheadTagHelper', []).factory('typeAheadTagHelper', function () {
13133 13184 var typeAheadTagHelper = {tags: []};
13134 13185 typeAheadTagHelper.aheadFilter = function (item, viewValue) {
13135 13186 //dont show "deeper" autocomplete like level:foo with exception of application ones
13136 13187 var label_text = item.text || item;
13137 13188 if (label_text.charAt(label_text.length - 1) != ':' && viewValue.indexOf(':') === -1 && label_text.indexOf('resource:') !== 0) {
13138 13189 return false;
13139 13190 }
13140 13191 if (viewValue.length > 2) {
13141 13192 // with apps we need to do it differently
13142 13193 if (viewValue.toLowerCase().indexOf('resource:') == 0) {
13143 13194 viewValue = viewValue.split(':').pop();
13144 13195 }
13145 13196 // check if tags match
13146 13197 if (label_text.toLowerCase().indexOf(viewValue.toLowerCase()) === -1) {
13147 13198 return false;
13148 13199 }
13149 13200 }
13150 13201 return true;
13151 13202 };
13152 13203 typeAheadTagHelper.removeSearchTag = function (tag) {
13153 13204
13154 13205 var indexValue = _.indexOf(typeAheadTagHelper.tags, tag);
13155 13206 typeAheadTagHelper.tags.splice(indexValue, 1);
13156 13207
13157 13208 };
13158 13209 typeAheadTagHelper.addSearchTag = function (tag) {
13159 13210 // do not allow dupes - angular will complain
13160 13211 var found = _.find(typeAheadTagHelper.tags, function (existingTag) {
13161 13212 return existingTag.type == tag.type && existingTag.value == tag.value
13162 13213 });
13163 13214 if (!found) {
13164 13215 typeAheadTagHelper.tags.push(tag);
13165 13216 }
13166 13217 };
13167 13218
13168 13219 return typeAheadTagHelper;
13169 13220 });
13170 13221
13171 13222 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
13172 13223 // #
13173 13224 // # This program is free software: you can redistribute it and/or modify
13174 13225 // # it under the terms of the GNU Affero General Public License, version 3
13175 13226 // # (only), as published by the Free Software Foundation.
13176 13227 // #
13177 13228 // # This program is distributed in the hope that it will be useful,
13178 13229 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
13179 13230 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13180 13231 // # GNU General Public License for more details.
13181 13232 // #
13182 13233 // # You should have received a copy of the GNU Affero General Public License
13183 13234 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
13184 13235 // #
13185 13236 // # This program is dual-licensed. If you wish to learn more about the
13186 13237 // # AppEnlight Enterprise Edition, including its added features, Support
13187 13238 // # services, and proprietary license terms, please see
13188 13239 // # https://rhodecode.com/licenses/
13189 13240
13190 13241 angular.module('appenlight.services.UUIDProvider', []).factory('UUIDProvider', function () {
13191 13242 var provider = {
13192 13243 genUUID4: function () {
13193 13244 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
13194 13245 /[xy]/g, function (c) {
13195 13246 var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
13196 13247 return v.toString(16);
13197 13248 }
13198 13249 );
13199 13250 }
13200 13251 };
13201 13252 return provider;
13202 13253 });
13203 13254
13204 13255 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
13205 13256 // #
13206 13257 // # This program is free software: you can redistribute it and/or modify
13207 13258 // # it under the terms of the GNU Affero General Public License, version 3
13208 13259 // # (only), as published by the Free Software Foundation.
13209 13260 // #
13210 13261 // # This program is distributed in the hope that it will be useful,
13211 13262 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
13212 13263 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13213 13264 // # GNU General Public License for more details.
13214 13265 // #
13215 13266 // # You should have received a copy of the GNU Affero General Public License
13216 13267 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
13217 13268 // #
13218 13269 // # This program is dual-licensed. If you wish to learn more about the
13219 13270 // # AppEnlight Enterprise Edition, including its added features, Support
13220 13271 // # services, and proprietary license terms, please see
13221 13272 // # https://rhodecode.com/licenses/
13222 13273
13223 13274 var underscore = angular.module('underscore', []);
13224 13275 underscore.factory('_', function () {
13225 13276 return window._; // assumes underscore has already been loaded on the page
13226 13277 });
@@ -1,188 +1,171 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # AppEnlight Enterprise Edition, including its added features, Support
19 19 # services, and proprietary license terms, please see
20 20 # https://rhodecode.com/licenses/
21 21
22 22 import hashlib
23 23 import os
24 24
25 25 from pyramid.i18n import TranslationStringFactory
26 26 from pyramid import threadlocal
27 27
28 28 _ = TranslationStringFactory('pyramid')
29 29
30 30 from appenlight import security
31 31 from appenlight.lib import helpers, generate_random_string
32 32 from appenlight.models.services.config import ConfigService
33 33
34 34
35 35 def gen_urls(request):
36 36 urls = {
37 37 'baseUrl': request.route_url('/'),
38 38 'applicationsNoId': request.route_url('applications_no_id'),
39 39 'applications': request.route_url('applications', resource_id='REPLACE_ID').replace('REPLACE_ID',':resourceId'),
40 40 'applicationsProperty': request.route_url('applications_property',key='REPLACE_KEY', resource_id='REPLACE_ID').replace('REPLACE_ID',':resourceId').replace('REPLACE_KEY',':key'),
41 'configsNoId': request.route_url('admin_configs'),
42 'configs': request.route_url('admin_config', key='REPLACE_KEY', section='REPLACE_SECTION').replace('REPLACE_SECTION',':section').replace('REPLACE_KEY',':key'),
41 'configsNoId': request.route_url('admin_configs'),
42 'configs': request.route_url('admin_config', key='REPLACE_KEY', section='REPLACE_SECTION').replace('REPLACE_SECTION',':section').replace('REPLACE_KEY',':key'),
43 43 'docs': 'http://getappenlight.com/page/api/main.html',
44 44 'eventsNoId': request.route_url('events_no_id'),
45 45 'events': request.route_url('events', event_id='REPLACE_ID').replace('REPLACE_ID',':eventId'),
46 46 'eventsProperty': request.route_url('events_property',key='REPLACE_KEY', event_id='REPLACE_ID').replace('REPLACE_ID',':eventId').replace('REPLACE_KEY',':key'),
47 47 'groupsNoId': request.route_url('groups_no_id'),
48 48 'groups': request.route_url('groups', group_id='REPLACE_ID').replace('REPLACE_ID',':groupId'),
49 49 'groupsProperty': request.route_url('groups_property',key='REPLACE_KEY', group_id='REPLACE_ID').replace('REPLACE_ID',':groupId').replace('REPLACE_KEY',':key'),
50 'logsNoId': request.route_url('logs_no_id'),
50 'logsNoId': request.route_url('logs_no_id'),
51 51 'integrationAction': request.route_url('integrations_id',action='REPLACE_ACT', resource_id='REPLACE_RID', integration='REPLACE_IID').replace('REPLACE_RID',':resourceId').replace('REPLACE_ACT',':action').replace('REPLACE_IID',':integration'),
52 52 'usersNoId': request.route_url('users_no_id'),
53 53 'users': request.route_url('users', user_id='REPLACE_ID').replace('REPLACE_ID',':userId'),
54 54 'usersProperty': request.route_url('users_property',key='REPLACE_KEY', user_id='REPLACE_ID').replace('REPLACE_ID',':userId').replace('REPLACE_KEY',':key'),
55 55 'userSelf': request.route_url('users_self'),
56 56 'userSelfProperty': request.route_url('users_self_property',key='REPLACE_KEY').replace('REPLACE_KEY',':key'),
57 'reports': request.route_url('reports'),
58 'reportGroup': request.route_url('report_groups', group_id='REPLACE_RID').replace('REPLACE_RID',':groupId'),
59 'reportGroupProperty': request.route_url('report_groups_property', key='REPLACE_KEY', group_id='REPLACE_GID').replace('REPLACE_KEY',':key').replace('REPLACE_GID',':groupId'),
60 'pluginConfigsNoId': request.route_url('plugin_configs', plugin_name='REPLACE_TYPE').replace('REPLACE_TYPE',':plugin_name'),
61 'pluginConfigs': request.route_url('plugin_config', id='REPLACE_ID', plugin_name='REPLACE_TYPE').replace('REPLACE_ID',':id').replace('REPLACE_TYPE',':plugin_name'),
57 'reports': request.route_url('reports'),
58 'reportGroup': request.route_url('report_groups', group_id='REPLACE_RID').replace('REPLACE_RID',':groupId'),
59 'reportGroupProperty': request.route_url('report_groups_property', key='REPLACE_KEY', group_id='REPLACE_GID').replace('REPLACE_KEY',':key').replace('REPLACE_GID',':groupId'),
60 'pluginConfigsNoId': request.route_url('plugin_configs', plugin_name='REPLACE_TYPE').replace('REPLACE_TYPE',':plugin_name'),
61 'pluginConfigs': request.route_url('plugin_config', id='REPLACE_ID', plugin_name='REPLACE_TYPE').replace('REPLACE_ID',':id').replace('REPLACE_TYPE',':plugin_name'),
62 62 'resourceProperty': request.route_url('resources_property',key='REPLACE_KEY', resource_id='REPLACE_ID').replace('REPLACE_ID',':resourceId').replace('REPLACE_KEY',':key'),
63 'slowReports': request.route_url('slow_reports'),
64 'sectionView': request.route_url('section_view', section='REPLACE_S', view='REPLACE_V').replace('REPLACE_S',':section').replace('REPLACE_V',':view'),
63 'slowReports': request.route_url('slow_reports'),
64 'sectionView': request.route_url('section_view', section='REPLACE_S', view='REPLACE_V').replace('REPLACE_S',':section').replace('REPLACE_V',':view'),
65 65 'otherRoutes': {
66 'register': request.route_url('register') ,
67 'lostPassword': request.route_url('lost_password') ,
68 'lostPasswordGenerate': request.route_url('lost_password_generate'),
66 'register': request.route_url('register'),
67 'lostPassword': request.route_url('lost_password'),
68 'lostPasswordGenerate': request.route_url('lost_password_generate'),
69 69 'signOut': request.route_url('ziggurat.routes.sign_out')
70 70 },
71 71 'social_auth': {
72 'google':request.route_url('social_auth', provider='google'),
73 'twitter':request.route_url('social_auth', provider='twitter'),
74 'bitbucket':request.route_url('social_auth', provider='bitbucket'),
75 'github':request.route_url('social_auth', provider='github'),
72 'google': request.route_url('social_auth', provider='google'),
73 'twitter': request.route_url('social_auth', provider='twitter'),
74 'bitbucket': request.route_url('social_auth', provider='bitbucket'),
75 'github': request.route_url('social_auth', provider='github'),
76 76 },
77 "plugins":{},
77 "plugins": {},
78 78 "adminAction": request.route_url('admin', action="REPLACE_ACT").replace('REPLACE_ACT',':action')
79 79 }
80 80 return urls
81 81
82 82 def new_request(event):
83 83 environ = event.request.environ
84 84 event.request.response.headers['X-Frame-Options'] = 'SAMEORIGIN'
85 85 event.request.response.headers['X-XSS-Protection'] = '1; mode=block'
86 86 # can this be enabled on non https deployments?
87 87 # event.request.response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubdomains;'
88 88
89 89 # do not send XSRF token with /api calls
90 90 if not event.request.path.startswith('/api'):
91 91 if environ['wsgi.url_scheme'] == 'https':
92 92 event.request.response.set_cookie(
93 93 'XSRF-TOKEN', event.request.session.get_csrf_token(),
94 94 secure=True)
95 95 else:
96 96 event.request.response.set_cookie(
97 97 'XSRF-TOKEN', event.request.session.get_csrf_token())
98 98 if event.request.user:
99 99 event.request.response.headers[
100 100 'x-appenlight-uid'] = '%s' % event.request.user.id
101 101
102 102
103 103 def add_renderer_globals(event):
104 104 request = event.get("request") or threadlocal.get_current_request()
105 105
106 106 renderer_globals = event
107 107 renderer_globals["h"] = helpers
108 108 renderer_globals["js_hash"] = request.registry.js_hash
109 109 renderer_globals["css_hash"] = request.registry.css_hash
110 110 renderer_globals['_'] = _
111 111 renderer_globals['security'] = security
112 112 renderer_globals['flash_msgs'] = []
113 113 renderer_globals['js_plugins'] = []
114 renderer_globals['top_nav'] = {
115 'menu_dashboards_items': [],
116 'menu_reports_items': [],
117 'menu_logs_items': [],
118 'menu_settings_items': [],
119 'menu_admin_items': [],
120 }
121 114
122 115 if 'jinja' in event['renderer_info'].type:
123 116 renderer_globals['url_list'] = gen_urls(request)
124 117 # add footer html and some other global vars to renderer
125 118 for module, config in request.registry.appenlight_plugins.items():
126 119 if config['url_gen']:
127 120 urls = config['url_gen'](request)
128 121 renderer_globals['url_list']['plugins'][module] = urls
129 122
130 123 if config['javascript']:
131 124 renderer_globals['js_plugins'].append(
132 ({'name':module, 'config':config['javascript']}))
133 for nav_key in renderer_globals['top_nav'].keys():
134 if nav_key in config['top_nav'] and config['top_nav'][nav_key]:
135 renderer_globals['top_nav'][nav_key].append(
136 config['top_nav'][nav_key])
137
138 if request.has_permission('root_administration',
139 security.RootFactory(request)):
140 renderer_globals['top_nav']['menu_admin_items'].append(
141 {'sref': 'admin', 'label': 'Admin Settings'}
142 )
125 ({'name': module, 'config': config['javascript']}))
143 126
144 127 footer_config = ConfigService.by_key_and_section(
145 128 'template_footer_html', 'global', default_value='')
146 129
147 130 renderer_globals['template_footer_html'] = footer_config.value
148 131 try:
149 132 renderer_globals['root_administrator'] = request.has_permission(
150 133 'root_administration', security.RootFactory(request))
151 134 except AttributeError:
152 135 renderer_globals['root_administrator'] = False
153 136
154 137 renderer_globals['_mail_url'] = request.registry.settings['_mail_url']
155 138
156 139 if not request:
157 140 return
158 141
159 142 # do not sens flash headers with /api calls
160 143 if not request.path.startswith('/api'):
161 144 flash_msgs = helpers.get_type_formatted_flash(request)
162 145 renderer_globals['flash_msgs'] = flash_msgs
163 146 request.add_flash_to_headers()
164 147
165 148 def application_created(app):
166 149 webassets_dir = app.app.registry.settings.get('webassets.dir')
167 150 js_hash = generate_random_string()
168 151 css_hash = generate_random_string()
169 152 if webassets_dir:
170 153 js_hasher = hashlib.md5()
171 154 css_hasher = hashlib.md5()
172 155 for root, dirs, files in os.walk(webassets_dir):
173 156 for name in files:
174 157 filename = os.path.join(root, name)
175 158 if name.endswith('css'):
176 159 with open(filename, 'r', encoding='utf8',
177 160 errors='replace') as f:
178 161 for line in f:
179 162 css_hasher.update(line.encode('utf8'))
180 163 elif name.endswith('js'):
181 164 with open(filename, 'r', encoding='utf8',
182 165 errors='replace') as f:
183 166 for line in f:
184 167 js_hasher.update(line.encode('utf8'))
185 168 js_hash = js_hasher.hexdigest()
186 169 css_hash = css_hasher.hexdigest()
187 170 app.app.registry.js_hash = js_hash
188 171 app.app.registry.css_hash = css_hash
@@ -1,122 +1,121 b''
1 1 {% import 'widgets.jinja2' as widgets %}
2 2 <!DOCTYPE html>
3 3 <html>
4 4 <head>
5 5 <title>{% block title %}Application performance, exception and error monitoring for Python,
6 6 Django, Flask and Javascript - AppEnlight{% endblock %}</title>
7 7 {% block meta %}
8 8 <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
9 9 <meta name="robots" content="all">
10 10 <meta name="Description"
11 11 content="AppEnlight provides a helpful interface to let you and your team save time spent on debugging and reproducing issues from a production environment.">
12 12 <meta name="Keywords"
13 13 content="monitoring, debugging, alerting, errors, programming, python, ruby, django, flask, profiling">
14 14 <meta name="Author" content="RhodeCode - sales@rhodecode.com">
15 15 <meta name="Copyright" content="RhodeCode">
16 16 <base href="{{ request.route_path('/') }}">
17 17 <link rel="shortcut icon" href="{{ request.static_url('appenlight:webassets/appenlight/favicon.ico')}}"/>
18 18 {% endblock %}
19 19 {% block styles %}
20 20 <link href="{{ request.static_url('appenlight:webassets/appenlight/css/front.css', _query={'rev':css_hash}) }}" rel="stylesheet" type="text/css"/>
21 21 <meta name="viewport" content="width=device-width, initial-scale=1.0">
22 22 {% endblock %}
23 23 <script type="text/javascript">
24 24 var AE = {};
25 25 AE.urls = {{ url_list|tojson|safe }};
26 26 AE.ws_url = '{{ request.registry.settings['cometd.ws_url'] }}';
27 27 AE.flash_messages = {{ flash_msgs|toJSONUnsafe }};
28 28 AE.timeOptions = {{ h.time_options|toJSONUnsafe }};
29 29 AE.plugins = {{ js_plugins|toJSONUnsafe }};
30 AE.topNav = {{ top_nav|toJSONUnsafe }};
31 30 </script>
32 31 {% if request.registry.settings.get('appenlight.public_api_key') %}
33 32 <script type="application/javascript">
34 33 var initAppEnlight = function () {
35 34 if(this.readyState!='loading'){
36 35 AppEnlight.init({
37 36 apiKey:'{{ request.registry.settings.get('appenlight.public_api_key') }}',
38 37 windowOnError: 1 // enable to hook to window.onerror
39 38 });
40 39 // setting request info is completly optional
41 40 AppEnlight.setRequestInfo({
42 41 server:"{{ request.environ.get('SERVER_NAME', '<unknown>') }}",
43 42 {% if request.user %}
44 43 username:'{{ request.user.user_name }}',
45 44 {% endif %}
46 45 ip: "{{ request.environ.get('REMOTE_ADDR', '') }}",
47 46 request_id:"{{ request.environ.get('appenlight.request_id', '') }}"
48 47 });
49 48
50 49 AppEnlight.addGlobalTags({framework:'angular', 'language':'javascript'});
51 50 AppEnlight.addGlobalExtra({some_key:'on every request'});
52 51
53 52 }
54 53 };
55 54 // load the script asynchroneously
56 55 var scrElem = document.createElement('script');
57 56 scrElem.type = 'text/javascript';
58 57 scrElem.async = true;
59 58 scrElem.onload = scrElem.onreadystatechange = initAppEnlight;
60 59 scrElem.src = "//cdn.jsdelivr.net/appenlight/latest/appenlight-client.min.js";
61 60 var p = document.getElementsByTagName('script')[0];
62 61 p.parentNode.insertBefore(scrElem, p);
63 62 </script>
64 63 {% endif %}
65 64 <script src="{{ request.static_url('appenlight:webassets/appenlight/js/appenlight.js', _query={'rev':js_hash}) }}"></script>
66 65 {% for plugin in js_plugins %}
67 66 <script src="{{ request.static_url('appenlight:webassets/{}/js/{}'.format(plugin['name'], plugin['config']['src']), _query={'rev':js_hash}) }}"></script>
68 67 {% endfor %}
69 68 <script>
70 69 var xhr = new XMLHttpRequest();
71 70 xhr.open('GET', AE.urls.userSelf);
72 71 xhr.onload = function() {
73 72 if (xhr.status === 200) {
74 73 kickstartAE(JSON.parse(xhr.responseText));
75 74 angular.bootstrap(document, ['appenlight']);
76 75 }
77 76 else {
78 77 kickstartAE(null);
79 78 angular.bootstrap(document, ['appenlight']);
80 79 }
81 80 };
82 81 // do not run angular on register page
83 82
84 83 var noAngularRoutes = [
85 84 AE.urls.otherRoutes.register,
86 85 AE.urls.otherRoutes.lostPassword,
87 86 AE.urls.otherRoutes.lostPasswordGenerate,
88 87 ];
89 88 shouldRunAngular = true;
90 89 for (var i=0; i< noAngularRoutes.length; i++){
91 90 if (window.location.toString().indexOf(noAngularRoutes[i]) !== -1) {
92 91 shouldRunAngular = false;
93 92 }
94 93 }
95 94 if (shouldRunAngular) {
96 95 xhr.send();
97 96 }
98 97 </script>
99 98 </head>
100 99 <body class="{% block section_name %}{% endblock %} {% raw %}top-state-{{$state.current.name.split('.')[0].replace('.', '-').replace('.', '-')}} state-{{$state.current.name.replace('.', '-').replace('.', '-')}}{% endraw %} {% if request.user %}user-logged {% else %}user-unlogged{% endif %}" id="html_body">
101 100 <div id="holder">
102 101 {% block app_block %}
103 102 <appenlight-app>
104 103 <div class="text-center">
105 104 <span class="fa fa-cog fa-spin fa-5x loader"></span>
106 105 </div>
107 106 </appenlight-app>
108 107 {% endblock %}
109 108
110 109 {% block non_angular_content %}
111 110 {% if not request.user %}
112 111 {% include "/header.jinja2" with context %}
113 112 <div id="outer-content">
114 113 {% block outer_content %}{% endblock %}
115 114 </div>
116 115 {% endif %}
117 116 {% endblock %}
118 117
119 118 {% include "/footer.jinja2" %}
120 119 </div>
121 120 </body>
122 121 </html>
@@ -1,234 +1,243 b''
1 1 // # Copyright (C) 2010-2016 RhodeCode GmbH
2 2 // #
3 3 // # This program is free software: you can redistribute it and/or modify
4 4 // # it under the terms of the GNU Affero General Public License, version 3
5 5 // # (only), as published by the Free Software Foundation.
6 6 // #
7 7 // # This program is distributed in the hope that it will be useful,
8 8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 // # GNU General Public License for more details.
11 11 // #
12 12 // # You should have received a copy of the GNU Affero General Public License
13 13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 // #
15 15 // # This program is dual-licensed. If you wish to learn more about the
16 16 // # AppEnlight Enterprise Edition, including its added features, Support
17 17 // # services, and proprietary license terms, please see
18 18 // # https://rhodecode.com/licenses/
19 19
20 20 'use strict';
21 21
22 22 // Declare app level module which depends on filters, and services
23 23 angular.module('appenlight.base', [
24 24 'ngRoute',
25 25 'ui.router',
26 26 'ui.router.router',
27 27 'underscore',
28 28 'ui.bootstrap',
29 29 'ngResource',
30 30 'ngAnimate',
31 31 'ngCookies',
32 32 'smart-table',
33 33 'angular-toArrayFilter',
34 34 'mentio'
35 35 ]);
36 36
37 37 angular.module('appenlight.filters', []);
38 38 angular.module('appenlight.templates', []);
39 39 angular.module('appenlight.controllers', [
40 40 'appenlight.base'
41 41 ]);
42 42 angular.module('appenlight.components', [
43 43 'appenlight.components.channelstream',
44 44 'appenlight.components.appenlightApp',
45 45 'appenlight.components.appenlightHeader',
46 46 'appenlight.components.indexDashboardView',
47 47 'appenlight.components.logsBrowserView',
48 48 'appenlight.components.reportView',
49 49 'appenlight.components.reportsBrowserView',
50 50 'appenlight.components.reportsSlowBrowserView',
51 51 'appenlight.components.eventBrowserView',
52 52 'appenlight.components.userProfileView',
53 53 'appenlight.components.userIdentitiesView',
54 54 'appenlight.components.userPasswordView',
55 55 'appenlight.components.userAuthTokensView',
56 56 'appenlight.components.userAlertChannelsListView',
57 57 'appenlight.components.userAlertChannelsEmailNewView',
58 58 'appenlight.components.applicationsListView',
59 59 'appenlight.components.applicationsPurgeLogsView',
60 60 'appenlight.components.applicationsUpdateView',
61 61 'appenlight.components.integrationsListView',
62 62 'appenlight.components.bitbucketIntegrationConfigView',
63 63 'appenlight.components.campfireIntegrationConfigView',
64 64 'appenlight.components.flowdockIntegrationConfigView',
65 65 'appenlight.components.githubIntegrationConfigView',
66 66 'appenlight.components.hipchatIntegrationConfigView',
67 67 'appenlight.components.jiraIntegrationConfigView',
68 68 'appenlight.components.slackIntegrationConfigView',
69 69 'appenlight.components.webhooksIntegrationConfigView',
70 70 'appenlight.components.adminView',
71 71 'appenlight.components.adminApplicationsListView',
72 72 'appenlight.components.adminUsersListView',
73 73 'appenlight.components.adminUsersCreateView',
74 74 'appenlight.components.adminGroupsListView',
75 75 'appenlight.components.adminGroupsCreateView',
76 76 'appenlight.components.adminConfigurationView',
77 77 'appenlight.components.adminSystemView',
78 78 'appenlight.components.adminPartitionsView',
79 79 'appenlight.components.settingsView'
80 80 ]);
81 81 angular.module('appenlight.directives', [
82 82 'appenlight.directives.c3chart',
83 83 'appenlight.directives.confirmValidate',
84 84 'appenlight.directives.focus',
85 85 'appenlight.directives.formErrors',
86 86 'appenlight.directives.humanFormat',
87 87 'appenlight.directives.isoToRelativeTime',
88 88 'appenlight.directives.permissionsForm',
89 89 'appenlight.directives.smallReportGroupList',
90 90 'appenlight.directives.smallReportList',
91 91 'appenlight.directives.pluginConfig',
92 92 'appenlight.directives.recursive',
93 93 'appenlight.directives.reportAlertAction',
94 94 'appenlight.directives.postProcessAction',
95 95 'appenlight.directives.rule',
96 96 'appenlight.directives.ruleReadOnly'
97 97 ]);
98 98 angular.module('appenlight.services', [
99 99 'appenlight.services.chartResultParser',
100 100 'appenlight.services.resources',
101 101 'appenlight.services.stateHolder',
102 102 'appenlight.services.typeAheadTagHelper',
103 103 'appenlight.services.UUIDProvider'
104 104 ]).value('version', '0.1');
105 105
106 106
107 107 var pluginsToLoad = _.map(decodeEncodedJSON(window.AE.plugins),
108 108 function(item){
109 109 return item.config.angular_module
110 110 });
111 console.log(pluginsToLoad);
111 console.info(pluginsToLoad);
112
112 113 angular.module('appenlight.plugins', pluginsToLoad);
113 114
114 115 var app = angular.module('appenlight', [
115 116 'appenlight.base',
116 117 'appenlight.config',
117 118 'appenlight.templates',
118 119 'appenlight.filters',
119 120 'appenlight.services',
120 121 'appenlight.directives',
121 122 'appenlight.controllers',
122 123 'appenlight.components',
123 124 'appenlight.plugins'
124 125 ]);
125 126
126 127 // needs manual execution because of plugin files
127 128 function kickstartAE(initialUserData) {
128 129 app.config(['$httpProvider', '$uibTooltipProvider', '$locationProvider', function ($httpProvider, $uibTooltipProvider, $locationProvider) {
129 130 $locationProvider.html5Mode(true);
130 131 $httpProvider.interceptors.push(['$q', '$rootScope', '$timeout', 'stateHolder', function ($q, $rootScope, $timeout, stateHolder) {
131 132 return {
132 133 'response': function (response) {
133 134 var flashMessages = angular.fromJson(response.headers('x-flash-messages'));
134 135 if (flashMessages && flashMessages.length > 0) {
135 136 stateHolder.flashMessages.extend(flashMessages);
136 137 }
137 138 return response;
138 139 },
139 140 'responseError': function (rejection) {
140 141 if (rejection.status > 299 && rejection.status !== 422) {
141 142 stateHolder.flashMessages.extend([{
142 143 msg: 'Response status code: ' + rejection.status + ', "' + rejection.statusText + '", url: ' + rejection.config.url,
143 144 type: 'error'
144 145 }]);
145 146 }
146 147 if (rejection.status == 0) {
147 148 stateHolder.flashMessages.extend([{
148 149 msg: 'Response timeout',
149 150 type: 'error'
150 151 }]);
151 152 }
152 153 var flashMessages = angular.fromJson(rejection.headers('x-flash-messages'));
153 154 if (flashMessages && flashMessages.length > 0) {
154 155 stateHolder.flashMessages.extend(flashMessages);
155 156 }
156 157
157 158 return $q.reject(rejection);
158 159 }
159 160 }
160 161 }]);
161 162
162 163 $uibTooltipProvider.options({appendToBody: true});
163 164
164 165 }]);
165 166
166 167
167 168 app.config(function ($provide) {
168 169 $provide.decorator("$exceptionHandler", function ($delegate) {
169 170 return function (exception, cause) {
170 171 $delegate(exception, cause);
171 172 if (typeof AppEnlight !== 'undefined') {
172 173 AppEnlight.grabError(exception);
173 174 }
174 175 };
175 176 });
176 177 });
177 178
178 179 app.run(['$rootScope', '$timeout', 'stateHolder', '$state', '$location', '$transitions', '$window', 'AeConfig',
179 180 function ($rootScope, $timeout, stateHolder, $state, $location, $transitions, $window, AeConfig) {
180 181 if (initialUserData){
181 182 stateHolder.AeUser.update(initialUserData);
183
184 if (stateHolder.AeUser.hasAppPermission('root_administration'
185 )){
186 AeConfig.topNav.menuAdminItems.push(
187 {'sref': 'admin', 'label': 'Admin Settings'}
188 )
189 }
190
182 191 }
183 192 $rootScope.$state = $state;
184 193 $rootScope.stateHolder = stateHolder;
185 194 $rootScope.flash = stateHolder.flashMessages.list;
186 195 $rootScope.closeAlert = stateHolder.flashMessages.closeAlert;
187 196 $rootScope.AeConfig = AeConfig;
188 197
189 198 var transitionApp = function($transition$, $state) {
190 199 // redirect user to /register unless its one of open views
191 200 var isGuestState = [
192 201 'report.view_detail',
193 202 'report.view_group',
194 203 'dashboard.view'
195 204 ].indexOf($transition$.to().name) !== -1;
196 205
197 206 var path = $window.location.pathname;
198 207 // strip trailing slash
199 208 if (path.substr(path.length - 1) === '/') {
200 209 path = path.substr(0, path.length - 1);
201 210 }
202 211 var isOpenView = false;
203 212 var openViews = [
204 213 AeConfig.urls.otherRoutes.lostPassword,
205 214 AeConfig.urls.otherRoutes.lostPasswordGenerate
206 215 ];
207 216 console.log('$transitions.onBefore', path, $transition$.to().name, $state);
208 217 _.each(openViews, function (url) {
209 218 var url = '/' + url.split('/').slice(3).join('/');
210 219 if (url === path) {
211 220 isOpenView = true;
212 221 }
213 222 });
214 223 if (stateHolder.AeUser.id === null && !isGuestState && !isOpenView) {
215 224 if (window.location.toString().indexOf(AeConfig.urls.otherRoutes.register) === -1) {
216 225 console.log('redirect to register');
217 226 var newLocation = AeConfig.urls.otherRoutes.register + '?came_from=' + encodeURIComponent(window.location);
218 227 // fix infinite digest here
219 228 $rootScope.$on('$locationChangeStart',
220 229 function(event, toState, toParams, fromState, fromParams, options){
221 230 event.preventDefault();
222 231 $window.location = newLocation;
223 232 });
224 233 $window.location = newLocation;
225 234 return false;
226 235 }
227 236 return false;
228 237 }
229 238 return true;
230 239 };
231 240 $transitions.onBefore({}, transitionApp);
232 241
233 242 }]);
234 243 }
@@ -1,101 +1,101 b''
1 1 <!-- Fixed navbar -->
2 2 <div id="top-navbar" class="navbar navbar-default navbar-fixed-top" role="navigation">
3 3 <div class="pattern">
4 4 <div class="container">
5 5 <div class="navbar-header pull-left">
6 6 <a data-ui-sref="front_dashboard" class="navbar-brand">
7 7 <div id="logo-normal" class="hidden-sm hidden-xs"></div>
8 8 <div id="logo-icon" class="visible-sm visible-xs"></div>
9 9 </a>
10 10 </div>
11 11
12 12 <div class="container-fluid">
13 13 <div>
14 14 <ul class="nav navbar-nav navbar-right" ng-if="$ctrl.stateHolder.AeUser.id !== null">
15 15 <li id="user-notifications" class="dropdown ng-cloak" data-uib-dropdown>
16 16
17 17 <a class="dropdown-toggle" data-uib-dropdown-toggle>
18 18 <span class="badge">{{$ctrl.assignedReports.length}}</span>
19 19 <span class="fa fa-envelope-o"></span>
20 20 </a>
21 21 <ul class="dropdown-menu">
22 22 <li role="presentation" class="dropdown-header">Assigned reports</li>
23 23 <li data-ng-repeat="report in $ctrl.assignedReports" role="presentation">
24 24 <a href="{{report.front_url}}" role="menuitem" tabindex="-1">
25 25 <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>
26 26 </a>
27 27
28 28 </li>
29 29 <li data-ng-if="$ctrl.assignedReports.length == 0"><a><small>No reports</small></a></li>
30 30 </ul>
31 31 </li>
32 32 <li id="alert-notifications" class="dropdown ng-cloak" data-uib-dropdown auto-close="outsideClick">
33 33 <a class="dropdown-toggle" data-uib-dropdown-toggle>
34 34 <span class="badge {{ activeEvents ? 'danger' : '' }}">{{$ctrl.activeEvents}}</span>
35 35 <span class="fa fa-bell-o"></span></a>
36 36 <ul class="dropdown-menu">
37 37 <li role="presentation" class="dropdown-header">
38 38 <a data-ui-sref="events" class="btn btn-xs btn-default">Show me more</a></li>
39 39 <li role="presentation" class="dropdown-header">Latest events</li>
40 40 <li data-ng-repeat="event in $ctrl.latestEvents" role="presentation">
41 41 <a data-ng-click="$ctrl.clickedEvent(event)"><small class="resource-name">For {{ event.resource_name }}</small><br/>
42 42 <small>{{ event.text |truncate:65}}</small><br/>
43 43 <small class="date" data-uib-tooltip="{{event.start_date}}">created: <iso-to-relative-time time="{{event.start_date}}"/></small>
44 44 <small class="date" data-ng-show="event.end_date" data-uib-tooltip="{{event.end_date}}">closed: <iso-to-relative-time time="{{event.end_date}}"/></small>
45 45 </a>
46 46 </li>
47 47 <li data-ng-if="$ctrl.latestEvents.length == 0"><a><small>No events</small></a></li>
48 48 </ul>
49 49 </li>
50 50
51 51 <li id="dashboards" class="dropdown" data-uib-dropdown>
52 52 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Dashboards">
53 53 <span class="fa fa-bar-chart-o "></span></a>
54 54 <ul class="dropdown-menu">
55 55 <li role="presentation"><a data-ui-sref="front_dashboard">Main dashboard</a></li>
56 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menu_dashboards_items">
56 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menuDashboardsItems">
57 57 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
58 58 </li>
59 59 </ul>
60 60 </li>
61 61
62 62 <li class="dropdown" data-uib-dropdown>
63 63 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Reports">
64 64 <span class="fa fa-exclamation-triangle"></span></a>
65 65 <ul class="dropdown-menu">
66 66 <li role="presentation">
67 67 <a data-ui-sref="report.list({resource:$ctrl.stateHolder.resource})">Error Reports</a>
68 68 </li>
69 69 <li role="presentation">
70 70 <a data-ui-sref="report.list_slow({resource:$ctrl.stateHolder.resource})">Slowness Reports</a>
71 71 </li>
72 72
73 73 </ul>
74 74 </li>
75 75
76 76 <li>
77 77 <a data-ui-sref="logs({resource:$ctrl.stateHolder.resource})" data-uib-tooltip="Logs" tooltip-placement="bottom"><span class="fa fa-list-alt "></span></a></li>
78 78 <li>
79 79 <a data-ui-sref="user" data-uib-tooltip="Settings" tooltip-placement="bottom"><span class="fa fa-cog "></span></a>
80 80 </li>
81 <li class="dropdown" data-uib-dropdown data-ng-if="$ctrl.AeConfig.topNav.menu_admin_items.length">
81 <li class="dropdown" data-uib-dropdown data-ng-if="$ctrl.AeConfig.topNav.menuAdminItems.length">
82 82 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Admin Settings">
83 83 <span class="fa fa-wrench"></span></a>
84 84 <ul class="dropdown-menu">
85 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menu_admin_items">
85 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menuAdminItems">
86 86 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
87 87 </li>
88 88 </ul>
89 89 </li>
90 90 <li><a href="{{ $ctrl.AeConfig.urls.otherRoutes.signOut }}" target="_self"
91 91 data-uib-tooltip="Sign out" tooltip-placement="bottom">
92 92 <span class="fa fa-power-off "></span></a></li>
93 93 </ul>
94 94 <ul class="nav navbar-nav pull-right" ng-if="$ctrl.stateHolder.AeUser.id === null">
95 95 <li><a href="{{ $ctrl.AeConfig.urls.otherRoutes.register }}" target="_self" class="btn btn-orange">Sign In</a></li>
96 96 </ul>
97 97 </div><!-- /.navbar-collapse -->
98 98 </div><!-- /.container-fluid -->
99 99 </div>
100 100 </div>
101 101 </div>
@@ -1,33 +1,55 b''
1 1 <div class="row">
2 2 <div class="col-sm-3" id="menu">
3 3 <div class="panel panel-default">
4 4 <div class="panel-heading">Applications</div>
5 5 <ul class="list-group">
6 6 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="applications.list"><span class="fa fa-cog"></span> List applications</a></li>
7 7 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="applications.update({resourceId:'new'})"><span class="fa fa-plus-circle"></span> Create application</a></li>
8 8 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="applications.purge_logs"><span class="fa fa-trash-o"></span> Purge logs</a></li>
9 9 </ul>
10
11 <ul class="list-group" data-ng-if="$ctrl.AeConfig.settingsNav.menuApplicationsItems.length">
12 <li class="list-group-item" ng-repeat="item in $ctrl.AeConfig.settingsNav.menuApplicationsItems">
13 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
14 </li>
15 </ul>
16
10 17 </div>
11 18
12 19
13 20 <div class="panel panel-default">
14 21 <div class="panel-heading">Settings</div>
15 22 <ul class="list-group">
16 23 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.profile.edit"><span class="fa fa-user"></span> Profile details</a></li>
17 24 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.profile.password"><span class="fa fa-lock"></span> Change Password</a></li>
18 25 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.profile.identities"><span class="fa fa-link"></span> External Identities</a></li>
19 26 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.profile.auth_tokens"><span class="fa fa-unlock"></span> Auth Tokens</a></li>
20 27 </ul>
28
29 <ul class="list-group" data-ng-if="$ctrl.AeConfig.settingsNav.menuUserSettingsItems.length">
30 <li class="list-group-item" ng-repeat="item in $ctrl.AeConfig.settingsNav.menuUserSettingsItems">
31 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
32 </li>
33 </ul>
34
21 35 </div>
22 36
23 37 <div class="panel panel-default">
24 38 <div class="panel-heading">Notifications</div>
25 39 <ul class="list-group">
26 40 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.alert_channels.list"><span class="fa fa-bullhorn"></span> Alert channels</a></li>
27 41 <li class="list-group-item" ui-sref-active-eq="active"><a data-ui-sref="user.alert_channels.email"><span class="fa fa-envelope"></span> Add email channel</a></li>
28 42 </ul>
43
44 <ul class="list-group" data-ng-if="$ctrl.AeConfig.settingsNav.menuNotificationsItems.length">
45 <li class="list-group-item" ng-repeat="item in $ctrl.AeConfig.settingsNav.menuNotificationsItems">
46 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
47 </li>
48 </ul>
49
29 50 </div>
51
30 52 </div>
31 53
32 54 <div class="col-sm-9" ui-view></div>
33 55 </div>
@@ -1,31 +1,32 b''
1 1 // # Copyright (C) 2010-2016 RhodeCode GmbH
2 2 // #
3 3 // # This program is free software: you can redistribute it and/or modify
4 4 // # it under the terms of the GNU Affero General Public License, version 3
5 5 // # (only), as published by the Free Software Foundation.
6 6 // #
7 7 // # This program is distributed in the hope that it will be useful,
8 8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 // # GNU General Public License for more details.
11 11 // #
12 12 // # You should have received a copy of the GNU Affero General Public License
13 13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 // #
15 15 // # This program is dual-licensed. If you wish to learn more about the
16 16 // # AppEnlight Enterprise Edition, including its added features, Support
17 17 // # services, and proprietary license terms, please see
18 18 // # https://rhodecode.com/licenses/
19 19
20 20 angular.module('appenlight.components.settingsView', [])
21 21 .component('settingsView', {
22 22 templateUrl: 'components/views/settings-view/settings-view.html',
23 23 controller: SettingsViewController
24 24 });
25 25
26 SettingsViewController.$inject = ['$state'];
26 SettingsViewController.$inject = ['$state', 'AeConfig'];
27 27
28 function SettingsViewController($state) {
28 function SettingsViewController($state, AeConfig) {
29 29 this.$state = $state;
30 this.AeConfig = AeConfig;
30 31 console.info('SettingsViewController');
31 32 }
@@ -1,35 +1,47 b''
1 1 // # Copyright (C) 2010-2016 RhodeCode GmbH
2 2 // #
3 3 // # This program is free software: you can redistribute it and/or modify
4 4 // # it under the terms of the GNU Affero General Public License, version 3
5 5 // # (only), as published by the Free Software Foundation.
6 6 // #
7 7 // # This program is distributed in the hope that it will be useful,
8 8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 // # GNU General Public License for more details.
11 11 // #
12 12 // # You should have received a copy of the GNU Affero General Public License
13 13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 // #
15 15 // # This program is dual-licensed. If you wish to learn more about the
16 16 // # AppEnlight Enterprise Edition, including its added features, Support
17 17 // # services, and proprietary license terms, please see
18 18 // # https://rhodecode.com/licenses/
19 19
20 20 var aeconfig = angular.module('appenlight.config', []);
21 21 aeconfig.factory('AeConfig', function () {
22 22 var obj = {};
23 23 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
24 24 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
25 25 obj.plugins = decodeEncodedJSON(window.AE.plugins);
26 obj.topNav = decodeEncodedJSON(window.AE.topNav);
26 obj.topNav = {
27 menuDashboardsItems: [],
28 menuReportsItems: [],
29 menuLogsItems: [],
30 menuSettingsItems: [],
31 menuAdminItems: []
32 };
33 obj.settingsNav = {
34 menuApplicationsItems: [],
35 menuUserSettingsItems: [],
36 menuNotificationsItems: []
37 };
38 obj.adminNav = {};
27 39 obj.ws_url = window.AE.ws_url;
28 40 obj.urls = window.AE.urls;
29 41 // set keys on values because we wont be able to retrieve them everywhere
30 42 for (var key in obj.timeOptions) {
31 43 obj.timeOptions[key]['key'] = key;
32 44 }
33 45 console.info('config', obj);
34 46 return obj;
35 47 });
General Comments 0
You need to be logged in to leave comments. Login now