##// END OF EJS Templates
frontend: angular 1.7.7
ergo -
Show More
This diff has been collapsed as it changes many lines, (4035 lines changed) Show them Hide them
@@ -1,13004 +1,13099 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 AngularJS v1.5.5
1347 (c) 2010-2016 Google, Inc. http://angularjs.org
1346 AngularJS v1.7.7
1347 (c) 2010-2018 Google, Inc. http://angularjs.org
1348 1348 License: MIT
1349 1349 */
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 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 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 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 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 $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 (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 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 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 "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 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 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 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 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 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 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 "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 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 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 (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 "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 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 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 $$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 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 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 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 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 " ").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 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 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 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 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 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 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 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 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 {$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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 !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 (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 !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 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 $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 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 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 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 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 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 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 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 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 (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 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 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 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 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 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 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 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 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 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 "="+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 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 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 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 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 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 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 "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 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 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 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 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 }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 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 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 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 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 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 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 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 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 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 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 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 !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 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 (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 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 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 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 !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 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 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 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 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 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 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 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 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 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 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 (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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 (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 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 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 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 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 [],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 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 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 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 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 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 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 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 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 '"'==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 !(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 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 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 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 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 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 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 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 "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 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 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 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 "$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 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 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 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 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 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 !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 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 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 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 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 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 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 ["$$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 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 "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 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 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 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 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 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 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 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 "\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 (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 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 "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 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 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 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 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 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 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 [],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 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 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 "=",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 "!=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 ";")},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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 (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 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 "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 "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 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 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 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 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 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 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 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 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 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 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 "$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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 !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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 "";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 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 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>');
1350 (function(C){'use strict';function re(a){if(D(a))w(a.objectMaxDepth)&&(Wb.objectMaxDepth=Xb(a.objectMaxDepth)?a.objectMaxDepth:NaN),w(a.urlErrorParamsEnabled)&&Ga(a.urlErrorParamsEnabled)&&(Wb.urlErrorParamsEnabled=a.urlErrorParamsEnabled);else return Wb}function Xb(a){return W(a)&&0<a}function F(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.7.7/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent,
1351 f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function ya(a){if(null==a||$a(a))return!1;if(H(a)||A(a)||x&&a instanceof x)return!0;var b="length"in Object(a)&&a.length;return W(b)&&(0<=b&&b-1 in a||"function"===typeof a.item)}function r(a,b,d){var c,e;if(a)if(B(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(H(a)||
1352 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!==r)a.forEach(b,d,a);else if(Nc(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)&&b.call(d,a[c],c,a);else for(c in a)ta.call(a,c)&&b.call(d,a[c],c,a);return a}function Oc(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 Yb(a){return function(b,d){a(d,b)}}function se(){return++pb}
1353 function Zb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||B(g))for(var k=Object.keys(g),h=0,l=k.length;h<l;h++){var m=k[h],p=g[m];d&&D(p)?ha(p)?a[m]=new Date(p.valueOf()):ab(p)?a[m]=new RegExp(p):p.nodeName?a[m]=p.cloneNode(!0):$b(p)?a[m]=p.clone():(D(a[m])||(a[m]=H(p)?[]:{}),Zb(a[m],[p],!0)):a[m]=p}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function S(a){return Zb(a,Ha.call(arguments,1),!1)}function te(a){return Zb(a,Ha.call(arguments,1),!0)}function fa(a){return parseInt(a,
1354 10)}function ac(a,b){return S(Object.create(a),b)}function E(){}function Ta(a){return a}function ia(a){return function(){return a}}function bc(a){return B(a.toString)&&a.toString!==la}function z(a){return"undefined"===typeof a}function w(a){return"undefined"!==typeof a}function D(a){return null!==a&&"object"===typeof a}function Nc(a){return null!==a&&"object"===typeof a&&!Pc(a)}function A(a){return"string"===typeof a}function W(a){return"number"===typeof a}function ha(a){return"[object Date]"===la.call(a)}
1355 function H(a){return Array.isArray(a)||a instanceof Array}function cc(a){switch(la.call(a)){case "[object Error]":return!0;case "[object Exception]":return!0;case "[object DOMException]":return!0;default:return a instanceof Error}}function B(a){return"function"===typeof a}function ab(a){return"[object RegExp]"===la.call(a)}function $a(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function Ga(a){return"boolean"===typeof a}function ue(a){return a&&W(a.length)&&ve.test(la.call(a))}
1356 function $b(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function we(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ua(a){return K(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Ia(a,b,d){function c(a,b,c){c--;if(0>c)return"...";var d=b.$$hashKey,f;if(H(a)){f=0;for(var g=a.length;f<g;f++)b.push(e(a[f],c))}else if(Nc(a))for(f in a)b[f]=e(a[f],c);else if(a&&"function"===typeof a.hasOwnProperty)for(f in a)a.hasOwnProperty(f)&&
1357 (b[f]=e(a[f],c));else for(f in a)ta.call(a,f)&&(b[f]=e(a[f],c));d?b.$$hashKey=d:delete b.$$hashKey;return b}function e(a,b){if(!D(a))return a;var d=g.indexOf(a);if(-1!==d)return k[d];if($a(a)||bb(a))throw pa("cpws");var d=!1,e=f(a);void 0===e&&(e=H(a)?[]:Object.create(Pc(a)),d=!0);g.push(a);k.push(e);return d?c(a,e,b):e}function f(a){switch(la.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(e(a.buffer),
1358 a.byteOffset,a.length);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(B(a.cloneNode))return a.cloneNode(!0)}
1359 var g=[],k=[];d=Xb(d)?d:NaN;if(b){if(ue(b)||"[object ArrayBuffer]"===la.call(b))throw pa("cpta");if(a===b)throw pa("cpi");H(b)?b.length=0:r(b,function(a,c){"$$hashKey"!==c&&delete b[c]});g.push(a);k.push(b);return c(a,b,d)}return e(a,d)}function dc(a,b){return a===b||a!==a&&b!==b}function va(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&&"object"===d)if(H(a)){if(!H(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!va(a[c],
1360 b[c]))return!1;return!0}}else{if(ha(a))return ha(b)?dc(a.getTime(),b.getTime()):!1;if(ab(a))return ab(b)?a.toString()===b.toString():!1;if(bb(a)||bb(b)||$a(a)||$a(b)||H(b)||ha(b)||ab(b))return!1;d=T();for(c in a)if("$"!==c.charAt(0)&&!B(a[c])){if(!va(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&w(b[c])&&!B(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(Ha.call(b,d))}function Va(a,b){var d=2<arguments.length?Ha.call(arguments,2):[];return!B(b)||b instanceof
1361 RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Qc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:$a(b)?d="$WINDOW":b&&C.document===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(!z(a))return W(b)||(b=b?2:null),JSON.stringify(a,Qc,b)}function Rc(a){return A(a)?JSON.parse(a):a}function ec(a,b){a=a.replace(xe,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+
1362 a)/6E4;return X(d)?b:d}function Sc(a,b){a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function fc(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=ec(b,c);return Sc(a,d*(b-c))}function za(a){a=x(a).clone().empty();var b=x("<div></div>").append(a).html();try{return a[0].nodeType===Pa?K(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(b)}}function Tc(a){try{return decodeURIComponent(a)}catch(b){}}function gc(a){var b={};r((a||"").split("&"),
1363 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=Tc(e),w(e)&&(f=w(f)?Tc(f):!0,ta.call(b,e)?H(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function ye(a){var b=[];r(a,function(a,c){H(a)?r(a,function(a){b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))}):b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))});return b.length?b.join("&"):""}function hc(a){return ba(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ba(a,
1364 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 ze(a,b){var d,c,e=Qa.length;for(c=0;c<e;++c)if(d=Qa[c]+b,A(d=a.getAttribute(d)))return d;return null}function Ae(a,b){var d,c,e={};r(Qa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});r(Qa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});
1365 d&&(Be?(e.strictDi=null!==ze(d,"strict-di"),b(d,c?[c]:[],e)):C.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Uc(a,b,d){D(d)||(d={});d=S({strictDi:!1},d);var c=function(){a=x(a);if(a.injector()){var c=a[0]===C.document?"document":za(a);throw pa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",
1366 function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=fb(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!/;C&&e.test(C.name)&&(d.debugInfoEnabled=!0,C.name=C.name.replace(e,""));if(C&&!f.test(C.name))return c();C.name=C.name.replace(f,"");ca.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};B(ca.resumeDeferredBootstrap)&&
1367 ca.resumeDeferredBootstrap()}function Ce(){C.name="NG_ENABLE_DEBUG_INFO!"+C.name;C.location.reload()}function De(a){a=ca.element(a).injector();if(!a)throw pa("test");return a.get("$$testability")}function Vc(a,b){b=b||"_";return a.replace(Ee,function(a,c){return(c?b:"")+a.toLowerCase()})}function Fe(){var a;if(!Wc){var b=qb();(rb=z(b)?C.jQuery:b?C[b]:void 0)&&rb.fn.on?(x=rb,S(rb.fn,{scope:Wa.scope,isolateScope:Wa.isolateScope,controller:Wa.controller,injector:Wa.injector,inheritedData:Wa.inheritedData})):
1368 x=Y;a=x.cleanData;x.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=(x._data(f)||{}).events)&&c.$destroy&&x(f).triggerHandler("$destroy");a(b)};ca.element=x;Wc=!0}}function gb(a,b,d){if(!a)throw pa("areq",b||"?",d||"required");return a}function sb(a,b,d){d&&H(a)&&(a=a[a.length-1]);gb(B(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ja(a,b){if("hasOwnProperty"===a)throw pa("badname",b);}function Ge(a,b,d){if(!b)return a;b=b.split(".");
1369 for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&B(a)?Va(e,a):a}function tb(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=x(Ha.call(a,0,e))),c.push(b);return c||a}function T(){return Object.create(null)}function ic(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!bc(a)||H(a)||ha(a)?eb(a):a.toString()}return a}function He(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=F("$injector"),
1370 c=F("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||F;return b(a,"module",function(){var a={};return function(f,g,k){var h={};if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,c,d,f){f||(f=e);return function(){f[d||"push"]([b,c,arguments]);return t}}function b(a,c,d){d||(d=e);return function(b,e){e&&B(e)&&(e.$$moduleName=f);d.push([a,c,arguments]);return t}}if(!g)throw d("nomod",f);var e=[],n=[],s=[],G=a("$injector","invoke",
1371 "push",n),t={_invokeQueue:e,_configBlocks:n,_runBlocks:s,info:function(a){if(w(a)){if(!D(a))throw c("aobj","value");h=a;return this}return h},requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator",n),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider",
1372 "directive"),component:b("$compileProvider","component"),config:G,run:function(a){s.push(a);return this}};k&&G(k);return t})}})}function ja(a,b){if(H(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(D(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function Ie(a,b){var d=[];Xb(b)&&(a=ca.copy(a,null,b));return JSON.stringify(a,function(a,b){b=Qc(a,b);if(D(b)){if(0<=d.indexOf(b))return"...";d.push(b)}return b})}function Je(a){S(a,{errorHandlingConfig:re,
1373 bootstrap:Uc,copy:Ia,extend:S,merge:te,equals:va,element:x,forEach:r,injector:fb,noop:E,bind:Va,toJson:eb,fromJson:Rc,identity:Ta,isUndefined:z,isDefined:w,isString:A,isFunction:B,isObject:D,isNumber:W,isElement:$b,isArray:H,version:Ke,isDate:ha,callbacks:{$$counter:0},getTestability:De,reloadWithDebugInfo:Ce,$$minErr:F,$$csp:Aa,$$encodeUriSegment:hc,$$encodeUriQuery:ba,$$lowercase:K,$$stringify:ic,$$uppercase:ub});kc=He(C);kc("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Le});
1374 a.provider("$compile",Xc).directive({a:Me,input:Yc,textarea:Yc,form:Ne,script:Oe,select:Pe,option:Qe,ngBind:Re,ngBindHtml:Se,ngBindTemplate:Te,ngClass:Ue,ngClassEven:Ve,ngClassOdd:We,ngCloak:Xe,ngController:Ye,ngForm:Ze,ngHide:$e,ngIf:af,ngInclude:bf,ngInit:cf,ngNonBindable:df,ngPluralize:ef,ngRef:ff,ngRepeat:gf,ngShow:hf,ngStyle:jf,ngSwitch:kf,ngSwitchWhen:lf,ngSwitchDefault:mf,ngOptions:nf,ngTransclude:of,ngModel:pf,ngList:qf,ngChange:rf,pattern:Zc,ngPattern:Zc,required:$c,ngRequired:$c,minlength:ad,
1375 ngMinlength:ad,maxlength:bd,ngMaxlength:bd,ngValue:sf,ngModelOptions:tf}).directive({ngInclude:uf,input:vf}).directive(vb).directive(cd);a.provider({$anchorScroll:wf,$animate:xf,$animateCss:yf,$$animateJs:zf,$$animateQueue:Af,$$AnimateRunner:Bf,$$animateAsyncRun:Cf,$browser:Df,$cacheFactory:Ef,$controller:Ff,$document:Gf,$$isDocumentHidden:Hf,$exceptionHandler:If,$filter:dd,$$forceReflow:Jf,$interpolate:Kf,$interval:Lf,$$intervalFactory:Mf,$http:Nf,$httpParamSerializer:Of,$httpParamSerializerJQLike:Pf,
1376 $httpBackend:Qf,$xhrFactory:Rf,$jsonpCallbacks:Sf,$location:Tf,$log:Uf,$parse:Vf,$rootScope:Wf,$q:Xf,$$q:Yf,$sce:Zf,$sceDelegate:$f,$sniffer:ag,$$taskTrackerFactory:bg,$templateCache:cg,$templateRequest:dg,$$testability:eg,$timeout:fg,$window:gg,$$rAF:hg,$$jqLite:ig,$$Map:jg,$$cookieReader:kg})}]).info({angularVersion:"1.7.7"})}function wb(a,b){return b.toUpperCase()}function xb(a){return a.replace(lg,wb)}function lc(a){a=a.nodeType;return 1===a||!a||9===a}function ed(a,b){var d,c,e=b.createDocumentFragment(),
1377 f=[];if(mc.test(a)){d=e.appendChild(b.createElement("div"));c=(mg.exec(a)||["",""])[1].toLowerCase();c=oa[c]||oa._default;d.innerHTML=c[1]+a.replace(ng,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function Y(a){if(a instanceof Y)return a;var b;A(a)&&(a=U(a),b=!0);if(!(this instanceof Y)){if(b&&"<"!==a.charAt(0))throw nc("nosel");return new Y(a)}if(b){b=
1378 C.document;var d;a=(d=og.exec(a))?[b.createElement(d[1])]:(d=ed(a,b))?d.childNodes:[];oc(this,a)}else B(a)?fd(a):oc(this,a)}function pc(a){return a.cloneNode(!0)}function yb(a,b){!b&&lc(a)&&x.cleanData([a]);a.querySelectorAll&&x.cleanData(a.querySelectorAll("*"))}function gd(a){for(var b in a)return!1;return!0}function hd(a){var b=a.ng339,d=b&&Ka[b],c=d&&d.events,d=d&&d.data;d&&!gd(d)||c&&!gd(c)||(delete Ka[b],a.ng339=void 0)}function id(a,b,d,c){if(w(c))throw nc("offargs");var e=(c=zb(a))&&c.events,
1379 f=c&&c.handle;if(f){if(b){var g=function(b){var c=e[b];w(d)&&cb(c||[],d);w(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};r(b.split(" "),function(a){g(a);Ab[a]&&g(Ab[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b];hd(a)}}function qc(a,b){var d=a.ng339;if(d=d&&Ka[d])b?delete d.data[b]:d.data={},hd(a)}function zb(a,b){var d=a.ng339,d=d&&Ka[d];b&&!d&&(a.ng339=d=++pg,d=Ka[d]={events:{},data:{},handle:void 0});return d}function rc(a,b,d){if(lc(a)){var c,e=w(d),
1380 f=!e&&b&&!D(b),g=!b;a=(a=zb(a,!f))&&a.data;if(e)a[xb(b)]=d;else{if(g)return a;if(f)return a&&a[xb(b)];for(c in b)a[xb(c)]=b[c]}}}function Bb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Cb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=U(a);c=c.replace(" "+a+" "," ")});c!==d&&a.setAttribute("class",U(c))}}function Db(a,b){if(b&&a.setAttribute){var d=
1381 (" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=U(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});c!==d&&a.setAttribute("class",U(c))}}function oc(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 jd(a,b){return Eb(a,"$"+(b||"ngController")+"Controller")}function Eb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=H(b)?b:[b];a;){for(var c=
1382 0,e=b.length;c<e;c++)if(w(d=x.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function kd(a){for(yb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Fb(a,b){b||yb(a);var d=a.parentNode;d&&d.removeChild(a)}function qg(a,b){b=b||C;if("complete"===b.document.readyState)b.setTimeout(a);else x(b).on("load",a)}function fd(a){function b(){C.document.removeEventListener("DOMContentLoaded",b);C.removeEventListener("load",b);a()}"complete"===C.document.readyState?C.setTimeout(a):(C.document.addEventListener("DOMContentLoaded",
1383 b),C.addEventListener("load",b))}function ld(a,b){var d=Gb[b.toLowerCase()];return d&&md[ua(a)]&&d}function rg(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(z(c.immediatePropagationStopped)){var k=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();k&&k.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};
1384 var h=f.specialHandlerWrapper||sg;1<g&&(f=ja(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||h(a,c,f[l])}};d.elem=a;return d}function sg(a,b,d){d.call(a,b)}function tg(a,b,d){var c=b.relatedTarget;c&&(c===a||ug.call(a,c))||d.call(a,b)}function ig(){this.$get=function(){return S(Y,{hasClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Cb(a,b)}})}}function La(a,b){var d=a&&a.$$hashKey;
1385 if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||se)():d+":"+a}function nd(){this._keys=[];this._values=[];this._lastKey=NaN;this._lastIndex=-1}function od(a){a=Function.prototype.toString.call(a).replace(vg,"");return a.match(wg)||a.match(xg)}function yg(a){return(a=od(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function fb(a,b){function d(a){return function(b,c){if(D(b))r(b,Yb(a));else return a(b,
1386 c)}}function c(a,b){Ja(a,"service");if(B(b)||H(b))b=n.instantiate(b);if(!b.$get)throw Ba("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=t.invoke(b,this);if(z(c))throw Ba("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){gb(z(a)||H(a),"modulesToLoad","not an array");var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=n.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.set(a,!0);try{A(a)?(c=kc(a),
1387 t.modules[a]=c,b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):B(a)?b.push(n.invoke(a)):H(a)?b.push(n.invoke(a)):sb(a,"module")}catch(e){throw H(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ba("modulerr",a,e.stack||e.message||e);}}});return b}function k(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===h)throw Ba("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=h,a[b]=c(b,e),
1388 a[b]}catch(f){throw a[b]===h&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=fb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw Ba("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);H(a)&&(a=a[a.length-1]);d=a;if(Ca||"function"!==typeof d)d=!1;else{var f=d.$$ngIsClass;Ga(f)||(f=d.$$ngIsClass=/^class\b/.test(Function.prototype.toString.call(d)));d=f}return d?
1389 (c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=H(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:fb.$$annotate,has:function(b){return p.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var h={},l=[],m=new Hb,p={$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,
1390 ia(b),!1)}),constant:d(function(a,b){Ja(a,"constant");p[a]=b;s[a]=b}),decorator:function(a,b){var c=n.get(a+"Provider"),d=c.$get;c.$get=function(){var a=t.invoke(d,c);return t.invoke(b,null,{$delegate:a})}}}},n=p.$injector=k(p,function(a,b){ca.isString(b)&&l.push(b);throw Ba("unpr",l.join(" <- "));}),s={},G=k(s,function(a,b){var c=n.get(a+"Provider",b);return t.invoke(c.$get,c,void 0,a)}),t=G;p.$injectorProvider={$get:ia(G)};t.modules=n.modules=T();var N=g(a),t=G.get("$injector");t.strictDi=b;r(N,
1391 function(a){a&&t.invoke(a)});t.loadNewModules=function(a){r(g(a),function(a){a&&t.invoke(a)})};return t}function wf(){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,function(a){if("a"===ua(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;B(c)?c=c():$b(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):W(c)||
1392 (c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=A(a)?a:W(a)?a.toString():d.hash();var b;a?(b=k.getElementById(a))?f(b):(b=e(k.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var k=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||qg(function(){c.$evalAsync(g)})});return g}]}function hb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;H(a)&&(a=a.join(" "));H(b)&&(b=b.join(" "));return a+" "+b}function zg(a){A(a)&&
1393 (a=a.split(" "));var b=T();r(a,function(a){a.length&&(b[a]=!0)});return b}function ra(a){return D(a)?a:{}}function Ag(a,b,d,c,e){function f(){qa=null;k()}function g(){t=y();t=z(t)?null:t;va(t,P)&&(t=P);N=P=t}function k(){var a=N;g();if(v!==h.url()||a!==t)v=h.url(),N=t,r(J,function(a){a(h.url(),t)})}var h=this,l=a.location,m=a.history,p=a.setTimeout,n=a.clearTimeout,s={},G=e(d);h.isMock=!1;h.$$completeOutstandingRequest=G.completeTask;h.$$incOutstandingRequestCount=G.incTaskCount;h.notifyWhenNoOutstandingRequests=
1394 G.notifyWhenNoPendingTasks;var t,N,v=l.href,jc=b.find("base"),qa=null,y=c.history?function(){try{return m.state}catch(a){}}:E;g();h.url=function(b,d,e){z(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=N===e;b=ga(b).href;if(v===b&&(!c.history||f))return h;var k=v&&Da(v)===Da(b);v=b;N=e;!c.history||k&&f?(k||(qa=b),d?l.replace(b):k?(d=l,e=b,f=e.indexOf("#"),e=-1===f?"":e.substr(f),d.hash=e):l.href=b,l.href!==b&&(qa=b)):(m[d?"replaceState":"pushState"](e,"",b),g());
1395 qa&&(qa=b);return h}return(qa||l.href).replace(/#$/,"")};h.state=function(){return t};var J=[],I=!1,P=null;h.onUrlChange=function(b){if(!I){if(c.history)x(a).on("popstate",f);x(a).on("hashchange",f);I=!0}J.push(b);return b};h.$$applicationDestroyed=function(){x(a).off("hashchange popstate",f)};h.$$checkUrlChange=k;h.baseHref=function(){var a=jc.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};h.defer=function(a,b,c){var d;b=b||0;c=c||G.DEFAULT_TASK_TYPE;G.incTaskCount(c);d=p(function(){delete s[d];
1396 G.completeTask(a,c)},b);s[d]=c;return d};h.defer.cancel=function(a){if(s.hasOwnProperty(a)){var b=s[a];delete s[a];n(a);G.completeTask(E,b);return!0}return!1}}function Df(){this.$get=["$window","$log","$sniffer","$document","$$taskTrackerFactory",function(a,b,d,c,e){return new Ag(a,c,b,d,e)}]}function Ef(){this.$get=function(){function a(a,c){function e(a){a!==p&&(n?n===a&&(n=a.n):n=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw F("$cacheFactory")("iid",
1397 a);var g=0,k=S({},c,{id:a}),h=T(),l=c&&c.capacity||Number.MAX_VALUE,m=T(),p=null,n=null;return b[a]={put:function(a,b){if(!z(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in h||g++;h[a]=b;g>l&&this.remove(n.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return h[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===p&&(p=b.p);b===n&&(n=b.n);f(b.n,b.p);delete m[a]}a in h&&(delete h[a],g--)},removeAll:function(){h=T();g=0;m=T();
1398 p=n=null},destroy:function(){m=k=h=null;delete b[a]},info:function(){return S({},k,{size:g})}}}var b={};a.info=function(){var a={};r(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function cg(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Xc(a,b){function d(a,b,c){var d=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,e=T();r(a,function(a,f){a=a.trim();if(a in p)e[f]=p[a];else{var g=a.match(d);if(!g)throw $("iscp",b,f,a,c?"controller bindings definition":
1399 "isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(p[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==K(b))throw $("baddir",a);if(a!==a.trim())throw $("baddir",a);}function e(a){var b=a.require||a.controller&&a.name;!H(b)&&D(b)&&r(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,k=/(([\w-]+)(?::([^;]+))?;?)/,h=we("ngSrc,ngSrcset,src,srcset"),
1400 l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,p=T();this.directive=function qa(b,d){gb(b,"name");Ja(b,"directive");A(b)?(c(b),gb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];r(f[b],function(f,g){try{var h=a.invoke(f);B(h)?h={compile:ia(h)}:!h.compile&&h.link&&(h.compile=ia(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!A(l)||!/[EACM]/.test(l)))throw $("badrestrict",
1401 l,b);k.restrict=l||"EA";h.$$moduleName=f.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):r(b,Yb(qa));return this};this.component=function y(a,b){function c(a){function e(b){return B(b)||H(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:Bg(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",
1402 require:b.require};r(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}if(!A(a))return r(a,Yb(Va(this,y))),this;var d=b.controller||function(){};r(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,B(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};
1403 var n=!0;this.debugInfoEnabled=function(a){return w(a)?(n=a,this):n};var s=!1;this.strictComponentBindingsEnabled=function(a){return w(a)?(s=a,this):s};var G=10;this.onChangesTtl=function(a){return arguments.length?(G=a,this):G};var t=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(t=a,this):t};var N=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(N=a,this):N};var v=T();this.addPropertySecurityContext=function(a,b,c){var d=a.toLowerCase()+"|"+b.toLowerCase();
1404 if(d in v&&v[d]!==c)throw $("ctxoverride",a,b,v[d],c);v[d]=c;return this};(function(){function a(b,c){r(c,function(a){v[a.toLowerCase()]=b})}a(V.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]);a(V.CSS,["*|style"]);a(V.URL,"area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" "));a(V.MEDIA_URL,"audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" "));a(V.RESOURCE_URL,"*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))})();
1405 this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(a,b,c,e,p,M,L,u,R){function q(){try{if(!--Ja)throw Ua=void 0,$("infchng",G);L.$apply(function(){for(var a=0,b=Ua.length;a<b;++a)try{Ua[a]()}catch(d){c(d)}Ua=void 0})}finally{Ja++}}function ma(a,b){if(!a)return a;if(!A(a))throw $("srcset",b,a.toString());for(var c="",d=U(a),e=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,e=/\s/.test(d)?e:/(,)/,d=d.split(e),e=Math.floor(d.length/
1406 2),f=0;f<e;f++)var g=2*f,c=c+u.getTrustedMediaUrl(U(d[g])),c=c+(" "+U(d[g+1]));d=U(d[2*f]).split(/\s/);c+=u.getTrustedMediaUrl(U(d[0]));2===d.length&&(c+=" "+U(d[1]));return c}function w(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function O(a,b,c){Fa.innerHTML="<span "+b+">";b=Fa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function sa(a,b){try{a.addClass(b)}catch(c){}}
1407 function da(a,b,c,d,e){a instanceof x||(a=x(a));var f=Xa(a,b,a,c,d,e);da.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw $("multilink");gb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?x(ja(g,x("<div></div>").append(a).html())):c?Wa.clone.call(a):
1408 a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,I,t;if(n)for(t=Array(c.length),m=0;m<h.length;m+=3)f=h[m],t[f]=c[f];else t=c;m=0;for(p=h.length;m<p;)k=t[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(x(k),l)):l=a,I=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,I)):f&&f(a,k.childNodes,
1409 void 0,e)}for(var h=[],k=H(a)||a instanceof x,l,m,p,I,n,t=0;t<a.length;t++){l=new w;11===Ca&&ib(a,t,k);m=sc(a[t],[],l,0===t?d:void 0,e);(f=m.length?aa(m,a[t],l,b,c,null,[],[],f):null)&&f.scope&&da.$$addScopeClass(l.$$element);l=f&&f.terminal||!(p=a[t].childNodes)||!p.length?null:Xa(p,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(t,f,l),I=!0,n=n||f;f=null}return I?g:null}function ib(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===Pa)for(;;){f=e?d.nextSibling:
1410 a[b+1];if(!f||f.nodeType!==Pa)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}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 sc(a,b,d,e,f){var g=d.$attr,h;switch(a.nodeType){case 1:h=ua(a);X(b,wa(h),"E",e,f);for(var l,m,
1411 n,t,J,s=a.attributes,v=0,G=s&&s.length;v<G;v++){var P=!1,N=!1,r=!1,y=!1,u=!1,M;l=s[v];m=l.name;t=l.value;n=wa(m.toLowerCase());(J=n.match(Ra))?(r="Attr"===J[1],y="Prop"===J[1],u="On"===J[1],m=m.replace(pd,"").toLowerCase().substr(4+J[1].length).replace(/_(.)/g,function(a,b){return b.toUpperCase()})):(M=n.match(Sa))&&ca(M[1])&&(P=m,N=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));if(y||u)d[n]=t,g[n]=l.name,y?Ea(a,b,n,m):b.push(qd(p,L,c,n,m,!1));else{n=wa(m.toLowerCase());g[n]=m;if(r||!d.hasOwnProperty(n))d[n]=
1412 t,ld(a,n)&&(d[n]=!0);Ia(a,b,t,n,r);X(b,n,"A",e,f,P,N)}}"input"===h&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Qa)break;g=a.className;D(g)&&(g=g.animVal);if(A(g)&&""!==g)for(;a=k.exec(g);)n=wa(a[2]),X(b,n,"C",e,f)&&(d[n]=U(a[3])),g=g.substr(a.index+a[0].length);break;case Pa:na(b,a.nodeValue);break;case 8:if(!Oa)break;F(a,b,d,e,f)}b.sort(ia);return b}function F(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=wa(f[1]);X(b,h,"M",d,e)&&(c[h]=U(f[2]))}}catch(k){}}
1413 function V(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw $("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return x(d)}function Y(a,b,c){return function(d,e,f,g,h){e=V(e[0],b,c);return a(d,e,f,g,h)}}function Z(a,b,c,d,e,f){var g;return a?da(b,c,d,e,f):function(){g||(g=da(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function aa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=
1414 Y(a,c,d));a.require=u.require;a.directiveName=Q;if(s===u||u.$$isolateScope)a=Aa(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=Y(b,c,d));b.require=u.require;b.directiveName=Q;if(s===u||u.$$isolateScope)b=Aa(b,{isolateScope:!0});k.push(b)}}function p(a,e,f,g,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);N&&(e=P);c||(c=N?Q.parent():Q);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,R);if(z(f))throw $("noslot",d,za(Q));}else return l(a,b,e,c,R)}var n,u,L,y,G,P,M,Q;b===f?(g=d,Q=d.$$element):(Q=
1415 x(f),g=new w(Q,d));G=e;s?y=e.$new(!0):t&&(G=e.$parent);l&&(M=m,M.$$boundTransclude=l,M.isSlotFilled=function(a){return!!l.$$slots[a]});J&&(P=ea(Q,g,M,J,y,e,s));s&&(da.$$addScopeInfo(Q,y,!0,!(v&&(v===s||v===s.$$originalDirective))),da.$$addScopeClass(Q,!0),y.$$isolateBindings=s.$$isolateBindings,u=Da(e,g,y,y.$$isolateBindings,s),u.removeWatches&&y.$on("$destroy",u.removeWatches));for(n in P){u=J[n];L=P[n];var Cg=u.$$bindings.bindToController;L.instance=L();Q.data("$"+u.name+"Controller",L.instance);
1416 L.bindingInfo=Da(G,g,L.instance,Cg,u)}r(J,function(a,b){var c=a.require;a.bindToController&&!H(c)&&D(c)&&S(P[b].instance,W(b,c,Q,P))});r(P,function(a){var b=a.instance;if(B(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(B(b.$onInit))try{b.$onInit()}catch(e){c(e)}B(b.$doCheck)&&(G.$watch(function(){b.$doCheck()}),b.$doCheck());B(b.$onDestroy)&&G.$on("$destroy",function(){b.$onDestroy()})});n=0;for(u=h.length;n<u;n++)L=h[n],Ba(L,L.isolateScope?y:e,Q,g,L.require&&W(L.directiveName,
1417 L.require,Q,P),M);var R=e;s&&(s.template||null===s.templateUrl)&&(R=y);a&&a(R,f.childNodes,void 0,l);for(n=k.length-1;0<=n;n--)L=k[n],Ba(L,L.isolateScope?y:e,Q,g,L.require&&W(L.directiveName,L.require,Q,P),M);r(P,function(a){a=a.instance;B(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE,t=l.newScopeDirective,J=l.controllerDirectives,s=l.newIsolateScopeDirective,v=l.templateDirective,L=l.nonTlbTranscludeDirective,G=!1,P=!1,N=l.hasElementTranscludeDirective,y=d.$$element=x(b),u,Q,
1418 M,R=e,q,ma=!1,Ib=!1,O,sa=0,A=a.length;sa<A;sa++){u=a[sa];var E=u.$$start,ib=u.$$end;E&&(y=V(b,E,ib));M=void 0;if(n>u.priority)break;if(O=u.scope)u.templateUrl||(D(O)?(ba("new/isolated scope",s||t,u,y),s=u):ba("new/isolated scope",s,u,y)),t=t||u;Q=u.name;if(!ma&&(u.replace&&(u.templateUrl||u.template)||u.transclude&&!u.$$tlb)){for(O=sa+1;ma=a[O++];)if(ma.transclude&&!ma.$$tlb||ma.replace&&(ma.templateUrl||ma.template)){Ib=!0;break}ma=!0}!u.templateUrl&&u.controller&&(J=J||T(),ba("'"+Q+"' controller",
1419 J[Q],u,y),J[Q]=u);if(O=u.transclude)if(G=!0,u.$$tlb||(ba("transclusion",L,u,y),L=u),"element"===O)N=!0,n=u.priority,M=y,y=d.$$element=x(da.$$createComment(Q,d[Q])),b=y[0],pa(f,Ha.call(M,0),b),R=Z(Ib,M,e,n,g&&g.name,{nonTlbTranscludeDirective:L});else{var ka=T();if(D(O)){M=C.document.createDocumentFragment();var Xa=T(),F=T();r(O,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Xa[a]=b;ka[b]=null;F[b]=c});r(y.contents(),function(a){var b=Xa[wa(ua(a))];b?(F[b]=!0,ka[b]=ka[b]||C.document.createDocumentFragment(),
1420 ka[b].appendChild(a)):M.appendChild(a)});r(F,function(a,b){if(!a)throw $("reqslot",b);});for(var K in ka)ka[K]&&(R=x(ka[K].childNodes),ka[K]=Z(Ib,R,e));M=x(M.childNodes)}else M=x(pc(b)).contents();y.empty();R=Z(Ib,M,e,void 0,void 0,{needsNewScope:u.$$isolateScope||u.$$newScope});R.$$slots=ka}if(u.template)if(P=!0,ba("template",v,u,y),v=u,O=B(u.template)?u.template(y,d):u.template,O=Na(O),u.replace){g=u;M=mc.test(O)?rd(ja(u.templateNamespace,U(O))):[];b=M[0];if(1!==M.length||1!==b.nodeType)throw $("tplrt",
1421 Q,"");pa(f,y,b);A={$attr:{}};O=sc(b,[],A);var Dg=a.splice(sa+1,a.length-(sa+1));(s||t)&&fa(O,s,t);a=a.concat(O).concat(Dg);ga(d,A);A=a.length}else y.html(O);if(u.templateUrl)P=!0,ba("template",v,u,y),v=u,u.replace&&(g=u),p=ha(a.splice(sa,a.length-sa),y,d,f,G&&R,h,k,{controllerDirectives:J,newScopeDirective:t!==u&&t,newIsolateScopeDirective:s,templateDirective:v,nonTlbTranscludeDirective:L}),A=a.length;else if(u.compile)try{q=u.compile(y,d,R);var X=u.$$originalDirective||u;B(q)?m(null,Va(X,q),E,ib):
1422 q&&m(Va(X,q.pre),Va(X,q.post),E,ib)}catch(ca){c(ca,za(y))}u.terminal&&(p.terminal=!0,n=Math.max(n,u.priority))}p.scope=t&&!0===t.scope;p.transcludeOnThisElement=G;p.templateOnThisElement=P;p.transclude=R;l.hasElementTranscludeDirective=N;return p}function W(a,b,c,d){var e;if(A(b)){var f=b.match(l);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[0]&&9===c[0].nodeType?null:g?c.inheritedData(h):c.data(h)}if(!e&&
1423 !f)throw $("ctreq",b,a);}else if(H(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=W(a,b[g],c,d);else D(b)&&(e={},r(b,function(b,f){e[f]=W(a,b,c,d)}));return e||null}function ea(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,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"===p&&(p=b[l.name]);m=M(p,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function fa(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=ac(a[d],{$$isolateScope:b,
1424 $$newScope:c})}function X(b,c,e,g,h,k,l){if(c===h)return null;var m=null;if(f.hasOwnProperty(c)){h=a.get(c+"Directive");for(var p=0,n=h.length;p<n;p++)if(c=h[p],(z(g)||g>c.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=ac(c,{$$start:k,$$end:l}));if(!c.$$bindings){var I=m=c,t=c.name,u={isolateScope:null,bindToController:null};D(I.scope)&&(!0===I.bindToController?(u.bindToController=d(I.scope,t,!0),u.isolateScope={}):u.isolateScope=d(I.scope,t,!1));D(I.bindToController)&&(u.bindToController=d(I.bindToController,
1425 t,!0));if(u.bindToController&&!I.controller)throw $("noctrl",t);m=m.$$bindings=u;D(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function ca(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function ga(a,b){var c=b.$attr,d=a.$attr;r(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,e){a.hasOwnProperty(e)||
1426 "$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ha(a,b,d,f,g,h,k,l){var m=[],p,n,t=b[0],u=a.shift(),J=ac(u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),s=B(u.templateUrl)?u.templateUrl(b,d):u.templateUrl,L=u.templateNamespace;b.empty();e(s).then(function(c){var e,I;c=Na(c);if(u.replace){c=mc.test(c)?rd(ja(L,U(c))):[];e=c[0];if(1!==c.length||1!==e.nodeType)throw $("tplrt",u.name,s);c={$attr:{}};pa(f,b,e);var v=sc(e,[],c);D(u.scope)&&fa(v,!0);a=
1427 v.concat(a);ga(d,c)}else e=t,b.html(c);a.unshift(J);p=aa(a,e,d,g,b,u,h,k,l);r(f,function(a,c){a===e&&(f[c]=b[0])});for(n=Xa(b[0].childNodes,g);m.length;){c=m.shift();I=m.shift();var y=m.shift(),P=m.shift(),v=b[0];if(!c.$$destroyed){if(I!==t){var G=I.className;l.hasElementTranscludeDirective&&u.replace||(v=pc(e));pa(y,x(I),v);sa(x(v),G)}I=p.transcludeOnThisElement?ka(c,p.transclude,P):P;p(n,c,v,f,I)}}m=null}).catch(function(a){cc(a)&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b,
1428 c,d,a):(p.transcludeOnThisElement&&(a=ka(b,p.transclude,e)),p(n,b,c,d,a)))}}function ia(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function ba(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw $("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,za(d));}function na(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&da.$$addBindingClass(a);return function(a,c){var e=c.parent();
1429 b||da.$$addBindingClass(e);da.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ja(a,b){a=K(a||"html");switch(a){case "svg":case "math":var c=C.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function oa(a,b){if("srcdoc"===b)return u.HTML;if("src"===b||"ngSrc"===b)return-1===["img","video","audio","source","track"].indexOf(a)?u.RESOURCE_URL:u.MEDIA_URL;if("xlinkHref"===b)return"image"===a?u.MEDIA_URL:
1430 "a"===a?u.URL:u.RESOURCE_URL;if("form"===a&&"action"===b||"base"===a&&"href"===b||"link"===a&&"href"===b)return u.RESOURCE_URL;if("a"===a&&("href"===b||"ngHref"===b))return u.URL}function xa(a,b){var c=b.toLowerCase();return v[a+"|"+c]||v["*|"+c]}function ya(a){return ma(u.valueOf(a),"ng-prop-srcset")}function Ea(a,b,c,d){if(m.test(d))throw $("nodomevents");a=ua(a);var e=xa(a,d),f=Ta;"srcset"!==d||"img"!==a&&"source"!==a?e&&(f=u.getTrusted.bind(u,e)):f=ya;b.push({priority:100,compile:function(a,b){var e=
1431 p(b[c]),g=p(b[c],function(a){return u.valueOf(a)});return{pre:function(a,b){function c(){var g=e(a);b[0][d]=f(g)}c();a.$watch(g,c)}}}})}function Ia(a,c,d,e,f){var g=ua(a),k=oa(g,e),l=h[e]||f,p=b(d,!f,k,l);if(p){if("multiple"===e&&"select"===g)throw $("selmulti",za(a));if(m.test(e))throw $("nodomevents");c.push({priority:100,compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=T());var g=f[e];g!==d&&(p=g&&b(g,!0,k,l),d=g);p&&(f[e]=p(a),(c[e]||(c[e]=[])).$$inter=!0,(f.$$observers&&
1432 f.$$observers[e].$$scope||a).$watch(p,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function pa(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=c);break}f&&f.replaceChild(c,d);a=C.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);x.hasData(d)&&(x.data(c,x.data(d)),x(d).off("$destroy"));x.cleanData(a.querySelectorAll("*"));
1433 for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function Aa(a,b){return S(function(){return a.apply(null,arguments)},a,b)}function Ba(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,za(d))}}function ra(a,b){if(s)throw $("missingattr",a,b);}function Da(a,c,d,e,f){function g(b,c,e){B(d.$onChanges)&&!dc(c,e)&&(Ua||(a.$$postDigest(q),Ua=[]),m||(m={},Ua.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Jb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;r(e,function(e,h){var m=e.attrName,n=e.optional,
1434 I,t,u,s;switch(e.mode){case "@":n||ta.call(c,m)||(ra(m,f.name),d[h]=c[m]=void 0);n=c.$observe(m,function(a){if(A(a)||Ga(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;I=c[m];A(I)?d[h]=b(I)(a):Ga(I)&&(d[h]=I);l[h]=new Jb(tc,d[h]);k.push(n);break;case "=":if(!ta.call(c,m)){if(n)break;ra(m,f.name);c[m]=void 0}if(n&&!c[m])break;t=p(c[m]);s=t.literal?va:dc;u=t.assign||function(){I=d[h]=t(a);throw $("nonassign",c[m],m,f.name);};I=d[h]=t(a);n=function(b){s(b,d[h])||(s(b,I)?u(a,b=d[h]):d[h]=b);return I=
1435 b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(p(c[m],n),null,t.literal);k.push(n);break;case "<":if(!ta.call(c,m)){if(n)break;ra(m,f.name);c[m]=void 0}if(n&&!c[m])break;t=p(c[m]);var v=t.literal,L=d[h]=t(a);l[h]=new Jb(tc,d[h]);n=a[e.collection?"$watchCollection":"$watch"](t,function(a,b){if(b===a){if(b===L||v&&va(b,L))return;b=L}g(h,a,b);d[h]=a});k.push(n);break;case "&":n||ta.call(c,m)||ra(m,f.name);t=c.hasOwnProperty(m)?p(c[m]):E;if(t===E&&n)break;d[h]=function(b){return t(a,
1436 b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Ma=/^\w/,Fa=C.document.createElement("div"),Oa=t,Qa=N,Ja=G,Ua;w.prototype={$normalize:wa,$addClass:function(a){a&&0<a.length&&R.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&R.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=sd(a,b);c&&c.length&&R.addClass(this.$$element,c);(c=sd(b,a))&&c.length&&R.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=
1437 ld(this.$$element[0],a),g=td[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=Vc(a,"-"));"img"===ua(this.$$element)&&"srcset"===a&&(this[a]=b=ma(b,"$set('srcset', value)"));!1!==d&&(null===b||z(b)?this.$$element.removeAttr(e):Ma.test(e)?f&&!1===b?this.$$element.removeAttr(e):this.$$element.attr(e,b):O(this.$$element[0],e,b));(a=this.$$observers)&&r(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,
1438 d=c.$$observers||(c.$$observers=T()),e=d[a]||(d[a]=[]);e.push(b);L.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||z(c[a])||b(c[a])});return function(){cb(e,b)}}};var Ka=b.startSymbol(),La=b.endSymbol(),Na="{{"===Ka&&"}}"===La?Ta:function(a){return a.replace(/\{\{/g,Ka).replace(/}}/g,La)},Ra=/^ng(Attr|Prop|On)([A-Z].*)$/,Sa=/^(.+)Start$/;da.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];H(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:E;da.$$addBindingClass=n?function(a){sa(a,
1439 "ng-binding")}:E;da.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:E;da.$$addScopeClass=n?function(a,b){sa(a,b?"ng-isolate-scope":"ng-scope")}:E;da.$$createComment=function(a,b){var c="";n&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return C.document.createComment(c)};return da}]}function Jb(a,b){this.previousValue=a;this.currentValue=b}function wa(a){return a.replace(pd,"").replace(Eg,function(a,d,c){return c?d.toUpperCase():d})}function sd(a,b){var d=
1440 "",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],k=0;k<e.length;k++)if(g===e[k])continue a;d+=(0<d.length?" ":"")+g}return d}function rd(a){a=x(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Pa&&""===d.nodeValue.trim())&&Fg.call(a,b,1)}return a}function Bg(a,b){if(b&&A(b))return b;if(A(a)){var d=ud.exec(a);if(d)return d[3]}}function Ff(){var a={};this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,d){Ja(b,
1441 "controller");D(b)?S(a,b):a[b]=d};this.$get=["$injector",function(b){function d(a,b,d,g){if(!a||!D(a.$scope))throw F("$controller")("noscp",g,b);a.$scope[b]=d}return function(c,e,f,g){var k,h,l;f=!0===f;g&&A(g)&&(l=g);if(A(c)){g=c.match(ud);if(!g)throw vd("ctrlfmt",c);h=g[1];l=l||g[3];c=a.hasOwnProperty(h)?a[h]:Ge(e.$scope,h,!0);if(!c)throw vd("ctrlreg",h);sb(c,h,!0)}if(f)return f=(H(c)?c[c.length-1]:c).prototype,k=Object.create(f||null),l&&d(e,l,k,h||c.name),S(function(){var a=b.invoke(c,k,e,h);
1442 a!==k&&(D(a)||B(a))&&(k=a,l&&d(e,l,k,h||c.name));return k},{instance:k,identifier:l});k=b.instantiate(c,e,h);l&&d(e,l,k,h||c.name);return k}}]}function Gf(){this.$get=["$window",function(a){return x(a.document)}]}function Hf(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function If(){this.$get=["$log",function(a){return function(b,
1443 d){a.error.apply(a,arguments)}}]}function uc(a){return D(a)?ha(a)?a.toISOString():eb(a):a}function Of(){this.$get=function(){return function(a){if(!a)return"";var b=[];Oc(a,function(a,c){null===a||z(a)||B(a)||(H(a)?r(a,function(a){b.push(ba(c)+"="+ba(uc(a)))}):b.push(ba(c)+"="+ba(uc(a))))});return b.join("&")}}}function Pf(){this.$get=function(){return function(a){function b(a,e,f){H(a)?r(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!ha(a)?Oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):
1444 (B(a)&&(a=a()),d.push(ba(e)+"="+(null==a?"":ba(uc(a)))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function vc(a,b){if(A(a)){var d=a.replace(Gg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(wd),e;(e=c)||(e=(e=d.match(Hg))&&Ig[e[0]].test(d));if(e)try{a=Rc(d)}catch(f){if(!c)return a;throw Kb("baddata",a,f);}}}return a}function xd(a){var b=T(),d;A(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=K(U(a.substr(0,d)));a=U(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&
1445 r(a,function(a,d){var f=K(d),g=U(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function yd(a){var b;return function(d){b||(b=xd(a));return d?(d=b[K(d)],void 0===d&&(d=null),d):b}}function zd(a,b,d,c){if(B(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Nf(){var a=this.defaults={transformResponse:[vc],transformRequest:[function(a){return D(a)&&"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},
1446 post:ja(wc),put:ja(wc),patch:ja(wc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfWhitelistedOrigins=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,p){function n(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];
1447 a=a.then(f,g)}b.length=0;return a}function d(a,b){var c,e={};r(a,function(a,d){B(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}function f(a){var b=S({},a);b.data=zd(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:l.reject(b)}if(!D(b))throw F("$http")("badreq",b);if(!A(p.valueOf(b.url)))throw F("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},
1448 b);g.headers=function(b){var c=a.headers,e=S({},b.headers),f,g,h,c=S({},c.common,c[K(b.method)]);a:for(f in c){g=K(f);for(h in e)if(K(h)===g)continue a;e[f]=c[f]}return d(e,ja(b))}(b);g.method=ub(g.method);g.paramSerializer=A(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http");var h=[],k=[];b=l.resolve(g);r(v,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)});
1449 b=c(b,h);b=b.then(function(b){var c=b.headers,d=zd(b.data,yd(c),void 0,b.transformRequest);z(d)&&r(c,function(a,b){"content-type"===K(b)&&delete c[b]});z(b.withCredentials)&&!z(a.withCredentials)&&(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(E,"$http")})}function s(c,d){function e(a){if(a){var c={};r(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 k(a,
1450 c,d,e,f){function g(){m(c,a,d,e,f)}R&&(200<=a&&300>a?R.put(O,[a,c,xd(d),e,f]):R.remove(O));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:yd(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,ja(a.headers()),a.statusText,a.xhrStatus)}function v(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),u=L.promise,R,q,ma=c.headers,x="jsonp"===K(c.method),
1451 O=c.url;x?O=p.getTrustedResourceUrl(O):A(O)||(O=p.valueOf(O));O=G(O,c.paramSerializer(c.params));x&&(O=t(O,c.jsonpCallbackParam));n.pendingRequests.push(c);u.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(R=D(c.cache)?c.cache:D(a.cache)?a.cache:N);R&&(q=R.get(O),w(q)?q&&B(q.then)?q.then(s,s):H(q)?m(q[1],q[0],ja(q[2]),q[3],q[4]):m(q,200,{},"OK","complete"):R.put(O,u));z(q)&&((q=jc(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(ma[c.xsrfHeaderName||a.xsrfHeaderName]=
1452 q),f(c.method,O,d,k,ma,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return u}function G(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function t(a,b){var c=a.split("?");if(2<c.length)throw Kb("badjsonp",a);c=gc(c[1]);r(c,function(c,d){if("JSON_CALLBACK"===c)throw Kb("badjsonp",a);if(d===b)throw Kb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var N=k("$http");a.paramSerializer=A(a.paramSerializer)?m.get(a.paramSerializer):
1453 a.paramSerializer;var v=[];r(d,function(a){v.unshift(A(a)?m.get(a):m.invoke(a))});var jc=Jg(c);n.pendingRequests=[];(function(a){r(arguments,function(a){n[a]=function(b,c){return n(S({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){n[a]=function(b,c,d){return n(S({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Rf(){this.$get=function(){return function(){return new C.XMLHttpRequest}}}function Qf(){this.$get=
1454 ["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return Kg(a,c,a.defer,b,d[0])}]}function Kg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};f.addEventListener("load",
1455 m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,p,n,s,G,t){function N(a){J="timeout"===a;qa&&qa();y&&y.abort()}function v(a,b,c,e,f,g){w(P)&&d.cancel(P);qa=y=null;a(b,c,e,f,g)}k=k||a.url();if("jsonp"===K(e))var q=c.createCallback(k),qa=f(k,q,function(a,b){var d=200===a&&c.getResponse(q);v(l,a,d,"",b,"complete");c.removeCallback(q)});else{var y=b(e,k),J=!1;y.open(e,k,!0);r(m,function(a,b){w(a)&&y.setRequestHeader(b,a)});y.onload=function(){var a=y.statusText||
1456 "",b="response"in y?y.response:y.responseText,c=1223===y.status?204:y.status;0===c&&(c=b?200:"file"===ga(k).protocol?404:0);v(l,c,b,y.getAllResponseHeaders(),a,"complete")};y.onerror=function(){v(l,-1,null,null,"","error")};y.ontimeout=function(){v(l,-1,null,null,"","timeout")};y.onabort=function(){v(l,-1,null,null,"",J?"timeout":"abort")};r(G,function(a,b){y.addEventListener(b,a)});r(t,function(a,b){y.upload.addEventListener(b,a)});n&&(y.withCredentials=!0);if(s)try{y.responseType=s}catch(I){if("json"!==
1457 s)throw I;}y.send(z(h)?null:h)}if(0<p)var P=d(function(){N("timeout")},p);else p&&B(p.then)&&p.then(function(){N(w(p.$$timeoutId)?"timeout":"abort")})}}function Kf(){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(p,a).replace(n,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}
1458 function h(f,h,n,p){function v(a){try{return a=n&&!r?e.getTrusted(n,a):e.valueOf(a),p&&!w(a)?a:ic(a)}catch(b){c(Ma.interr(f,b))}}var r=n===e.URL||n===e.MEDIA_URL;if(!f.length||-1===f.indexOf(a)){if(h)return;h=g(f);r&&(h=e.getTrusted(n,h));h=ia(h);h.exp=f;h.expressions=[];h.$$watchDelegate=k;return h}p=!!p;for(var q,y,J=0,I=[],P,Q=f.length,M=[],L=[],u;J<Q;)if(-1!==(q=f.indexOf(a,J))&&-1!==(y=f.indexOf(b,q+l)))J!==q&&M.push(g(f.substring(J,q))),J=f.substring(q+l,y),I.push(J),J=y+m,L.push(M.length),
1459 M.push("");else{J!==Q&&M.push(g(f.substring(J)));break}u=1===M.length&&1===L.length;var R=r&&u?void 0:v;P=I.map(function(a){return d(a,R)});if(!h||I.length){var x=function(a){for(var b=0,c=I.length;b<c;b++){if(p&&z(a[b]))return;M[L[b]]=a[b]}if(r)return e.getTrusted(n,u?M[0]:M.join(""));n&&1<M.length&&Ma.throwNoconcat(f);return M.join("")};return S(function(a){var b=0,d=I.length,e=Array(d);try{for(;b<d;b++)e[b]=P[b](a);return x(e)}catch(g){c(Ma.interr(f,g))}},{exp:f,expressions:I,$$watchDelegate:function(a,
1460 b){var c;return a.$watchGroup(P,function(d,e){var f=x(d);b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,p=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Lf(){this.$get=["$$intervalFactory","$window",function(a,b){var d={},c=function(a){b.clearInterval(a);delete d[a]},e=a(function(a,c,e){a=b.setInterval(a,c);d[a]=e;return a},c);e.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$intervalId"))throw Lg("badprom");
1461 if(!d.hasOwnProperty(a.$$intervalId))return!1;a=a.$$intervalId;var b=d[a],e=b.promise;e.$$state&&(e.$$state.pur=!0);b.reject("canceled");c(a);return!0};return e}]}function Mf(){this.$get=["$browser","$q","$$q","$rootScope",function(a,b,d,c){return function(e,f){return function(g,k,h,l){function m(){p?g.apply(null,n):g(s)}var p=4<arguments.length,n=p?Ha.call(arguments,4):[],s=0,G=w(l)&&!l,t=(G?d:b).defer(),r=t.promise;h=w(h)?h:0;r.$$intervalId=e(function(){G?a.defer(m):c.$evalAsync(m);t.notify(s++);
1462 0<h&&s>=h&&(t.resolve(s),f(r.$$intervalId));G||c.$apply()},k,t,G);return r}}}]}function Ad(a,b){var d=ga(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=fa(d.port)||Mg[d.protocol]||null}function Bd(a,b,d){if(Ng.test(a))throw jb("badpath",a);var c="/"!==a.charAt(0);c&&(a="/"+a);a=ga(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=gc(a.search);
1463 b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function xc(a,b){return a.slice(0,b.length)===b}function xa(a,b){if(xc(b,a))return b.substr(a.length)}function Da(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function yc(a,b,d){this.$$html5=!0;d=d||"";Ad(a,this);this.$$parse=function(a){var d=xa(b,a);if(!A(d))throw jb("ipthprfx",a,b);Bd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)};
1464 this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;w(f=xa(a,c))?(g=f,g=d&&w(f=xa(d,f))?b+(xa("/",f)||f):a+g):w(f=xa(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function zc(a,b,d){Ad(a,this);this.$$parse=function(c){var e=xa(a,c)||xa(b,c),f;z(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",z(e)&&(a=c,this.replace())):(f=xa(d,e),z(f)&&(f=e));Bd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;xc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?
1465 f[1]:c);this.$$path=c;this.$$compose()};this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b,d){return Da(a)===Da(b)?(this.$$parse(b),!0):!1}}function Cd(a,b,d){this.$$html5=!0;zc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===Da(c)?f=c:(g=xa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Lb(a){return function(){return this[a]}}function Dd(a,
1466 b){return function(d){if(z(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Tf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a};this.html5Mode=function(a){if(Ga(a))return b.enabled=a,this;if(D(a)){Ga(a.enabled)&&(b.enabled=a.enabled);Ga(a.requireBase)&&(b.requireBase=a.requireBase);if(Ga(a.rewriteLinks)||A(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer",
1467 "$rootElement","$window",function(d,c,e,f,g){function k(a,b){return a===b||ga(a).href===ga(b).href}function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess",m.absUrl(),a,m.$$state,b)}var m,p;p=c.baseHref();var n=c.url(),s;if(b.enabled){if(!p&&b.requireBase)throw jb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(p||"/");p=e.history?yc:Cd}else s=Da(n),p=zc;var r=s.substr(0,
1468 Da(s).lastIndexOf("/")+1);m=new p(s,r,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var t=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=x(a.target);"a"!==ua(g[0]);)if(g[0]===f[0]||!(g=g.parent())[0])return;if(!A(e)||!z(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");D(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ga(e.animVal).href);t.test(e)||!e||g.attr("target")||
1469 a.isDefaultPrevented()||!m.$$parseLinkUrl(e,h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!==n&&c.url(m.absUrl(),!0);var N=!0;c.onUrlChange(function(a,b){xc(a,r)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(N=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(N||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation=
1470 !1;var a=c.url(),b=m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!==m.$$state;if(N||n)N=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b,g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Uf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){cc(a)&&(a.stack&&
1471 f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||E;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}var f=Ca||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);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,
1472 arguments)}}()}}]}function Og(a){return a+""}function Pg(a,b){return"undefined"!==typeof a?a:b}function Ed(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Qg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!==a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Fd:b}function Z(a,b,d){var c,e,f=a.isPure=Qg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){Z(a.expression,
1473 b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:Z(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:Z(a.test,
1474 b,f);Z(a.alternate,b,f);Z(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:Z(a.object,b,f);a.computed&&Z(a.property,b,f);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,
1475 a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Z(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Z(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e,
1476 a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Gd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Hd(a){return a.type===q.Identifier||a.type===q.MemberExpression}function Id(a){if(1===a.body.length&&Hd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}
1477 function Jd(a){this.$filter=a}function Kd(a){this.$filter=a}function Mb(a,b,d){this.ast=new q(a,d);this.astCompiler=d.csp?new Kd(b):new Jd(b)}function Ac(a){return B(a.valueOf)?a.valueOf():Rg.call(a)}function Vf(){var a=T(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Nb(G),
1478 d=(new Mb(d,e,G)).parse(b),a[f]=p(d)),s(d,c);case "function":return s(b,c);default:return s(E,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Ac(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Ac(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=f.length;n<p;n++)l[n]=g,m[n]=null;return a.$watch(function(a){for(var b=
1479 !1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&Ac(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function h(a,b,c,d,e){function f(){h(m)&&k()}function g(a,b,c,d){m=u&&d?d[0]:n(a,b,c,d);h(m)&&a.$$postDigest(f);return s(m)}var h=d.literal?l:w,k,m,n=d.$$intercepted||d,s=d.$$interceptor||Ta,u=d.inputs&&!n.inputs;g.literal=d.literal;g.constant=d.constant;g.inputs=d.inputs;p(g);return k=a.$watch(g,b,c,e)}function l(a){var b=!0;r(a,function(a){w(a)||(b=!1)});return b}
1480 function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function p(a){a.constant?a.$$watchDelegate=m:a.oneTime?a.$$watchDelegate=h:a.inputs&&(a.$$watchDelegate=k);return a}function n(a,b){function c(d){return b(a(d))}c.$stateful=a.$stateful||b.$stateful;c.$$pure=a.$$pure&&b.$$pure;return c}function s(a,b){if(!b)return a;a.$$interceptor&&(b=n(a.$$interceptor,b),a=a.$$intercepted);var c=!1,d=function(d,e,f,g){d=c&&g?g[0]:a(d,e,f,g);return b(d)};d.$$intercepted=a;d.$$interceptor=
1481 b;d.literal=a.literal;d.oneTime=a.oneTime;d.constant=a.constant;b.$stateful||(c=!a.inputs,d.inputs=a.inputs?a.inputs:[a],b.$$pure||(d.inputs=d.inputs.map(function(a){return a.isPure===Fd?function(b){return a(b)}:a})));return p(d)}var G={csp:Aa().noUnsafeEval,literals:Ia(b),isIdentifierStart:B(d)&&d,isIdentifierContinue:B(c)&&c};f.$$getAst=function(a){var b=new Nb(G);return(new Mb(b,e,G)).getAst(a).ast};return f}]}function Xf(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Ld(function(a){b.$evalAsync(a)},
1482 d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function Yf(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Ld(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function Ld(a,b,d){function c(){return new e}function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!w&&
1483 x.length;){var a=x.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):z(c)?"undefined":"string"!==typeof c?Ie(c,void 0):c);cc(a.value)?b(a.value,c):b(c)}}}function k(c){!d||c.pending||2!==c.status||c.pur||(0===w&&0===x.length&&a(g),x.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++w,a(function(){var e,f,k;k=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,n=k.length;l<n;++l){c.pur=
1484 !0;f=k[l][0];e=k[l][c.status];try{B(e)?h(f,e(c.value)):1===c.status?h(f,c.value):m(f,c.value)}catch(p){m(f,p),p&&!0===p.$$passToExceptionHandler&&b(p)}}}finally{--w,d&&0===w&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?p(a,v("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||(g=!0,p(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(D(b)||B(b))f=b.then;B(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a,
1485 b){a.$$state.status||p(a,b)}function p(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function n(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{n(c,B(a)?a(d):d)}catch(h){b(h)}}})}function s(a){var b=new f;m(b,a);return b}function G(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return s(e)}return d&&B(d.then)?d.then(function(){return b(a)},s):b(a)}function t(a,b,c,d){var e=new f;h(e,a);return e.then(b,c,
1486 d)}function q(a){if(!B(a))throw v("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b}var v=F("$q",TypeError),w=0,x=[];S(f.prototype,{then:function(a,b,c){if(z(a)&&z(b)&&z(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return G(b,y,a)},function(b){return G(b,s,a)},
1487 b)}});var y=t;q.prototype=f.prototype;q.defer=c;q.reject=s;q.when=t;q.resolve=y;q.all=function(a){var b=new f,c=0,d=H(a)?[]:{};r(a,function(a,e){c++;t(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};q.race=function(a){var b=c();r(a,function(a){t(a).then(b.resolve,b.reject)});return b.promise};return q}function hg(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||
1488 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 Wf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++pb;this.$$ChildScope=null;this.$$suspended=!1}b.prototype=a;return b}var b=10,d=F("$rootScope"),c=null,e=null;this.digestTtl=
1489 function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,k){function h(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 m(){this.$id=++pb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=
1490 this;this.$$suspended=this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function p(a){if(v.$$phase)throw d("inprog",v.$$phase);v.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function G(){}function t(){for(;y.length;)try{y.shift()()}catch(a){f(a)}e=null}function q(){null===e&&(e=k.defer(function(){v.$apply(t)},
1491 null,"$applyAsync"))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,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",h);return d},$watch:function(a,b,d,e){var f=g(a);b=B(b)?b:E;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l=
1492 {fn:b,last:G,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;try{k?(k=!1,b(e,e,g)):b(e,d,g)}finally{for(var f=0;f<a.length;f++)d[f]=e[f]}}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=
1493 !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)});r(a,function(a,b){var d=g.$watch(a,function(a){e[b]=a;h||(h=!0,g.$evalAsync(c))});f.push(d)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!z(e)){if(D(e))if(ya(e))for(f!==n&&(f=n,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!==p&&(f=p={},t=0,l++);a=0;for(b in e)ta.call(e,
1494 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>a)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],p={},s=!0,t=0;return this.$watch(m,function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(D(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)ta.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,
1495 g,h,l,m,n,s,r=b,q,y=w.length?v:this,N=[],z,A;p("$digest");k.$$checkUrlChange();this===v&&null!==e&&(k.defer.cancel(e),t());c=null;do{s=!1;q=y;for(n=0;n<w.length;n++){try{A=w[n],l=A.fn,l(A.scope,A.locals)}catch(C){f(C)}c=null}w.length=0;a:do{if(n=!q.$$suspended&&q.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a=n[n.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(h=a.last)&&!(a.eq?va(g,h):X(g)&&X(h)))s=!0,c=a,a.last=a.eq?Ia(g,null):g,l=a.fn,l(g,h===G?g:h,q),5>r&&(z=4-r,N[z]||
1496 (N[z]=[]),N[z].push({msg:B(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s=!1;break a}}catch(E){f(E)}if(!(n=!q.$$suspended&&q.$$watchersCount&&q.$$childHead||q!==y&&q.$$nextSibling))for(;q!==y&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((s||w.length)&&!r--)throw v.$$phase=null,d("infdig",b,N);}while(s||w.length);for(v.$$phase=null;J<x.length;)try{x[J++]()}catch(D){f(D)}x.length=J=0;k.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},
1497 $resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===v&&k.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)s(this,this.$$listenerCount[b],b);a&&a.$$childHead===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=
1498 this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){v.$$phase||w.length||k.defer(function(){w.length&&v.$digest()},null,"$evalAsync");w.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){x.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{v.$$phase=
1499 null}}catch(b){f(b)}finally{try{v.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&y.push(b);a=g(a);q()},$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]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(delete c[d],s(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=
1500 !0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;e=e.$parent}while(e);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=db([e],arguments,
1501 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=null;return e}};var v=new m,w=v.$$asyncQueue=[],x=v.$$postDigestQueue=[],y=v.$$applyAsyncQueue=[],J=0;return v}]}function Le(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;
1502 this.aHrefSanitizationWhitelist=function(b){return w(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f=ga(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Sg(a){if("self"===a)return a;if(A(a)){if(-1<a.indexOf("***"))throw Ea("iwcard",a);a=Md(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(ab(a))return new RegExp("^"+a.source+"$");throw Ea("imatcher");
1503 }function Nd(a){var b=[];w(a)&&r(a,function(a){b.push(Sg(a))});return b}function $f(){this.SCE_CONTEXTS=V;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Nd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Nd(a));return b};this.$get=["$injector","$$sanitizeUri",function(d,c){function e(a,b){var c;"self"===a?(c=Bc(b,Od))||(C.document.baseURI?c=C.document.baseURI:(Na||(Na=C.document.createElement("a"),Na.href=".",Na=Na.cloneNode(!1)),c=Na.href),
1504 c=Bc(b,c)):c=!!a.exec(b.href);return c}function f(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 g=function(a){throw Ea("unsafe");};d.has("$sanitize")&&(g=d.get("$sanitize"));var k=f(),h={};h[V.HTML]=f(k);h[V.CSS]=f(k);h[V.MEDIA_URL]=f(k);h[V.URL]=f(h[V.MEDIA_URL]);h[V.JS]=f(k);h[V.RESOURCE_URL]=
1505 f(h[V.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ea("icontext",a,b);if(null===b||z(b)||""===b)return b;if("string"!==typeof b)throw Ea("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||z(f)||""===f)return f;var k=h.hasOwnProperty(d)?h[d]:null;if(k&&f instanceof k)return f.$$unwrapTrustedValue();B(f.$$unwrapTrustedValue)&&(f=f.$$unwrapTrustedValue());if(d===V.MEDIA_URL||d===V.URL)return c(f.toString(),d===V.MEDIA_URL);if(d===V.RESOURCE_URL){var k=
1506 ga(f.toString()),n,s,r=!1;n=0;for(s=a.length;n<s;n++)if(e(a[n],k)){r=!0;break}if(r)for(n=0,s=b.length;n<s;n++)if(e(b[n],k)){r=!1;break}if(r)return f;throw Ea("insecurl",f.toString());}if(d===V.HTML)return g(f);throw Ea("unsafe");},valueOf:function(a){return a instanceof k?a.$$unwrapTrustedValue():a}}}]}function Zf(){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 Ea("iequirks");var c=ja(V);c.isEnabled=function(){return a};
1507 c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ta);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;r(V,function(a,b){var d=K(b);c[("parse_as_"+d).replace(Cc,wb)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Cc,wb)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Cc,wb)]=function(b){return g(a,b)}});
1508 return c}]}function ag(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=fa((/android (\d+)/.exec(K((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},k=g.body&&g.body.style,h=!1,l=!1;k&&(h=!!("transition"in k||"webkitTransition"in k),l=!!("animation"in k||"webkitAnimation"in k));return{history:!(!c||
1509 4>e||f),hasEvent:function(a){if("input"===a&&Ca)return!1;if(z(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Aa(),transitions:h,animations:l,android:e}}]}function bg(){this.$get=ia(function(a){return new Tg(a)})}function Tg(a){function b(){var a=e.pop();return a&&a.cb}function d(a){for(var b=e.length-1;0<=b;--b){var c=e[b];if(c.type===a)return e.splice(b,1),c.cb}}var c={},e=[],f=this.ALL_TASKS_TYPE="$$all$$",g=this.DEFAULT_TASK_TYPE="$$default$$";this.completeTask=function(e,
1510 h){h=h||g;try{e()}finally{var l;l=h||g;c[l]&&(c[l]--,c[f]--);l=c[h];var m=c[f];if(!m||!l)for(l=m?d:b;m=l(h);)try{m()}catch(p){a.error(p)}}};this.incTaskCount=function(a){a=a||g;c[a]=(c[a]||0)+1;c[f]=(c[f]||0)+1};this.notifyWhenNoPendingTasks=function(a,b){b=b||f;c[b]?e.push({type:b,cb:a}):a()}}function dg(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(k,h){g.totalPendingRequests++;if(!A(k)||
1511 z(d.get(k)))k=f.getTrustedResourceUrl(k);var l=c.defaults&&c.defaults.transformResponse;H(l)?l=l.filter(function(a){return a!==vc}):l===vc&&(l=null);return c.get(k,S({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){return d.put(k,a.data)},function(a){h||(a=Ug("tpload",k,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function eg(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,
1512 b,d){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var c=ca.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+Md(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\\:"],k=0;k<g.length;++k){var h=a.querySelectorAll("["+g[k]+"model"+(d?"=":"*=")+'"'+b+'"]');if(h.length)return h}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},
1513 whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function fg(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,h,l){B(f)||(l=h,h=f,f=E);var m=Ha.call(arguments,3),p=w(l)&&!l,n=(p?c:d).defer(),s=n.promise,r;r=b.defer(function(){try{n.resolve(f.apply(null,m))}catch(b){n.reject(b),e(b)}finally{delete g[s.$$timeoutId]}p||a.$apply()},h,"$timeout");s.$$timeoutId=r;g[r]=n;return s}var g={};f.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$timeoutId"))throw Vg("badprom");
1514 if(!g.hasOwnProperty(a.$$timeoutId))return!1;a=a.$$timeoutId;var c=g[a],d=c.promise;d.$$state&&(d.$$state.pur=!0);c.reject("canceled");delete g[a];return b.defer.cancel(a)};return f}]}function ga(a){if(!A(a))return a;Ca&&(aa.setAttribute("href",a),a=aa.href);aa.setAttribute("href",a);a=aa.hostname;!Wg&&-1<a.indexOf(":")&&(a="["+a+"]");return{href:aa.href,protocol:aa.protocol?aa.protocol.replace(/:$/,""):"",host:aa.host,search:aa.search?aa.search.replace(/^\?/,""):"",hash:aa.hash?aa.hash.replace(/^#/,
1515 ""):"",hostname:a,port:aa.port,pathname:"/"===aa.pathname.charAt(0)?aa.pathname:"/"+aa.pathname}}function Jg(a){var b=[Od].concat(a.map(ga));return function(a){a=ga(a);return b.some(Bc.bind(null,a))}}function Bc(a,b){a=ga(a);b=ga(b);return a.protocol===b.protocol&&a.host===b.host}function gg(){this.$get=ia(C)}function Pd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},e="";return function(){var a,g,k,h,l;try{a=d.cookie||""}catch(m){a=""}if(a!==e)for(e=a,a=
1516 e.split("; "),c={},k=0;k<a.length;k++)g=a[k],h=g.indexOf("="),0<h&&(l=b(g.substring(0,h)),z(c[l])&&(c[l]=b(g.substring(h+1))));return c}}function kg(){this.$get=Pd}function dd(a){function b(d,c){if(D(d)){var e={};r(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",Qd);b("date",Rd);b("filter",Xg);b("json",Yg);b("limitTo",Zg);b("lowercase",$g);b("number",Sd);b("orderBy",
1517 Td);b("uppercase",ah)}function Xg(){return function(a,b,d,c){if(!ya(a)){if(null==a)return a;throw F("filter")("notarray",a);}c=c||"$";var e;switch(Dc(b)){case "function":break;case "boolean":case "null":case "number":case "string":e=!0;case "object":b=bh(b,d,c,e);break;default:return a}return Array.prototype.filter.call(a,b)}}function bh(a,b,d,c){var e=D(a)&&d in a;!0===b?b=va:B(b)||(b=function(a,b){if(z(a))return!1;if(null===a||null===b)return a===b;if(D(b)||D(a)&&!bc(a))return!1;a=K(""+a);b=K(""+
1518 b);return-1!==a.indexOf(b)});return function(f){return e&&!D(f)?Fa(f,a[d],b,d,!1):Fa(f,a,b,d,c)}}function Fa(a,b,d,c,e,f){var g=Dc(a),k=Dc(b);if("string"===k&&"!"===b.charAt(0))return!Fa(a,b.substring(1),d,c,e);if(H(a))return a.some(function(a){return Fa(a,b,d,c,e)});switch(g){case "object":var h;if(e){for(h in a)if(h.charAt&&"$"!==h.charAt(0)&&Fa(a[h],b,d,c,!0))return!0;return f?!1:Fa(a,b,d,c,!1)}if("object"===k){for(h in b)if(f=b[h],!B(f)&&!z(f)&&(g=h===c,!Fa(g?a:a[h],f,d,c,g,g)))return!1;return!0}return d(a,
1519 b);case "function":return!1;default:return d(a,b)}}function Dc(a){return null===a?"null":typeof a}function Qd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){z(c)&&(c=b.CURRENCY_SYM);z(e)&&(e=b.PATTERNS[1].maxFrac);var f=c?/\u00A4/g:/\s*\u00A4\s*/g;return null==a?a:Ud(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(f,c)}}function Sd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Ud(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function ch(a){var b=0,d,c,e,f,g;-1<(c=a.indexOf(Vd))&&
1520 (a=a.replace(Vd,""));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)===Ec;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Ec;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Wd&&(d=d.splice(0,Wd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function dh(a,b,d,c){var e=a.d,f=e.length-a.i;b=z(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=Math.max(0,f),a.i=
1521 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 Ud(a,b,d,c,e){if(!A(a)&&!W(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,k=Math.abs(a)+"",h="";if(f)h="\u221e";else{g=ch(k);dh(g,e,b.minFrac,b.maxFrac);h=g.d;k=g.i;e=g.e;f=[];for(g=h.reduce(function(a,b){return a&&!b},
1522 !0);0>k;)h.unshift(0),k++;0<k?f=h.splice(k,h.length):(f=h,h=[0]);k=[];for(h.length>=b.lgSize&&k.unshift(h.splice(-b.lgSize,h.length).join(""));h.length>b.gSize;)k.unshift(h.splice(-b.gSize,h.length).join(""));h.length&&k.unshift(h.join(""));h=k.join(d);f.length&&(h+=c+f.join(""));e&&(h+="e+"+e)}return 0>a&&!g?b.negPre+h+b.negSuf:b.posPre+h+b.posSuf}function Ob(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=Ec+a;d&&(a=a.substr(a.length-b));return e+a}function ea(a,
1523 b,d,c,e){d=d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12===d&&(f=12);return Ob(f,b,c,e)}}function kb(a,b,d){return function(c,e){var f=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Xd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Yd(a){return function(b){var d=Xd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ob(b,a)}}function Fc(a,b){return 0>=
1524 a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Rd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,k=b[8]?a.setUTCFullYear:a.setFullYear,h=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=fa(b[9]+b[10]),g=fa(b[9]+b[11]));k.call(a,fa(b[1]),fa(b[2])-1,fa(b[3]));f=fa(b[4]||0)-f;g=fa(b[5]||0)-g;k=fa(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));h.call(a,f,g,k,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,
1525 d,f){var g="",k=[],h,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;A(c)&&(c=eh.test(c)?fa(c):b(c));W(c)&&(c=new Date(c));if(!ha(c)||!isFinite(c.getTime()))return c;for(;d;)(l=fh.exec(d))?(k=db(k,l,1),d=k.pop()):(k.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=ec(f,m),c=fc(c,f,!0));r(k,function(b){h=gh[b];g+=h?h(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Yg(){return function(a,b){z(b)&&(b=2);return eb(a,b)}}function Zg(){return function(a,
1526 b,d){b=Infinity===Math.abs(Number(b))?Number(b):fa(b);if(X(b))return a;W(a)&&(a=a.toString());if(!ya(a))return a;d=!d||isNaN(d)?0:fa(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Gc(a,d,d+b):0===d?Gc(a,b,a.length):Gc(a,Math.max(0,d+b),d)}}function Gc(a,b,d){return A(a)?a.slice(b,d):Ha.call(a,b,d)}function Td(a){function b(b){return b.map(function(b){var c=1,d=Ta;if(B(b))d=b;else if(A(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e=
1527 d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,h=b.type;if(d===h){var h=a.value,l=b.value;"string"===d?(h=h.toLowerCase(),l=l.toLowerCase()):"object"===d&&(D(h)&&(h=a.index),D(l)&&(l=b.index));h!==l&&(c=h<l?-1:1)}else c="undefined"===d?1:"undefined"===h?-1:"null"===d?1:"null"===h?-1:d<h?-1:1;return c}return function(a,f,g,k){if(null==a)return a;if(!ya(a))throw F("orderBy")("notarray",
1528 a);H(f)||(f=[f]);0===f.length&&(f=["+"]);var h=b(f),l=g?-1:1,m=B(k)?k:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:h.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="null";else if("object"===c)a:{if(B(e.valueOf)&&(e=e.valueOf(),d(e)))break a;bc(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var d=0,e=h.length;d<e;d++){var f=m(a.predicateValues[d],b.predicateValues[d]);if(f)return f*
1529 h[d].descending*l}return(m(a.tieBreaker,b.tieBreaker)||c(a.tieBreaker,b.tieBreaker))*l});return a=a.map(function(a){return a.value})}}function Ra(a){B(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ia(a)}function Pb(a,b,d,c,e){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=e(b.name||b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=lb;this.$$element=a;this.$$animate=c;Zd(this)}function Zd(a){a.$$classCache=
1530 {};a.$$classCache[$d]=!(a.$$classCache[mb]=a.$$element.hasClass(mb))}function ae(a){function b(a,b,c){c&&!a.$$classCache[b]?(a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Vc(c,"-"):"";b(a,mb+c,!0===d);b(a,$d+c,!1===d)}var c=a.set,e=a.unset;a.clazz.prototype.$setValidity=function(a,g,k){z(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,k)):(this.$pending&&e(this.$pending,
1531 a,k),be(this.$pending)&&(this.$pending=void 0));Ga(g)?g?(e(this.$error,a,k),c(this.$$success,a,k)):(c(this.$error,a,k),e(this.$$success,a,k)):(e(this.$error,a,k),e(this.$$success,a,k));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=be(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,
1532 g,this)}}function be(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function Hc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Sa(a,b,d,c,e,f){var g=K(b[0].type);if(!e.android){var k=!1;b.on("compositionstart",function(){k=!0});b.on("compositionupdate",function(a){if(z(a.data)||""===a.data)k=!1});b.on("compositionend",function(){k=!1;l()})}var h,l=function(a){h&&(f.defer.cancel(h),h=null);if(!k){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&
1533 "false"===d.ngTrim||(e=U(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var m=function(a,b,c){h||(h=f.defer(function(){h=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut drop",m)}b.on("change",l);if(ce[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!h){var b=this.validity,
1534 c=b.badInput,d=b.typeMismatch;h=f.defer(function(){h=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 Qb(a,b){return function(d,c){var e,f;if(ha(d))return d;if(A(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(hh.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(),
1535 ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),e=new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0),100>f.yyyy&&e.setFullYear(f.yyyy),e}return NaN}}function nb(a,b,d,c){return function(e,f,g,k,h,l,m,p){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return w(a)&&!ha(a)?r(a)||void 0:a}function r(a,b){var c=k.$options.getOption("timezone");v&&v!==c&&(b=Sc(b,ec(v)));var e=d(a,
1536 b);!isNaN(e)&&c&&(e=fc(e,c));return e}Ic(e,f,g,k,a);Sa(e,f,g,k,h,l);var t="time"===a||"datetimelocal"===a,q,v;k.$parsers.push(function(c){if(k.$isEmpty(c))return null;if(b.test(c))return r(c,q);k.$$parserName=a});k.$formatters.push(function(a){if(a&&!ha(a))throw ob("datefmt",a);if(n(a)){q=a;var b=k.$options.getOption("timezone");b&&(v=b,q=fc(q,b,!0));var d=c;t&&A(k.$options.getOption("timeSecondsFormat"))&&(d=c.replace("ss.sss",k.$options.getOption("timeSecondsFormat")).replace(/:$/,""));a=m("date")(a,
1537 d,b);t&&k.$options.getOption("timeStripZeroSeconds")&&(a=a.replace(/(?::00)?(?:\.000)?$/,""));return a}v=q=null;return""});if(w(g.min)||g.ngMin){var x=g.min||p(g.ngMin)(e),B=s(x);k.$validators.min=function(a){return!n(a)||z(B)||d(a)>=B};g.$observe("min",function(a){a!==x&&(B=s(a),x=a,k.$validate())})}if(w(g.max)||g.ngMax){var y=g.max||p(g.ngMax)(e),J=s(y);k.$validators.max=function(a){return!n(a)||z(J)||d(a)<=J};g.$observe("max",function(a){a!==y&&(J=s(a),y=a,k.$validate())})}}}function Ic(a,b,d,
1538 c,e){(c.$$hasNativeValidators=D(b[0].validity))&&c.$parsers.push(function(a){var d=b.prop("validity")||{};if(d.badInput||d.typeMismatch)c.$$parserName=e;else return a})}function de(a){a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(ih.test(b))return parseFloat(b);a.$$parserName="number"});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!W(b))throw ob("numfmt",b);b=b.toString()}return b})}function na(a){w(a)&&!W(a)&&(a=parseFloat(a));return X(a)?void 0:a}function Jc(a){var b=a.toString(),
1539 d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function ee(a,b,d){a=Number(a);var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Jc(a):0,k=e?Jc(b):0,h=f?Jc(d):0,g=Math.max(g,k,h),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function fe(a,b,d,c,e){if(w(c)){a=a(c);if(!a.constant)throw ob("constexpr",d,c);return a(b)}return e}function Kc(a,b){function d(a,b){if(!a||!a.length)return[];
1540 if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e===b[m])continue a;c.push(e)}return c}function c(a){if(!a)return a;var b=a;H(a)?b=a.map(c).join(" "):D(a)?b=Object.keys(a).filter(function(b){return a[b]}).join(" "):A(a)||(b=a+"");return b}a="ngClass"+a;var e;return["$parse",function(f){return{restrict:"AC",link:function(g,k,h){function l(a,b){var c=[];r(a,function(a){if(0<b||p[a])p[a]=(p[a]||0)+b,p[a]===+(0<b)&&c.push(a)});return c.join(" ")}function m(a){if(a===
1541 b){var c=s,c=l(c&&c.split(" "),1);h.$addClass(c)}else c=s,c=l(c&&c.split(" "),-1),h.$removeClass(c);n=a}var p=k.data("$classCounts"),n=!0,s;p||(p=T(),k.data("$classCounts",p));"ngClass"!==a&&(e||(e=f("$index",function(a){return a&1})),g.$watch(e,m));g.$watch(f(h[a],c),function(a){if(n===b){var c=s&&s.split(" "),e=a&&a.split(" "),f=d(c,e),c=d(e,c),f=l(f,-1),c=l(c,1);h.$addClass(c);h.$removeClass(f)}s=a})}}}]}function qd(a,b,d,c,e,f){return{restrict:"A",compile:function(g,k){var h=a(k[c]);return function(a,
1542 c){c.on(e,function(c){var e=function(){h(a,{$event:c})};if(b.$$phase)if(f)a.$evalAsync(e);else try{e()}catch(g){d(g)}else a.$apply(e)})}}}}function Rb(a,b,d,c,e,f,g,k,h){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=
1543 void 0;this.$name=h(d.name||"",!1)(a);this.$$parentForm=lb;this.$options=Sb;this.$$updateEvents="";this.$$updateEventHandler=this.$$updateEventHandler.bind(this);this.$$parsedNgModel=e(d.ngModel);this.$$parsedNgModelAssign=this.$$parsedNgModel.assign;this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=null;this.$$parserValid=void 0;this.$$parserName="parse";this.$$currentValidationRunId=0;this.$$scope=a;this.$$rootScope=a.$root;this.$$attr=d;
1544 this.$$element=c;this.$$animate=f;this.$$timeout=g;this.$$parse=e;this.$$q=k;this.$$exceptionHandler=b;Zd(this);jh(this)}function jh(a){a.$$scope.$watch(function(b){b=a.$$ngModelGet(b);b===a.$modelValue||a.$modelValue!==a.$modelValue&&b!==b||a.$$setModelValue(b);return b})}function Lc(a){this.$$options=a}function ge(a,b){r(b,function(b,c){w(a[c])||(a[c]=b)})}function Oa(a,b){a.prop("selected",b);a.attr("selected",b)}function he(a,b,d){if(a){A(a)&&(a=new RegExp("^"+a+"$"));if(!a.test)throw F("ngPattern")("noregexp",
1545 b,a,za(d));return a}}function Tb(a){a=fa(a);return X(a)?-1:a}var Wb={objectMaxDepth:5,urlErrorParamsEnabled:!0},ie=/^\/(.+)\/([a-z]*)$/,ta=Object.prototype.hasOwnProperty,K=function(a){return A(a)?a.toLowerCase():a},ub=function(a){return A(a)?a.toUpperCase():a},Ca,x,rb,Ha=[].slice,Fg=[].splice,kh=[].push,la=Object.prototype.toString,Pc=Object.getPrototypeOf,pa=F("ng"),ca=C.angular||(C.angular={}),kc,pb=0;Ca=C.document.documentMode;var X=Number.isNaN||function(a){return a!==a};E.$inject=[];Ta.$inject=
1546 [];var ve=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,U=function(a){return A(a)?a.trim():a},Md=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Aa=function(){if(!w(Aa.rules)){var a=C.document.querySelector("[ng-csp]")||C.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Aa.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==
1547 b.indexOf("no-inline-style")}}else{a=Aa;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Aa.rules},qb=function(){if(w(qb.name_))return qb.name_;var a,b,d=Qa.length,c,e;for(b=0;b<d;++b)if(c=Qa[b],a=C.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return qb.name_=e},xe=/:/g,Qa=["ng-","data-ng-","ng:","x-ng-"],Be=function(a){var b=a.currentScript;if(!b)return!0;if(!(b instanceof C.HTMLScriptElement||b instanceof C.SVGScriptElement))return!1;
1548 b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(C.document),Ee=/[A-Z]/g,Wc=!1,Pa=3,Ke={full:"1.7.7",major:1,minor:7,dot:7,codeName:"kingly-exiting"};Y.expando="ng339";var Ka=Y.cache={},pg=
1549 1;Y._data=function(a){return this.cache[a[this.expando]]||{}};var lg=/-([a-z])/g,lh=/^-ms-/,Ab={mouseleave:"mouseout",mouseenter:"mouseover"},nc=F("jqLite"),og=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,mc=/<|&#?\w+;/,mg=/<([\w:-]+)/,ng=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,oa={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>",
1550 "</tr></tbody></table>"],_default:[0,"",""]};oa.optgroup=oa.option;oa.tbody=oa.tfoot=oa.colgroup=oa.caption=oa.thead;oa.th=oa.td;var ug=C.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Wa=Y.prototype={ready:fd,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?x(this[a]):x(this[this.length+a])},length:0,push:kh,sort:[].sort,splice:[].splice},Gb={};r("multiple selected checked disabled readOnly required open".split(" "),
1551 function(a){Gb[K(a)]=a});var md={};r("input select option textarea button form details".split(" "),function(a){md[a]=!0});var td={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:rc,removeData:qc,hasData:function(a){for(var b in Ka[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)qc(a[b]),id(a[b])}},function(a,b){Y[b]=a});r({data:rc,inheritedData:Eb,scope:function(a){return x.data(a,"$scope")||Eb(a.parentNode||
1552 a,["$isolateScope","$scope"])},isolateScope:function(a){return x.data(a,"$isolateScope")||x.data(a,"$isolateScopeNoTemplate")},controller:jd,injector:function(a){return Eb(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Bb,css:function(a,b,d){b=xb(b.replace(lh,"ms-"));if(w(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Pa&&2!==c&&8!==c&&a.getAttribute){var c=K(b),e=Gb[c];if(w(d))null===d||!1===d&&e?a.removeAttribute(b):a.setAttribute(b,
1553 e?c:d);else return a=a.getAttribute(b),e&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(w(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(z(d)){var c=a.nodeType;return 1===c||c===Pa?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(z(b)){if(a.multiple&&"select"===ua(a)){var d=[];r(a.options,function(a){a.selected&&d.push(a.value||a.text)});return d}return a.value}a.value=b},html:function(a,b){if(z(b))return a.innerHTML;yb(a,!0);a.innerHTML=b},
1554 empty:kd},function(a,b){Y.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==kd&&z(2===a.length&&a!==Bb&&a!==jd?b:c)){if(D(b)){for(e=0;e<g;e++)if(a===rc)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=z(e)?Math.min(g,1):g;for(f=0;f<g;f++){var k=a(this[f],b,c);e=e?e+k:k}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});r({removeData:qc,on:function(a,b,d,c){if(w(c))throw nc("onargs");if(lc(a)){c=zb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=rg(a,e));c=0<=b.indexOf(" ")?
1555 b.split(" "):[b];for(var g=c.length,k=function(b,c,g){var k=e[b];k||(k=e[b]=[],k.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,f));k.push(d)};g--;)b=c[g],Ab[b]?(k(Ab[b],tg),k(b,void 0,!0)):k(b)}},off:id,one:function(a,b,d){a=x(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;yb(a);r(new Y(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];r(a.childNodes,function(a){1===
1556 a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new Y(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;r(new Y(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){var d=x(b).eq(0).clone()[0],c=a.parentNode;c&&c.replaceChild(d,a);d.appendChild(a)},remove:Fb,detach:function(a){Fb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;
1557 if(c){b=new Y(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Db,removeClass:Cb,toggleClass:function(a,b,d){b&&r(b.split(" "),function(b){var e=d;z(e)&&(e=!Bb(a,b));(e?Db:Cb)(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:pc,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=zb(a);if(g=(g=g&&g.events)&&
1558 g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:E,type:f,target:a},b.type&&(c=S(c,b)),b=ja(g),e=d?[c].concat(d):[c],r(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){Y.prototype[b]=function(b,c,e){for(var f,g=0,k=this.length;g<
1559 k;g++)z(f)?(f=a(this[g],b,c,e),w(f)&&(f=x(f))):oc(f,a(this[g],b,c,e));return w(f)?f:this}});Y.prototype.bind=Y.prototype.on;Y.prototype.unbind=Y.prototype.off;var mh=Object.create(null);nd.prototype={_idx:function(a){a!==this._lastKey&&(this._lastKey=a,this._lastIndex=this._keys.indexOf(a));return this._lastIndex},_transformKey:function(a){return X(a)?mh:a},get:function(a){a=this._transformKey(a);a=this._idx(a);if(-1!==a)return this._values[a]},has:function(a){a=this._transformKey(a);return-1!==this._idx(a)},
1560 set:function(a,b){a=this._transformKey(a);var d=this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};var Hb=nd,jg=[function(){this.$get=[function(){return Hb}]}],wg=/^([^(]+?)=>/,xg=/^[^(]*\(\s*([^)]*)\)/m,nh=/,/,oh=/^\s*(_?)(\S+?)\1\s*$/,vg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ba=F("$injector");
1561 fb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw A(d)&&d||(d=a.name||yg(a)),Ba("strictdi",d);b=od(a);r(b[1].split(nh),function(a){a.replace(oh,function(a,b,d){c.push(d)})})}a.$inject=c}}else H(a)?(b=a.length-1,sb(a[b],"fn"),c=a.slice(0,b)):sb(a,"fn",!0);return c};var je=F("$animate"),zf=function(){this.$get=E},Af=function(){var a=new Hb,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=A(b)?b.split(" "):
1562 H(b)?b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=zg(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Db(a,e);f&&Cb(a,f)});a.delete(b)}});b.length=0}return{enabled:E,on:E,off:E,pin:E,push:function(g,k,h,l){l&&l();h=h||{};h.from&&g.css(h.from);h.to&&g.css(h.to);if(h.addClass||h.removeClass)if(k=h.addClass,l=h.removeClass,h=a.get(g)||{},k=e(h,k,!0),l=e(h,l,!1),
1563 k||l)a.set(g,h),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},xf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw je("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=g;a.factory(g,d)};this.customFilter=function(a){1===arguments.length&&(c=B(a)?a:null);return c};this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp?
1564 a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,je("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){e=f;break a}}e=void 0}!e||e.parentNode||e.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.cancel&&a.cancel()},enter:function(c,d,h,l){d=d&&x(d);h=h&&x(h);d=d||h.parent();b(c,d,h);return a.push(c,
1565 "enter",ra(l))},move:function(c,d,h,l){d=d&&x(d);h=h&&x(h);d=d||h.parent();b(c,d,h);return a.push(c,"move",ra(l))},leave:function(b,c){return a.push(b,"leave",ra(c),function(){b.remove()})},addClass:function(b,c,d){d=ra(d);d.addClass=hb(d.addclass,c);return a.push(b,"addClass",d)},removeClass:function(b,c,d){d=ra(d);d.removeClass=hb(d.removeClass,c);return a.push(b,"removeClass",d)},setClass:function(b,c,d,f){f=ra(f);f.addClass=hb(f.addClass,c);f.removeClass=hb(f.removeClass,d);return a.push(b,"setClass",
1566 f)},animate:function(b,c,d,f,m){m=ra(m);m.from=m.from?S(m.from,c):c;m.to=m.to?S(m.to,d):d;m.tempClasses=hb(m.tempClasses,f||"ng-inline-animate");return a.push(b,"animate",m)}}}]}],Cf=function(){this.$get=["$$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)}}}]},Bf=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,
1567 b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);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;r(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:E,getPromise:function(){if(!this.promise){var b=
1568 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)},"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)},
1569 complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(r(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return f}]},yf=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);k||
1570 h.complete();k=!0});return h}var g=e||{};g.$$prepared||(g=Ia(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var k,h=new d;return{start:f,end:f}}}]},$=F("$compile"),tc=new function(){};Xc.$inject=["$provide","$$sanitizeUriProvider"];Jb.prototype.isFirstChange=function(){return this.previousValue===tc};var pd=/^((?:x|data)[:\-_])/i,Eg=/[:\-_]+(.)/g,vd=F("$controller"),ud=/^(\S+)(\s+as\s+([\w$]+))?$/,Jf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&
1571 b instanceof x&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},wd="application/json",wc={"Content-Type":wd+";charset=utf-8"},Hg=/^\[|^\{(?!\{)/,Ig={"[":/]$/,"{":/}$/},Gg=/^\)]\}',?\n/,Kb=F("$http"),Ma=ca.$interpolateMinErr=F("$interpolate");Ma.throwNoconcat=function(a){throw Ma("noconcat",a);};Ma.interr=function(a,b){return Ma("interr",a,b.toString())};var Lg=F("$interval"),Sf=function(){this.$get=function(){function a(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var b=ca.callbacks,
1572 d={};return{createCallback:function(c){c="_"+(b.$$counter++).toString(36);var e="angular.callbacks."+c,f=a(c);d[e]=b[c]=f;return e},wasCalled:function(a){return d[a].called},getResponse:function(a){return d[a].data},removeCallback:function(a){delete b[d[a].id];delete d[a]}}}},ph=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,Mg={http:80,https:443,ftp:21},jb=F("$location"),Ng=/^\s*[\\/]{2,}/,qh={$$absUrl:"",$$html5:!1,$$replace:!1,$$compose:function(){for(var a=this.$$path,b=this.$$hash,d=ye(this.$$search),b=b?
1573 "#"+hc(b):"",a=a.split("/"),c=a.length;c--;)a[c]=hc(a[c].replace(/%2F/g,"/"));this.$$url=a.join("/")+(d?"?"+d:"")+b;this.$$absUrl=this.$$normalizeUrl(this.$$url);this.$$urlUpdatedByLocation=!0},absUrl:Lb("$$absUrl"),url:function(a){if(z(a))return this.$$url;var b=ph.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:Lb("$$protocol"),host:Lb("$$host"),port:Lb("$$port"),path:Dd("$$path",function(a){a=null!==
1574 a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(A(a)||W(a))a=a.toString(),this.$$search=gc(a);else if(D(a))a=Ia(a,{}),r(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw jb("isrcharg");break;default:z(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:Dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};
1575 r([Cd,zc,yc],function(a){a.prototype=Object.create(qh);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==yc||!this.$$html5)throw jb("nostate");this.$$state=z(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Ya=F("$parse"),Rg={}.constructor.prototype.valueOf,Ub=T();r("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Ub[a]=!0});var rh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,
1576 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++;else{var b=a+this.peek(),d=b+this.peek(2),c=Ub[b],e=Ub[d];Ub[a]||
1577 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||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?
1578 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,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):
1579 (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=w(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Ya("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<
1580 this.text.length;){var d=K(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)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<
1581 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)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,
1582 16))):d+=rh[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 q=function(a,b){this.lexer=a;this.options=b};q.Program="Program";q.ExpressionStatement="ExpressionStatement";q.AssignmentExpression="AssignmentExpression";q.ConditionalExpression="ConditionalExpression";q.LogicalExpression="LogicalExpression";q.BinaryExpression="BinaryExpression";q.UnaryExpression="UnaryExpression";
1583 q.CallExpression="CallExpression";q.MemberExpression="MemberExpression";q.Identifier="Identifier";q.Literal="Literal";q.ArrayExpression="ArrayExpression";q.Property="Property";q.ObjectExpression="ObjectExpression";q.ThisExpression="ThisExpression";q.LocalsExpression="LocalsExpression";q.NGValueParameter="NGValueParameter";q.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},
1584 program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:q.Program,body:a}},expressionStatement:function(){return{type:q.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Hd(a))throw Ya("lval");
1585 a={type:q.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:q.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:q.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a=
1586 {type:q.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:q.BinaryExpression,
1587 operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?
1588 a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=Ia(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:q.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:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):
1589 "["===b.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:q.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))
1590 }return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.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:q.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;
1591 b={type:q.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");
1592 return{type:q.ObjectExpression,properties:a}},throwError:function(a,b){throw Ya("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Ya("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 Ya("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,
1593 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))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:q.ThisExpression},$locals:{type:q.LocalsExpression}}};var Fd=2;Jd.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};Z(a,b.$filter);var d="",c;this.stage="assign";if(c=Id(a))this.state.computing=
1594 "assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Gd(a.body);b.stage="inputs";r(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var k=b.nextId();b.recurse(a,k);b.return_(k);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(a);a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+
1595 d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,Og,Pg,Ed);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")});b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a,
1596 b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;r(this.state.filters,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,k,h=this,l,m,p;c=c||E;if(!f&&w(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,
1597 this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case q.Program:r(a.body,function(b,c){h.recurse(b.expression,void 0,void 0,function(a){k=a});c!==a.body.length-1?h.current().body.push(k,";"):h.return_(k)});break;case q.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case q.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){k=a});m=a.operator+"("+this.ifDefined(k,0)+")";this.assign(b,m);c(m);break;case q.BinaryExpression:this.recurse(a.left,
1598 void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){k=a});m="+"===a.operator?this.plus(g,k):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(k,0):"("+g+")"+a.operator+"("+k+")";this.assign(b,m);c(m);break;case q.LogicalExpression:b=b||this.nextId();h.recurse(a.left,b);h.if_("&&"===a.operator?b:h.not(b),h.lazyRecurse(a.right,b));c(b);break;case q.ConditionalExpression:b=b||this.nextId();h.recurse(a.test,b);h.if_(b,h.lazyRecurse(a.alternate,b),h.lazyRecurse(a.consequent,
1599 b));c(b);break;case q.Identifier:b=b||this.nextId();d&&(d.context="inputs"===h.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);h.if_("inputs"===h.stage||h.not(h.getHasOwnProperty("l",a.name)),function(){h.if_("inputs"===h.stage||"s",function(){e&&1!==e&&h.if_(h.isNull(h.nonComputedMember("s",a.name)),h.lazyAssign(h.nonComputedMember("s",a.name),"{}"));h.assign(b,h.nonComputedMember("s",a.name))})},b&&h.lazyAssign(b,h.nonComputedMember("l",
1600 a.name)));c(b);break;case q.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();h.recurse(a.object,g,void 0,function(){h.if_(h.notNull(g),function(){a.computed?(k=h.nextId(),h.recurse(a.property,k),h.getStringValue(k),e&&1!==e&&h.if_(h.not(h.computedMember(g,k)),h.lazyAssign(h.computedMember(g,k),"{}")),m=h.computedMember(g,k),h.assign(b,m),d&&(d.computed=!0,d.name=k)):(e&&1!==e&&h.if_(h.isNull(h.nonComputedMember(g,a.property.name)),h.lazyAssign(h.nonComputedMember(g,
1601 a.property.name),"{}")),m=h.nonComputedMember(g,a.property.name),h.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){h.assign(b,"undefined")});c(b)},!!e);break;case q.CallExpression:b=b||this.nextId();a.filter?(k=h.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=h.nextId();h.recurse(a,b);l.push(b)}),m=k+"("+l.join(",")+")",h.assign(b,m),c(b)):(k=h.nextId(),g={},l=[],h.recurse(a.callee,k,g,function(){h.if_(h.notNull(k),function(){r(a.arguments,function(b){h.recurse(b,a.constant?
1602 void 0:h.nextId(),void 0,function(a){l.push(a)})});m=g.name?h.member(g.context,g.name,g.computed)+"("+l.join(",")+")":k+"("+l.join(",")+")";h.assign(b,m)},function(){h.assign(b,"undefined")});c(b)}));break;case q.AssignmentExpression:k=this.nextId();g={};this.recurse(a.left,void 0,g,function(){h.if_(h.notNull(g.context),function(){h.recurse(a.right,k);m=h.member(g.context,g.name,g.computed)+a.operator+k;h.assign(b,m);c(b||m)})},1);break;case q.ArrayExpression:l=[];r(a.elements,function(b){h.recurse(b,
1603 a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case q.ObjectExpression:l=[];p=!1;r(a.properties,function(a){a.computed&&(p=!0)});p?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=h.nextId(),h.recurse(a.key,g)):g=a.key.type===q.Identifier?a.key.name:""+a.key.value;k=h.nextId();h.recurse(a.value,k);h.assign(h.member(b,g,a.computed),k)})):(r(a.properties,function(b){h.recurse(b.value,a.constant?void 0:
1604 h.nextId(),void 0,function(a){l.push(h.escape(b.key.type===q.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case q.ThisExpression:this.assign(b,"s");c(b||"s");break;case q.LocalsExpression:this.assign(b,"l");c(b||"l");break;case q.NGValueParameter:this.assign(b,"v"),c(b||"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,
1605 b){if(a)return this.current().body.push(a,"=",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("}"))}},
1606 not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=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)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g=
1607 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(A(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(W(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 Ya("esc");},nextId:function(a,
1608 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]}};Kd.prototype={compile:function(a){var b=this;Z(a,b.$filter);var d,c;if(d=Id(a))c=this.recurse(d);d=Gd(a.body);var e;d&&(e=[],r(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];r(a.body,function(a){f.push(b.recurse(a.expression))});a=0===a.body.length?E:1===a.body.length?f[0]:function(a,b){var c;r(f,function(d){c=
1609 d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},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 q.Literal:return this.value(a.value,b);case q.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case q.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),
1610 this["binary"+a.operator](c,e,b);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case q.Identifier:return f.identifier(a.name,b,d);case q.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d):this.nonComputedMember(c,e,b,d);case q.CallExpression:return g=[],r(a.arguments,function(a){g.push(f.recurse(a))}),
1611 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 p=[],n=0;n<g.length;++n)p.push(g[n](a,c,d,f));a=e.apply(void 0,p,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,f){var p=e(a,c,d,f),n;if(null!=p.value){n=[];for(var s=0;s<g.length;++s)n.push(g[s](a,c,d,f));n=p.value.apply(p.context,n)}return b?{value:n}:n};case q.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,f,g){var p=
1612 c(a,d,f,g);a=e(a,d,f,g);p.context[p.name]=a;return b?{value:a}:a};case q.ArrayExpression:return g=[],r(a.elements,function(a){g.push(f.recurse(a))}),function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case q.ObjectExpression:return g=[],r(a.properties,function(a){a.computed?g.push({key:f.recurse(a.key),computed:!0,value:f.recurse(a.value)}):g.push({key:a.key.type===q.Identifier?a.key.name:""+a.key.value,computed:!1,value:f.recurse(a.value)})}),function(a,
1613 c,d,e){for(var f={},n=0;n<g.length;++n)g[n].computed?f[g[n].key(a,c,d,e)]=g[n].value(a,c,d,e):f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case q.ThisExpression:return function(a){return b?{value:a}:a};case q.LocalsExpression:return function(a,c){return b?{value:c}:c};case q.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=w(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,
1614 e,f);d=w(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 k=a(c,e,f,g);c=b(c,e,f,g);k=Ed(k,c);return d?{value:k}:k}},"binary-":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=(w(k)?k:0)-(w(c)?c:0);return d?{value:k}:k}},"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,
1615 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,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,
1616 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,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=
1617 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,k){e=a(e,f,g,k)?b(e,f,g,k):d(e,f,g,k);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}:
1618 e}},computedMember:function(a,b,d,c){return function(e,f,g,k){var h=a(e,f,g,k),l,m;null!=h&&(l=b(e,f,g,k),l+="",c&&1!==c&&h&&!h[l]&&(h[l]={}),m=h[l]);return d?{context:h,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};Mb.prototype={constructor:Mb,parse:function(a){a=this.getAst(a);var b=
1619 this.astCompiler.compile(a.ast),d=a.ast;b.literal=0===d.body.length||1===d.body.length&&(d.body[0].expression.type===q.Literal||d.body[0].expression.type===q.ArrayExpression||d.body[0].expression.type===q.ObjectExpression);b.constant=a.ast.constant;b.oneTime=a.oneTime;return b},getAst:function(a){var b=!1;a=a.trim();":"===a.charAt(0)&&":"===a.charAt(1)&&(b=!0,a=a.substring(2));return{ast:this.ast.ast(a),oneTime:b}}};var Ea=F("$sce"),V={HTML:"html",CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl",
1620 JS:"js"},Cc=/_([a-z])/g,Ug=F("$templateRequest"),Vg=F("$timeout"),aa=C.document.createElement("a"),Od=ga(C.location.href),Na;aa.href="http://[::1]";var Wg="[::1]"===aa.hostname;Pd.$inject=["$document"];dd.$inject=["$provide"];var Wd=22,Vd=".",Ec="0";Qd.$inject=["$locale"];Sd.$inject=["$locale"];var gh={yyyy:ea("FullYear",4,0,!1,!0),yy:ea("FullYear",2,0,!0,!0),y:ea("FullYear",1,0,!1,!0),MMMM:kb("Month"),MMM:kb("Month",!0),MM:ea("Month",2,1),M:ea("Month",1,1),LLLL:kb("Month",!1,!0),dd:ea("Date",2),
1621 d:ea("Date",1),HH:ea("Hours",2),H:ea("Hours",1),hh:ea("Hours",2,-12),h:ea("Hours",1,-12),mm:ea("Minutes",2),m:ea("Minutes",1),ss:ea("Seconds",2),s:ea("Seconds",1),sss:ea("Milliseconds",3),EEEE:kb("Day"),EEE:kb("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?"+":"")+(Ob(Math[0<a?"floor":"ceil"](a/60),2)+Ob(Math.abs(a%60),2))},ww:Yd(2),w:Yd(1),G:Fc,GG:Fc,GGG:Fc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},
1622 fh=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,eh=/^-?\d+$/;Rd.$inject=["$locale"];var $g=ia(K),ah=ia(ub);Td.$inject=["$parse"];var Me=ia({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]"===la.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),vb={};r(Gb,function(a,b){function d(a,d,e){a.$watch(e[c],
1623 function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=wa("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});vb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(td,function(a,b){vb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(ie))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=wa("ng-"+a);vb[b]=
1624 ["$sce",function(d){return{priority:99,link:function(c,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===la.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$set(b,d.getTrustedMediaUrl(f[b]));f.$observe(b,function(b){b?(f.$set(k,b),Ca&&g&&e.prop(g,f[k])):"href"===a&&f.$set(k,null)})}}}]});var lb={$addControl:E,$getControls:ia([]),$$renameControl:function(a,b){a.$name=b},$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E,$setSubmitted:E,$$setSubmitted:E};Pb.$inject=
1625 ["$element","$attrs","$scope","$animate","$interpolate"];Pb.prototype={$rollbackViewValue:function(){r(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){r(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Ja(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$getControls:function(){return ja(this.$$controls)},$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&
1626 this[a.$name]===a&&delete this[a.$name];r(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);r(this.$error,function(b,d){this.$setValidity(d,null,a)},this);r(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=lb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Vb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,
1627 Za,Vb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;r(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){r(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){for(var a=this;a.$$parentForm&&a.$$parentForm!==lb;)a=a.$$parentForm;a.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;r(this.$$controls,function(a){a.$$setSubmitted&&a.$$setSubmitted()})}};ae({clazz:Pb,set:function(a,
1628 b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var ke=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||E}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Pb,compile:function(d,f){d.addClass(Za).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var p=f[0];if(!("action"in e)){var n=function(b){a.$apply(function(){p.$commitViewValue();
1629 p.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",n);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",n)},0,!1)})}(f[1]||p.$$parentForm).$addControl(p);var s=g?c(p.$name):E;g&&(s(a,p),e.$observe(g,function(b){p.$name!==b&&(s(a,void 0),p.$$parentForm.$$renameControl(p,b),s=c(p.$name),s(a,p))}));d.on("$destroy",function(){p.$$parentForm.$removeControl(p);s(a,void 0);S(p,lb)})}}}}}]},Ne=ke(),Ze=ke(!0),hh=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,
1630 sh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,th=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,ih=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,le=/^(\d{4,})-(\d{2})-(\d{2})$/,me=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Mc=/^(\d{4,})-W(\d\d)$/,ne=/^(\d{4,})-(\d\d)$/,
1631 oe=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,ce=T();r(["date","datetime-local","month","time","week"],function(a){ce[a]=!0});var pe={text:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c)},date:nb("date",le,Qb(le,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":nb("datetimelocal",me,Qb(me,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:nb("time",oe,Qb(oe,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:nb("week",Mc,function(a,b){if(ha(a))return a;if(A(a)){Mc.lastIndex=0;var d=Mc.exec(a);
1632 if(d){var c=+d[1],e=+d[2],f=d=0,g=0,k=0,h=Xd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),k=b.getMilliseconds());return new Date(c,0,h.getDate()+e,d,f,g,k)}}return NaN},"yyyy-Www"),month:nb("month",ne,Qb(ne,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f,g,k){Ic(a,b,d,c,"number");de(c);Sa(a,b,d,c,e,f);var h;if(w(d.min)||d.ngMin){var l=d.min||k(d.ngMin)(a);h=na(l);c.$validators.min=function(a,b){return c.$isEmpty(b)||z(h)||b>=h};d.$observe("min",function(a){a!==l&&(h=na(a),
1633 l=a,c.$validate())})}if(w(d.max)||d.ngMax){var m=d.max||k(d.ngMax)(a),p=na(m);c.$validators.max=function(a,b){return c.$isEmpty(b)||z(p)||b<=p};d.$observe("max",function(a){a!==m&&(p=na(a),m=a,c.$validate())})}if(w(d.step)||d.ngStep){var n=d.step||k(d.ngStep)(a),s=na(n);c.$validators.step=function(a,b){return c.$isEmpty(b)||z(s)||ee(b,h||0,s)};d.$observe("step",function(a){a!==n&&(s=na(a),n=a,c.$validate())})}},url:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c);c.$validators.url=function(a,b){var d=
1634 a||b;return c.$isEmpty(d)||sh.test(d)}},email:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c);c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||th.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==U(d.ngTrim);z(d.name)&&b.attr("name",++pb);b.on("change",function(a){var g;b[0].checked&&(g=d.value,e&&(g=U(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=U(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a,
1635 c){b.attr(a,d[a]);var e=d[a];d.$observe(a,function(a){a!==e&&(e=a,c(a))})}function k(a){p=na(a);X(c.$modelValue)||(m?(a=b.val(),p>a&&(a=p,b.val(a)),c.$setViewValue(a)):c.$validate())}function h(a){n=na(a);X(c.$modelValue)||(m?(a=b.val(),n<a&&(b.val(n),a=n<p?p:n),c.$setViewValue(a)):c.$validate())}function l(a){s=na(a);X(c.$modelValue)||(m?c.$viewValue!==b.val()&&c.$setViewValue(b.val()):c.$validate())}Ic(a,b,d,c,"range");de(c);Sa(a,b,d,c,e,f);var m=c.$$hasNativeValidators&&"range"===b[0].type,p=m?
1636 0:void 0,n=m?100:void 0,s=m?1:void 0,r=b[0].validity;a=w(d.min);e=w(d.max);f=w(d.step);var q=c.$render;c.$render=m&&w(r.rangeUnderflow)&&w(r.rangeOverflow)?function(){q();c.$setViewValue(b.val())}:q;a&&(p=na(d.min),c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||z(p)||b>=p},g("min",k));e&&(n=na(d.max),c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||z(n)||b<=n},g("max",h));f&&(s=na(d.step),c.$validators.step=m?function(){return!r.stepMismatch}:
1637 function(a,b){return c.$isEmpty(b)||z(s)||ee(b,p||0,s)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,k){var h=fe(k,a,"ngTrueValue",d.ngTrueValue,!0),l=fe(k,a,"ngFalseValue",d.ngFalseValue,!1);b.on("change",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 va(a,h)});c.$parsers.push(function(a){return a?h:l})},hidden:E,button:E,submit:E,reset:E,file:E},Yc=["$browser","$sniffer",
1638 "$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,k){k[0]&&(pe[K(g.type)]||pe.text)(e,f,g,k[0],b,a,d,c)}}}}],vf=function(){var a={configurable:!0,enumerable:!1,get:function(){return this.getAttribute("value")||""},set:function(a){this.setAttribute("value",a)}};return{restrict:"E",priority:200,compile:function(b,d){if("hidden"===K(d.type))return{pre:function(b,d,f,g){b=d[0];b.parentNode&&b.parentNode.insertBefore(b,b.nextSibling);Object.defineProperty&&
1639 Object.defineProperty(b,"value",a)}}}}},uh=/^(true|false|\d+)$/,sf=function(){function a(a,d,c){var e=w(c)?c:9===Ca?"":null;a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return uh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,function(b){a(d,f,b)})}}}},Re=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];
1640 b.$watch(e.ngBind,function(a){c.textContent=ic(a)})}}}}],Te=["$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=z(a)?"":a})}}}}],Se=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);
1641 return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],rf=ia({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Ue=Kc("",!0),We=Kc("Odd",0),Ve=Kc("Even",1),Xe=Ra({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ye=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],cd={},vh={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
1642 function(a){var b=wa("ng-"+a);cd[b]=["$parse","$rootScope","$exceptionHandler",function(d,c,e){return qd(d,c,e,b,a,vh[a])}]});var af=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var k,h,l;d.$watch(e.ngIf,function(d){d?h||g(function(d,f){h=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);k={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),h&&(h.$destroy(),h=null),k&&(l=tb(k.clone),
1643 a.leave(l).done(function(a){!1!==a&&(l=null)}),k=null))})}}}],bf=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",k=e.autoscroll;return function(c,e,m,p,n){var r=0,q,t,x,v=function(){t&&(t.remove(),t=null);q&&(q.$destroy(),q=null);x&&(d.leave(x).done(function(a){!1!==a&&(t=null)}),t=x,x=null)};c.$watch(f,function(f){var m=function(a){!1===
1644 a||!w(k)||k&&!c.$eval(k)||b()},t=++r;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&t===r){var b=c.$new();p.template=a;a=n(b,function(a){v();d.enter(a,null,e).done(m)});q=b;x=a;q.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||t!==r||(v(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(v(),p.template=null)})}}}}],uf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){la.call(d[0]).match(/SVG/)?
1645 (d.empty(),a(ed(e.template,C.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],cf=Ra({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),qf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?U(e):e;c.$parsers.push(function(a){if(!z(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?U(a):a)});return b}});c.$formatters.push(function(a){if(H(a))return a.join(e)});
1646 c.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",$d="ng-invalid",Za="ng-pristine",Vb="ng-dirty",ob=F("ngModel");Rb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");Rb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);B(c)&&(c=a(b));return c};this.$$ngModelSet=
1647 function(a,c){B(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw ob("nonassign",this.$$attr.ngModel,za(this.$$element));},$render:E,$isEmpty:function(a){return z(a)||""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,
1648 "ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Vb);this.$$animate.addClass(this.$$element,Za)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Vb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=
1649 !0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!X(this.$modelValue)){var a=this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!==
1650 c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;r(h.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(r(h.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(h.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!B(h.then))throw ob("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?h.$$q.all(c).then(function(){g(d)},E):g(!0)}function f(a,b){k===h.$$currentValidationRunId&&
1651 h.$setValidity(a,b)}function g(a){k===h.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var k=this.$$currentValidationRunId,h=this;(function(){var a=h.$$parserName;if(z(h.$$parserValid))f(a,null);else return h.$$parserValid||(r(h.$validators,function(a,b){f(b,null)}),r(h.$asyncValidators,function(a,b){f(b,null)})),f(a,h.$$parserValid),h.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!==
1652 a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;this.$$parserValid=z(a)?void 0:!0;this.$setValidity(this.$$parserName,null);this.$$parserName="parse";if(this.$$parserValid)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),z(a)){this.$$parserValid=!1;break}X(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));
1653 var c=this.$modelValue,e=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;e&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){e||(b.$modelValue=d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue);r(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},this)},$setViewValue:function(a,b){this.$viewValue=
1654 a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");W(b[a])?b=b[a]:W(b["default"])&&-1===this.$options.getOption("updateOn").indexOf(a)?b=b["default"]:W(b["*"])&&(b=b["*"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$rootScope.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})},
1655 $overrideModelOptions:function(a){this.$options=this.$options.createChild(a);this.$$setUpdateOnEvents()},$processModelValue:function(){var a=this.$$format();this.$viewValue!==a&&(this.$$updateEmptyClasses(a),this.$viewValue=this.$$lastCommittedViewValue=a,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,E))},$$format:function(){for(var a=this.$formatters,b=a.length,d=this.$modelValue;b--;)d=a[b](d);return d},$$setModelValue:function(a){this.$modelValue=this.$$rawModelValue=a;this.$$parserValid=
1656 void 0;this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler);if(this.$$updateEvents=this.$options.getOption("updateOn"))this.$$element.on(this.$$updateEvents,this.$$updateEventHandler)},$$updateEventHandler:function(a){this.$$debounceViewValueCommit(a&&a.type)}};ae({clazz:Rb,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var pf=["$rootScope",function(a){return{restrict:"A",require:["ngModel",
1657 "^?form","^?ngModelOptions"],controller:Rb,priority:1,compile:function(b){b.addClass(Za).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;if(f=f[2])g.$options=f.$options;g.$$initGetterSetters();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){function g(){k.$setTouched()}var k=f[0];k.$$setUpdateOnEvents();c.on("blur",
1658 function(){k.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Sb,wh=/(\s+|^)default(\s+|$)/;Lc.prototype={getOption:function(a){return this.$$options[a]},createChild:function(a){var b=!1;a=S({},a);r(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=U(d.replace(wh,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],ge(a,this.$$options));ge(a,Sb.$$options);
1659 return new Lc(a)}};Sb=new Lc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var tf=function(){function a(a,d){this.$$attrs=a;this.$$scope=d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Sb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},df=Ra({terminal:!0,
1660 priority:1E3}),xh=F("ngOptions"),yh=/^\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]+?))?$/,nf=["$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(!r&&ya(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&
1661 "$"!==c.charAt(0)&&b.push(c)}return b}var p=a.match(yh);if(!p)throw xh("iexp",a,za(b));var n=p[5]||p[7],r=p[6];a=/ as /.test(p[0])&&p[1];var q=p[9];b=d(p[2]?p[1]:n);var t=a&&d(a)||b,w=q&&d(q),v=q?function(a,b){return w(c,b)}:function(a){return La(a)},x=function(a,b){return v(a,A(a,b))},z=d(p[2]||p[1]),y=d(p[3]||""),J=d(p[4]||""),I=d(p[8]),B={},A=r?function(a,b){B[r]=b;B[n]=a;return B}:function(a){B[n]=a;return B};return{trackBy:q,getTrackByValue:x,getWatchables:d(I,function(a){var b=[];a=a||[];for(var d=
1662 f(a),e=d.length,g=0;g<e;g++){var k=a===d?g:d[g],l=a[k],k=A(l,k),l=v(l,k);b.push(l);if(p[2]||p[1])l=z(c,k),b.push(l);p[4]&&(k=J(c,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},d=I(c)||[],g=f(d),k=g.length,n=0;n<k;n++){var p=d===g?n:g[n],r=A(d[p],p),s=t(c,r),p=v(s,r),w=z(c,r),B=y(c,r),r=J(c,r),s=new e(p,s,w,B,r);a.push(s);b[p]=s}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[x(a)]},getViewValueFromOption:function(a){return q?Ia(a.viewValue):a.viewValue}}}}}
1663 var e=C.document.createElement("option"),f=C.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=E},post:function(d,k,h,l){function m(a){var b=(a=v.getOptionFromViewValue(a))&&a.element;b&&!b.selected&&(b.selected=!0);return a}function p(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}var n=l[0],q=l[1],z=h.multiple;l=0;for(var t=k.children(),
1664 B=t.length;l<B;l++)if(""===t[l].value){n.hasEmptyOption=!0;n.emptyOption=t.eq(l);break}k.empty();l=!!n.emptyOption;x(e.cloneNode(!1)).val("?");var v,A=c(h.ngOptions,k,d),C=b[0].createDocumentFragment();n.generateUnknownOptionValue=function(a){return"?"};z?(n.writeValue=function(a){if(v){var b=a&&a.map(m)||[];v.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})}},n.readValue=function(){var a=k.val()||[],b=[];r(a,function(a){(a=v.selectValueMap[a])&&
1665 !a.disabled&&b.push(v.getViewValueFromOption(a))});return b},A.trackBy&&d.$watchCollection(function(){if(H(q.$viewValue))return q.$viewValue.map(function(a){return A.getTrackByValue(a)})},function(){q.$render()})):(n.writeValue=function(a){if(v){var b=k[0].options[k[0].selectedIndex],c=v.getOptionFromViewValue(a);b&&b.removeAttribute("selected");c?(k[0].value!==c.selectValue&&(n.removeUnknownOption(),k[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):n.selectUnknownOrEmptyOption(a)}},
1666 n.readValue=function(){var a=v.selectValueMap[k.val()];return a&&!a.disabled?(n.unselectEmptyOption(),n.removeUnknownOption(),v.getViewValueFromOption(a)):null},A.trackBy&&d.$watch(function(){return A.getTrackByValue(q.$viewValue)},function(){q.$render()}));l&&(a(n.emptyOption)(d),k.prepend(n.emptyOption),8===n.emptyOption[0].nodeType?(n.hasEmptyOption=!1,n.registerOption=function(a,b){""===b.val()&&(n.hasEmptyOption=!0,n.emptyOption=b,n.emptyOption.removeClass("ng-scope"),q.$render(),b.on("$destroy",
1667 function(){var a=n.$isEmptyOptionSelected();n.hasEmptyOption=!1;n.emptyOption=void 0;a&&q.$render()}))}):n.emptyOption.removeClass("ng-scope"));d.$watchCollection(A.getWatchables,function(){var a=v&&n.readValue();if(v)for(var b=v.items.length-1;0<=b;b--){var c=v.items[b];w(c.group)?Fb(c.element.parentNode):Fb(c.element)}v=A.getOptions();var d={};v.items.forEach(function(a){var b;if(w(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),C.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b);
1668 var c=e.cloneNode(!1);b.appendChild(c);p(a,c)}else b=e.cloneNode(!1),C.appendChild(b),p(a,b)});k[0].appendChild(C);q.$render();q.$isEmpty(a)||(b=n.readValue(),(A.trackBy||z?va(a,b):a===b)||(q.$setViewValue(b),q.$render()))})}}}}],ef=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,k){function h(a){g.text(a||"")}var l=k.count,m=k.$attr.when&&g.attr(k.$attr.when),p=k.offset||0,n=f.$eval(m)||{},q={},w=b.startSymbol(),t=b.endSymbol(),x=w+l+"-"+
1669 p+t,v=ca.noop,A;r(k,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+K(c[2]),n[c]=g.attr(k.$attr[b]))});r(n,function(a,d){q[d]=b(a.replace(c,x))});f.$watch(l,function(b){var c=parseFloat(b),e=X(c);e||c in n||(c=a.pluralCat(c-p));c===A||e&&X(A)||(v(),e=q[c],z(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),v=E,h()):v=f.$watch(e,h),A=c)})}}}],qe=F("ngRef"),ff=["$parse",function(a){return{priority:-1,restrict:"A",compile:function(b,d){var c=wa(ua(b)),e=a(d.ngRef),f=e.assign||
1670 function(){throw qe("nonassign",d.ngRef);};return function(a,b,h){var l;if(h.hasOwnProperty("ngRefRead"))if("$element"===h.ngRefRead)l=b;else{if(l=b.data("$"+h.ngRefRead+"Controller"),!l)throw qe("noctrl",h.ngRefRead,d.ngRef);}else l=b.data("$"+c+"Controller");l=l||b;f(a,l);b.on("$destroy",function(){e(a)===l&&f(a,null)})}}}}],gf=["$parse","$animate","$compile",function(a,b,d){var c=F("ngRepeat"),e=function(a,b,c,d,e,f,g){a[c]=d;e&&(a[e]=f);a.$index=b;a.$first=0===b;a.$last=b===g-1;a.$middle=!(a.$first||
1671 a.$last);a.$odd=!(a.$even=0===(b&1))},f=function(a,b,c){return La(c)},g=function(a,b){return b};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(k,h){var l=h.ngRepeat,m=d.$$createComment("end ngRepeat",l),p=l.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!p)throw c("iexp",l);var n=p[1],q=p[2],w=p[3],t=p[4],p=n.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!p)throw c("iidexp",
1672 n);var x=p[3]||p[1],v=p[2];if(w&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(w)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(w)))throw c("badident",w);var z;if(t){var A={$id:La},y=a(t);z=function(a,b,c,d){v&&(A[v]=b);A[x]=c;A.$index=d;return y(a,A)}}return function(a,d,h,k,n){var p=T();a.$watchCollection(q,function(h){var k,q,t=d[0],s,y=T(),B,C,E,D,H,F,K;w&&(a[w]=h);if(ya(h))H=h,q=z||f;else for(K in q=z||g,H=[],h)ta.call(h,K)&&"$"!==K.charAt(0)&&H.push(K);
1673 B=H.length;K=Array(B);for(k=0;k<B;k++)if(C=h===H?k:H[k],E=h[C],D=q(a,C,E,k),p[D])F=p[D],delete p[D],y[D]=F,K[k]=F;else{if(y[D])throw r(K,function(a){a&&a.scope&&(p[a.id]=a)}),c("dupes",l,D,E);K[k]={id:D,scope:void 0,clone:void 0};y[D]=!0}A&&(A[x]=void 0);for(s in p){F=p[s];D=tb(F.clone);b.leave(D);if(D[0].parentNode)for(k=0,q=D.length;k<q;k++)D[k].$$NG_REMOVED=!0;F.scope.$destroy()}for(k=0;k<B;k++)if(C=h===H?k:H[k],E=h[C],F=K[k],F.scope){s=t;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);F.clone[0]!==
1674 s&&b.move(tb(F.clone),null,t);t=F.clone[F.clone.length-1];e(F.scope,k,x,E,v,C,B)}else n(function(a,c){F.scope=c;var d=m.cloneNode(!1);a[a.length++]=d;b.enter(a,null,t);t=d;F.clone=a;y[F.id]=F;e(F.scope,k,x,E,v,C,B)});p=y})}}}}],hf=["$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"})})}}}],$e=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,
1675 d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],jf=Ra(function(a,b,d){a.$watchCollection(d.ngStyle,function(a,d){d&&a!==d&&(a||(a={}),r(d,function(b,d){null==a[d]&&(a[d]="")}));a&&b.css(a)})}),kf=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],k=[],h=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(e.ngSwitch||
1676 e.on,function(c){for(var d,e;h.length;)a.cancel(h.pop());d=0;for(e=l.length;d<e;++d){var q=tb(k[d].clone);l[d].$destroy();(h[d]=a.leave(q)).done(m(h,d))}k.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");k.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],lf=Ra({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,
1677 b,c){return c[b-1]!==a});r(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:e,element:b})})}}),mf=Ra({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),zh=F("ngTransclude"),of=["$compile",function(a){return{restrict:"EAC",compile:function(b){var d=a(b.contents());b.empty();return function(a,b,f,g,k){function h(){d(a,function(a){b.append(a)})}if(!k)throw zh("orphan",
1678 za(b));f.ngTransclude===f.$attr.ngTransclude&&(f.ngTransclude="");f=f.ngTransclude||f.ngTranscludeSlot;k(function(a,c){var d;if(d=a.length)a:{d=0;for(var f=a.length;d<f;d++){var g=a[d];if(g.nodeType!==Pa||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(h(),c.$destroy())},null,f);f&&!k.isSlotFilled(f)&&h()}}}}],Oe=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],Ah={$setViewValue:E,$render:E},Bh=["$element",
1679 "$scope",function(a,b){function d(){g||(g=!0,b.$$postDigest(function(){g=!1;e.ngModelCtrl.$render()}))}function c(a){k||(k=!0,b.$$postDigest(function(){b.$$destroyed||(k=!1,e.ngModelCtrl.$setViewValue(e.readValue()),a&&e.ngModelCtrl.$render())}))}var e=this,f=new Hb;e.selectValueMap={};e.ngModelCtrl=Ah;e.multiple=!1;e.unknownOption=x(C.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);
1680 a.prepend(e.unknownOption);Oa(e.unknownOption,!0);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);Oa(e.unknownOption,!0);a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+La(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),Oa(e.emptyOption,!0))};e.unselectEmptyOption=function(){e.hasEmptyOption&&Oa(e.emptyOption,!1)};b.$on("$destroy",
1681 function(){e.renderUnknownOption=E});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=function(b){var c=a[0].options[a[0].selectedIndex];c&&Oa(x(c),!1);e.hasOption(b)?(e.removeUnknownOption(),c=La(b),a.val(c in e.selectValueMap?c:b),Oa(x(a[0].options[a[0].selectedIndex]),!0)):e.selectUnknownOrEmptyOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){Ja(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption=
1682 b);var c=f.get(a)||0;f.set(a,c+1);d()}};e.removeOption=function(a){var b=f.get(a);b&&(1===b?(f.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):f.set(a,b-1))};e.hasOption=function(a){return!!f.get(a)};e.$hasEmptyOption=function(){return e.hasEmptyOption};e.$isUnknownOptionSelected=function(){return a[0].options[0]===e.unknownOption[0]};e.$isEmptyOptionSelected=function(){return e.hasEmptyOption&&a[0].options[a[0].selectedIndex]===e.emptyOption[0]};e.selectUnknownOrEmptyOption=function(a){null==
1683 a&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(a):e.renderUnknownOption(a)};var g=!1,k=!1;e.registerOption=function(a,b,f,g,k){if(f.$attr.ngValue){var q,r;f.$observe("value",function(a){var d,f=b.prop("selected");w(r)&&(e.removeOption(q),delete e.selectValueMap[r],d=!0);r=La(a);q=a;e.selectValueMap[r]=a;e.addOption(a,b);b.attr("value",r);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();var d,f=b.prop("selected");
1684 w(q)&&(e.removeOption(q),d=!0);q=a;e.addOption(a,b);d&&f&&c()}):k?a.$watch(k,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||a===b)&&c(!0)})}}],Pe=function(){return{restrict:"E",
1685 require:["select","?ngModel"],controller:Bh,priority:1,link:{pre:function(a,b,d,c){var e=c[0],f=c[1];if(f){if(e.ngModelCtrl=f,b.on("change",function(){e.removeUnknownOption();a.$apply(function(){f.$setViewValue(e.readValue())})}),d.multiple){e.multiple=!0;e.readValue=function(){var a=[];r(b.find("option"),function(b){b.selected&&!b.disabled&&(b=b.value,a.push(b in e.selectValueMap?e.selectValueMap[b]:b))});return a};e.writeValue=function(a){r(b.find("option"),function(b){var c=!!a&&(-1!==Array.prototype.indexOf.call(a,
1686 b.value)||-1!==Array.prototype.indexOf.call(a,e.selectValueMap[b.value]));c!==b.selected&&Oa(x(b),c)})};var g,k=NaN;a.$watch(function(){k!==f.$viewValue||va(g,f.$viewValue)||(g=ja(f.$viewValue),f.$render());k=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}else e.registerOption=E},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},Qe=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,e;w(d.ngValue)||
1687 (w(d.value)?c=a(d.value,!0):(e=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var h=b.parent();(h=h.data("$selectController")||h.parent().data("$selectController"))&&h.registerOption(a,b,d,c,e)}}}}],$c=["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.required||a(c.ngRequired)(b);c.required=!0;e.$validators.required=function(a,b){return!f||!e.$isEmpty(b)};c.$observe("required",function(a){f!==a&&(f=a,e.$validate())})}}}}],Zc=["$parse",
1688 function(a){return{restrict:"A",require:"?ngModel",compile:function(b,d){var c,e;d.ngPattern&&(c=d.ngPattern,e="/"===d.ngPattern.charAt(0)&&ie.test(d.ngPattern)?function(){return d.ngPattern}:a(d.ngPattern));return function(a,b,d,h){if(h){var l=d.pattern;d.ngPattern?l=e(a):c=d.pattern;var m=he(l,c,b);d.$observe("pattern",function(a){var d=m;m=he(a,c,b);(d&&d.toString())!==(m&&m.toString())&&h.$validate()});h.$validators.pattern=function(a,b){return h.$isEmpty(b)||z(m)||m.test(b)}}}}}}],bd=["$parse",
1689 function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.maxlength||a(c.ngMaxlength)(b),g=Tb(f);c.$observe("maxlength",function(a){f!==a&&(g=Tb(a),f=a,e.$validate())});e.$validators.maxlength=function(a,b){return 0>g||e.$isEmpty(b)||b.length<=g}}}}}],ad=["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.minlength||a(c.ngMinlength)(b),g=Tb(f)||-1;c.$observe("minlength",function(a){f!==a&&(g=Tb(a)||-1,f=a,e.$validate())});
1690 e.$validators.minlength=function(a,b){return e.$isEmpty(b)||b.length>=g}}}}}];C.angular.bootstrap?C.console&&console.log("WARNING: Tried to load AngularJS more than once."):(Fe(),Je(ca),ca.module("ngLocale",[],["$provide",function(a){function b(a){a+="";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,
1691 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(" "),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",
1692 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,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"}})}]),x(function(){Ae(C.document,Uc)}))})(window);
1693 !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 1694 //# sourceMappingURL=angular.min.js.map
1659 1695
1660 1696 ;/*
1661 AngularJS v1.5.5
1662 (c) 2010-2016 Google, Inc. http://angularjs.org
1697 AngularJS v1.7.7
1698 (c) 2010-2018 Google, Inc. http://angularjs.org
1663 1699 License: MIT
1664 1700 */
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 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 ["$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);
1701 (function(n,e){'use strict';function m(d,k,l){var a=l.baseHref(),h=d[0];return function(f,b,c){var d,g;c=c||{};g=c.expires;d=e.isDefined(c.path)?c.path:a;e.isUndefined(b)&&(g="Thu, 01 Jan 1970 00:00:00 GMT",b="");e.isString(g)&&(g=new Date(g));b=encodeURIComponent(f)+"="+encodeURIComponent(b);b=b+(d?";path="+d:"")+(c.domain?";domain="+c.domain:"");b+=g?";expires="+g.toUTCString():"";b+=c.secure?";secure":"";b+=c.samesite?";samesite="+c.samesite:"";c=b.length+1;4096<c&&k.warn("Cookie '"+f+"' possibly not set or overflowed because it was too large ("+
1702 c+" > 4096 bytes)!");h.cookie=b}}e.module("ngCookies",["ng"]).info({angularVersion:"1.7.7"}).provider("$cookies",[function(){var d=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(k,l){return{get:function(a){return k()[a]},getObject:function(a){return(a=this.get(a))?e.fromJson(a):a},getAll:function(){return k()},put:function(a,h,f){l(a,h,f?e.extend({},d,f):d)},putObject:function(a,d,f){this.put(a,e.toJson(d),f)},remove:function(a,h){l(a,void 0,h?e.extend({},d,h):d)}}}]}]);m.$inject=
1703 ["$document","$log","$browser"];e.module("ngCookies").provider("$$cookieWriter",function(){this.$get=m})})(window,window.angular);
1668 1704 //# sourceMappingURL=angular-cookies.min.js.map
1669 1705
1670 1706 ;/*
1671 AngularJS v1.5.5
1672 (c) 2010-2016 Google, Inc. http://angularjs.org
1707 AngularJS v1.7.7
1708 (c) 2010-2018 Google, Inc. http://angularjs.org
1673 1709 License: MIT
1674 1710 */
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 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 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 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 "$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 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 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 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 }};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);
1711 (function(I,b){'use strict';function z(b,h){var d=[],c=b.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[?*])?/g,function(b,c,h,k){b="?"===k||"*?"===k;k="*"===k||"*?"===k;d.push({name:h,optional:b});c=c||"";return(b?"(?:"+c:c+"(?:")+(k?"(.+?)":"([^/]+)")+(b?"?)?":")")}).replace(/([/$*])/g,"\\$1");h.ignoreTrailingSlashes&&(c=c.replace(/\/+$/,"")+"/*");return{keys:d,regexp:new RegExp("^"+c+"(?:[?#]|$)",h.caseInsensitiveMatch?"i":"")}}function A(b){p&&b.get("$route")}function v(u,h,d){return{restrict:"ECA",
1712 terminal:!0,priority:400,transclude:"element",link:function(c,f,g,l,k){function q(){r&&(d.cancel(r),r=null);m&&(m.$destroy(),m=null);s&&(r=d.leave(s),r.done(function(b){!1!==b&&(r=null)}),s=null)}function C(){var g=u.current&&u.current.locals;if(b.isDefined(g&&g.$template)){var g=c.$new(),l=u.current;s=k(g,function(g){d.enter(g,null,s||f).done(function(d){!1===d||!b.isDefined(w)||w&&!c.$eval(w)||h()});q()});m=l.scope=g;m.$emit("$viewContentLoaded");m.$eval(p)}else q()}var m,s,r,w=g.autoscroll,p=g.onload||
1713 "";c.$on("$routeChangeSuccess",C);C()}}}function x(b,h,d){return{restrict:"ECA",priority:-400,link:function(c,f){var g=d.current,l=g.locals;f.html(l.$template);var k=b(f.contents());if(g.controller){l.$scope=c;var q=h(g.controller,l);g.controllerAs&&(c[g.controllerAs]=q);f.data("$ngControllerController",q);f.children().data("$ngControllerController",q)}c[g.resolveAs||"$resolve"]=l;k(c)}}}var D,E,F,G,y=b.module("ngRoute",[]).info({angularVersion:"1.7.7"}).provider("$route",function(){function u(d,
1714 c){return b.extend(Object.create(d),c)}D=b.isArray;E=b.isObject;F=b.isDefined;G=b.noop;var h={};this.when=function(d,c){var f;f=void 0;if(D(c)){f=f||[];for(var g=0,l=c.length;g<l;g++)f[g]=c[g]}else if(E(c))for(g in f=f||{},c)if("$"!==g.charAt(0)||"$"!==g.charAt(1))f[g]=c[g];f=f||c;b.isUndefined(f.reloadOnUrl)&&(f.reloadOnUrl=!0);b.isUndefined(f.reloadOnSearch)&&(f.reloadOnSearch=!0);b.isUndefined(f.caseInsensitiveMatch)&&(f.caseInsensitiveMatch=this.caseInsensitiveMatch);h[d]=b.extend(f,{originalPath:d},
1715 d&&z(d,f));d&&(g="/"===d[d.length-1]?d.substr(0,d.length-1):d+"/",h[g]=b.extend({originalPath:d,redirectTo:d},z(g,f)));return this};this.caseInsensitiveMatch=!1;this.otherwise=function(b){"string"===typeof b&&(b={redirectTo:b});this.when(null,b);return this};p=!0;this.eagerInstantiationEnabled=function(b){return F(b)?(p=b,this):p};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","$browser",function(d,c,f,g,l,k,q,p){function m(a){var e=t.current;n=A();(x=
1716 !B&&n&&e&&n.$$route===e.$$route&&(!n.reloadOnUrl||!n.reloadOnSearch&&b.equals(n.pathParams,e.pathParams)))||!e&&!n||d.$broadcast("$routeChangeStart",n,e).defaultPrevented&&a&&a.preventDefault()}function s(){var a=t.current,e=n;if(x)a.params=e.params,b.copy(a.params,f),d.$broadcast("$routeUpdate",a);else if(e||a){B=!1;t.current=e;var c=g.resolve(e);p.$$incOutstandingRequestCount("$route");c.then(r).then(w).then(function(g){return g&&c.then(y).then(function(c){e===t.current&&(e&&(e.locals=c,b.copy(e.params,
1717 f)),d.$broadcast("$routeChangeSuccess",e,a))})}).catch(function(b){e===t.current&&d.$broadcast("$routeChangeError",e,a,b)}).finally(function(){p.$$completeOutstandingRequest(G,"$route")})}}function r(a){var e={route:a,hasRedirection:!1};if(a)if(a.redirectTo)if(b.isString(a.redirectTo))e.path=v(a.redirectTo,a.params),e.search=a.params,e.hasRedirection=!0;else{var d=c.path(),f=c.search();a=a.redirectTo(a.pathParams,d,f);b.isDefined(a)&&(e.url=a,e.hasRedirection=!0)}else if(a.resolveRedirectTo)return g.resolve(l.invoke(a.resolveRedirectTo)).then(function(a){b.isDefined(a)&&
1718 (e.url=a,e.hasRedirection=!0);return e});return e}function w(a){var b=!0;if(a.route!==t.current)b=!1;else if(a.hasRedirection){var g=c.url(),d=a.url;d?c.url(d).replace():d=c.path(a.path).search(a.search).replace().url();d!==g&&(b=!1)}return b}function y(a){if(a){var e=b.extend({},a.resolve);b.forEach(e,function(a,c){e[c]=b.isString(a)?l.get(a):l.invoke(a,null,null,c)});a=z(a);b.isDefined(a)&&(e.$template=a);return g.all(e)}}function z(a){var e,c;b.isDefined(e=a.template)?b.isFunction(e)&&(e=e(a.params)):
1719 b.isDefined(c=a.templateUrl)&&(b.isFunction(c)&&(c=c(a.params)),b.isDefined(c)&&(a.loadedTemplateUrl=q.valueOf(c),e=k(c)));return e}function A(){var a,e;b.forEach(h,function(d,g){var f;if(f=!e){var h=c.path();f=d.keys;var l={};if(d.regexp)if(h=d.regexp.exec(h)){for(var k=1,p=h.length;k<p;++k){var m=f[k-1],n=h[k];m&&n&&(l[m.name]=n)}f=l}else f=null;else f=null;f=a=f}f&&(e=u(d,{params:b.extend({},c.search(),a),pathParams:a}),e.$$route=d)});return e||h[null]&&u(h[null],{params:{},pathParams:{}})}function v(a,
1720 c){var d=[];b.forEach((a||"").split(":"),function(a,b){if(0===b)d.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),g=f[1];d.push(c[g]);d.push(f[2]||"");delete c[g]}});return d.join("")}var B=!1,n,x,t={routes:h,reload:function(){B=!0;var a={defaultPrevented:!1,preventDefault:function(){this.defaultPrevented=!0;B=!1}};d.$evalAsync(function(){m(a);a.defaultPrevented||s()})},updateParams:function(a){if(this.current&&this.current.$$route)a=b.extend({},this.current.params,a),c.path(v(this.current.$$route.originalPath,
1721 a)),c.search(a);else throw H("norout");}};d.$on("$locationChangeStart",m);d.$on("$locationChangeSuccess",s);return t}]}).run(A),H=b.$$minErr("ngRoute"),p;A.$inject=["$injector"];y.provider("$routeParams",function(){this.$get=function(){return{}}});y.directive("ngView",v);y.directive("ngView",x);v.$inject=["$route","$anchorScroll","$animate"];x.$inject=["$compile","$controller","$route"]})(window,window.angular);
1684 1722 //# sourceMappingURL=angular-route.min.js.map
1685 1723
1686 1724 ;/*
1687 AngularJS v1.5.5
1688 (c) 2010-2016 Google, Inc. http://angularjs.org
1725 AngularJS v1.7.7
1726 (c) 2010-2018 Google, Inc. http://angularjs.org
1689 1727 License: MIT
1690 1728 */
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 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 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 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 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 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 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 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 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);
1729 (function(T,a){'use strict';function M(m,f){f=f||{};a.forEach(f,function(a,d){delete f[d]});for(var d in m)!m.hasOwnProperty(d)||"$"===d.charAt(0)&&"$"===d.charAt(1)||(f[d]=m[d]);return f}var B=a.$$minErr("$resource"),H=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;a.module("ngResource",["ng"]).info({angularVersion:"1.7.7"}).provider("$resource",function(){var m=/^https?:\/\/\[[^\]]*][^/]*/,f=this;this.defaults={stripTrailingSlashes:!0,cancellable:!1,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",
1730 isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};this.$get=["$http","$log","$q","$timeout",function(d,F,G,N){function C(a,d){this.template=a;this.defaults=n({},f.defaults,d);this.urlParams={}}var O=a.noop,r=a.forEach,n=a.extend,R=a.copy,P=a.isArray,D=a.isDefined,x=a.isFunction,I=a.isNumber,y=a.$$encodeUriQuery,S=a.$$encodeUriSegment;C.prototype={setUrlParams:function(a,d,f){var g=this,c=f||g.template,s,h,n="",b=g.urlParams=Object.create(null);r(c.split(/\W/),function(a){if("hasOwnProperty"===
1731 a)throw B("badname");!/^\d+$/.test(a)&&a&&(new RegExp("(^|[^\\\\]):"+a+"(\\W|$)")).test(c)&&(b[a]={isQueryParamValue:(new RegExp("\\?.*=:"+a+"(?:\\W|$)")).test(c)})});c=c.replace(/\\:/g,":");c=c.replace(m,function(b){n=b;return""});d=d||{};r(g.urlParams,function(b,a){s=d.hasOwnProperty(a)?d[a]:g.defaults[a];D(s)&&null!==s?(h=b.isQueryParamValue?y(s,!0):S(s),c=c.replace(new RegExp(":"+a+"(\\W|$)","g"),function(b,a){return h+a})):c=c.replace(new RegExp("(/?):"+a+"(\\W|$)","g"),function(b,a,e){return"/"===
1732 e.charAt(0)?e:a+e})});g.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");a.url=n+c.replace(/\/(\\|%5C)\./,"/.");r(d,function(b,c){g.urlParams[c]||(a.params=a.params||{},a.params[c]=b)})}};return function(m,y,z,g){function c(b,c){var d={};c=n({},y,c);r(c,function(c,f){x(c)&&(c=c(b));var e;if(c&&c.charAt&&"@"===c.charAt(0)){e=b;var k=c.substr(1);if(null==k||""===k||"hasOwnProperty"===k||!H.test("."+k))throw B("badmember",k);for(var k=k.split("."),h=0,
1733 n=k.length;h<n&&a.isDefined(e);h++){var g=k[h];e=null!==e?e[g]:void 0}}else e=c;d[f]=e});return d}function s(b){return b.resource}function h(b){M(b||{},this)}var Q=new C(m,g);z=n({},f.defaults.actions,z);h.prototype.toJSON=function(){var b=n({},this);delete b.$promise;delete b.$resolved;delete b.$cancelRequest;return b};r(z,function(b,a){var f=!0===b.hasBody||!1!==b.hasBody&&/^(POST|PUT|PATCH)$/i.test(b.method),g=b.timeout,m=D(b.cancellable)?b.cancellable:Q.defaults.cancellable;g&&!I(g)&&(F.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."),
1734 delete b.timeout,g=null);h[a]=function(e,k,J,y){function z(a){p.catch(O);null!==u&&u.resolve(a)}var K={},v,t,w;switch(arguments.length){case 4:w=y,t=J;case 3:case 2:if(x(k)){if(x(e)){t=e;w=k;break}t=k;w=J}else{K=e;v=k;t=J;break}case 1:x(e)?t=e:f?v=e:K=e;break;case 0:break;default:throw B("badargs",arguments.length);}var E=this instanceof h,l=E?v:b.isArray?[]:new h(v),q={},C=b.interceptor&&b.interceptor.request||void 0,D=b.interceptor&&b.interceptor.requestError||void 0,F=b.interceptor&&b.interceptor.response||
1735 s,H=b.interceptor&&b.interceptor.responseError||G.reject,I=t?function(a){t(a,A.headers,A.status,A.statusText)}:void 0;w=w||void 0;var u,L,A;r(b,function(a,b){switch(b){default:q[b]=R(a);case "params":case "isArray":case "interceptor":case "cancellable":}});!E&&m&&(u=G.defer(),q.timeout=u.promise,g&&(L=N(u.resolve,g)));f&&(q.data=v);Q.setUrlParams(q,n({},c(v,b.params||{}),K),b.url);var p=G.resolve(q).then(C).catch(D).then(d),p=p.then(function(c){var e=c.data;if(e){if(P(e)!==!!b.isArray)throw B("badcfg",
1736 a,b.isArray?"array":"object",P(e)?"array":"object",q.method,q.url);if(b.isArray)l.length=0,r(e,function(a){"object"===typeof a?l.push(new h(a)):l.push(a)});else{var d=l.$promise;M(e,l);l.$promise=d}}c.resource=l;A=c;return F(c)},function(a){a.resource=l;A=a;return H(a)}),p=p["finally"](function(){l.$resolved=!0;!E&&m&&(l.$cancelRequest=O,N.cancel(L),u=L=q.timeout=null)});p.then(I,w);return E?p:(l.$promise=p,l.$resolved=!1,m&&(l.$cancelRequest=z),l)};h.prototype["$"+a]=function(b,c,d){x(b)&&(d=c,c=
1737 b,b={});b=h[a].call(this,b,this,c,d);return b.$promise||b}});return h}}]})})(window,window.angular);
1700 1738 //# sourceMappingURL=angular-resource.min.js.map
1701 1739
1702 1740 ;/*
1703 AngularJS v1.5.5
1704 (c) 2010-2016 Google, Inc. http://angularjs.org
1741 AngularJS v1.7.7
1742 (c) 2010-2018 Google, Inc. http://angularjs.org
1705 1743 License: MIT
1706 1744 */
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 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 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 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 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 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 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 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 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 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 ["$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 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 "$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 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 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 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 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 (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 (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 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 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 ["$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 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 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 {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 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 ["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 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 "$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 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 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 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 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 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 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 !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 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 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 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 (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 ["$$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 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 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 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 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 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 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 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 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 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);
1745 (function(Y,z){'use strict';function Fa(a,b,c){if(!a)throw Pa("areq",b||"?",c||"required");return a}function Ga(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;Z(a)&&(a=a.join(" "));Z(b)&&(b=b.join(" "));return a+" "+b}function Qa(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function $(a,b,c){var d="";a=Z(a)?a:a&&G(a)&&a.length?a.split(/\s+/):[];s(a,function(a,k){a&&0<a.length&&(d+=0<k?" ":"",d+=c?b+a:a+b)});return d}function Ha(a){if(a instanceof A)switch(a.length){case 0:return a;
1746 case 1:if(1===a[0].nodeType)return a;break;default:return A(va(a))}if(1===a.nodeType)return A(a)}function va(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 Ra(a,b,c){s(b,function(b){a.addClass(b,c)})}function Sa(a,b,c){s(b,function(b){a.removeClass(b,c)})}function aa(a){return function(b,c){c.addClass&&(Ra(a,b,c.addClass),c.addClass=null);c.removeClass&&(Sa(a,b,c.removeClass),c.removeClass=null)}}function pa(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
1747 N;a.domOperation=function(){a.$$domOperationFired=!0;b();b=N};a.$$prepared=!0}return a}function ha(a,b){Ia(a,b);Ja(a,b)}function Ia(a,b){b.from&&(a.css(b.from),b.from=null)}function Ja(a,b){b.to&&(a.css(b.to),b.to=null)}function T(a,b,c){var d=b.options||{};c=c.options||{};var f=(d.addClass||"")+" "+(c.addClass||""),k=(d.removeClass||"")+" "+(c.removeClass||"");a=Ta(a.attr("class"),f,k);c.preparationClasses&&(d.preparationClasses=ba(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
1748 f=d.domOperation!==N?d.domOperation:null;wa(d,c);f&&(d.domOperation=f);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 Ta(a,b,c){function d(a){G(a)&&(a=a.split(" "));var c={};s(a,function(a){a.length&&(c[a]=!0)});return c}var f={};a=d(a);b=d(b);s(b,function(a,c){f[c]=1});c=d(c);s(c,function(a,c){f[c]=1===f[c]?null:-1});var k={addClass:"",removeClass:""};s(f,function(c,b){var d,f;1===c?(d="addClass",
1749 f=!a[b]||a[b+"-remove"]):-1===c&&(d="removeClass",f=a[b]||a[b+"-add"]);f&&(k[d].length&&(k[d]+=" "),k[d]+=b)});return k}function K(a){return a instanceof A?a[0]:a}function Ua(a,b,c,d){a="";c&&(a=$(c,"ng-",!0));d.addClass&&(a=ba(a,$(d.addClass,"-add")));d.removeClass&&(a=ba(a,$(d.removeClass,"-remove")));a.length&&(d.preparationClasses=a,b.addClass(a))}function xa(a,b){var c=b?"paused":"",d=ca+"PlayState";ma(a,[d,c]);return[d,c]}function ma(a,b){a.style[b[0]]=b[1]}function ba(a,b){return a?b?a+" "+
1750 b:a:b}function Ka(a,b,c){var d=Object.create(null),f=a.getComputedStyle(b)||{};s(c,function(a,c){var b=f[a];if(b){var L=b.charAt(0);if("-"===L||"+"===L||0<=L)b=Va(b);0===b&&(b=null);d[c]=b}});return d}function Va(a){var b=0;a=a.split(/\s*,\s*/);s(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 ya(a){return 0===a||null!=a}function La(a,b){var c=M,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function Ma(a,b,c){s(c,
1751 function(c){a[c]=za(a[c])?a[c]:b.style.getPropertyValue(c)})}var M,Aa,ca,Ba;void 0===Y.ontransitionend&&void 0!==Y.onwebkittransitionend?(M="WebkitTransition",Aa="webkitTransitionEnd transitionend"):(M="transition",Aa="transitionend");void 0===Y.onanimationend&&void 0!==Y.onwebkitanimationend?(ca="WebkitAnimation",Ba="webkitAnimationEnd animationend"):(ca="animation",Ba="animationend");var qa=ca+"Delay",Ca=ca+"Duration",na=M+"Delay",Na=M+"Duration",Pa=z.$$minErr("ng"),ra={blockTransitions:function(a,
1752 b){var c=b?"-"+b+"s":"";ma(a,[na,c]);return[na,c]}},Wa={transitionDuration:Na,transitionDelay:na,transitionProperty:M+"Property",animationDuration:Ca,animationDelay:qa,animationIterationCount:ca+"IterationCount"},Xa={transitionDuration:Na,transitionDelay:na,animationDuration:Ca,animationDelay:qa},Da,wa,s,Z,za,sa,Ea,ta,G,R,A,N;z.module("ngAnimate",[],function(){N=z.noop;Da=z.copy;wa=z.extend;A=z.element;s=z.forEach;Z=z.isArray;G=z.isString;ta=z.isObject;R=z.isUndefined;za=z.isDefined;Ea=z.isFunction;
1753 sa=z.isElement}).info({angularVersion:"1.7.7"}).directive("ngAnimateSwap",["$animate",function(a){return{restrict:"A",transclude:"element",terminal:!0,priority:550,link:function(b,c,d,f,k){var e,Q;b.$watchCollection(d.ngAnimateSwap||d["for"],function(b){e&&a.leave(e);Q&&(Q.$destroy(),Q=null);(b||0===b)&&k(function(b,d){e=b;Q=d;a.enter(b,null,c)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function f(a){c.data("$$ngAnimateChildren","on"===a||"true"===
1754 a)}var k=d.ngAnimateChildren;G(k)&&0===k.length?c.data("$$ngAnimateChildren",!0):(f(a(k)(b)),d.$observe("ngAnimateChildren",f))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),e=0;e<b.length;e++)b[e]();f||a(function(){f||c()})}}var d,f;d=b.queue=[];b.waitUntilQuiet=function(b){f&&f();f=a(function(){f=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){return{addClass:a.addClass,
1755 removeClass:a.removeClass,from:a.from,to:a.to}}function c(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);s(a,function(a){b[a]=!0});return b}function d(a,b){if(a&&b){var d=c(b);return a.split(" ").some(function(a){return d[a]})}}function f(a,b,c){return e[a].some(function(a){return a(b,c)})}function k(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var e=this.rules={skip:[],cancel:[],join:[]};e.join.push(function(a,b){return!a.structural&&k(a)});
1756 e.skip.push(function(a,b){return!a.structural&&!k(a)});e.skip.push(function(a,b){return"leave"===b.event&&a.structural});e.skip.push(function(a,b){return b.structural&&2===b.state&&!a.structural});e.cancel.push(function(a,b){return b.structural&&a.structural});e.cancel.push(function(a,b){return 2===b.state&&a.structural});e.cancel.push(function(a,b){if(b.structural)return!1;var c=a.addClass,f=a.removeClass,k=b.addClass,e=b.removeClass;return R(c)&&R(f)||R(k)&&R(e)?!1:d(c,e)||d(f,k)});this.$get=["$$rAF",
1757 "$rootScope","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow","$$isDocumentHidden",function(c,d,e,C,U,oa,H,u,t,I,da){function ia(a){O.delete(a.target)}function v(){var a=!1;return function(b){a?b():d.$$postDigest(function(){a=!0;b()})}}function ua(a,b,c){var g=[],l=m[c];l&&s(l,function(l){Oa.call(l.node,b)?g.push(l.callback):"leave"===c&&Oa.call(l.node,a)&&g.push(l.callback)});return g}function h(a,b,c){var l=va(b);return a.filter(function(a){return!(a.node===
1758 l&&(!c||a.callback===c))})}function q(a,J,w){function e(a,b,l,g){u(function(){var a=ua(ia,m,b);a.length?c(function(){s(a,function(a){a(h,l,g)});"close"!==l||m.parentNode||D.off(m)}):"close"!==l||m.parentNode||D.off(m)});a.progress(b,l,g)}function I(a){var b=h,c=n;c.preparationClasses&&(b.removeClass(c.preparationClasses),c.preparationClasses=null);c.activeClasses&&(b.removeClass(c.activeClasses),c.activeClasses=null);W(h,n);ha(h,n);n.domOperation();q.complete(!a)}var n=Da(w),h=Ha(a),m=K(h),ia=m&&
1759 m.parentNode,n=pa(n),q=new H,u=v();Z(n.addClass)&&(n.addClass=n.addClass.join(" "));n.addClass&&!G(n.addClass)&&(n.addClass=null);Z(n.removeClass)&&(n.removeClass=n.removeClass.join(" "));n.removeClass&&!G(n.removeClass)&&(n.removeClass=null);n.from&&!ta(n.from)&&(n.from=null);n.to&&!ta(n.to)&&(n.to=null);if(!(B&&m&&fa(m,J,w)&&Ya(m,n)))return I(),q;var x=0<=["enter","move","leave"].indexOf(J),r=da(),P=r||O.get(m);w=!P&&y.get(m)||{};var p=!!w.state;P||p&&1===w.state||(P=!E(m,ia,J));if(P)return r&&
1760 e(q,J,"start",b(n)),I(),r&&e(q,J,"close",b(n)),q;x&&F(m);r={structural:x,element:h,event:J,addClass:n.addClass,removeClass:n.removeClass,close:I,options:n,runner:q};if(p){if(f("skip",r,w)){if(2===w.state)return I(),q;T(h,w,r);return w.runner}if(f("cancel",r,w))if(2===w.state)w.runner.end();else if(w.structural)w.close();else return T(h,w,r),w.runner;else if(f("join",r,w))if(2===w.state)T(h,r,{});else return Ua(t,h,x?J:null,n),J=r.event=w.event,n=T(h,w,r),w.runner}else T(h,r,{});(p=r.structural)||
1761 (p="animate"===r.event&&0<Object.keys(r.options.to||{}).length||k(r));if(!p)return I(),g(m),q;var C=(w.counter||0)+1;r.counter=C;l(m,1,r);d.$$postDigest(function(){h=Ha(a);var c=y.get(m),d=!c,c=c||{},t=0<(h.parent()||[]).length&&("animate"===c.event||c.structural||k(c));if(d||c.counter!==C||!t){d&&(W(h,n),ha(h,n));if(d||x&&c.event!==J)n.domOperation(),q.end();t||g(m)}else J=!c.structural&&k(c,!0)?"setClass":c.event,l(m,2),c=oa(h,J,c.options),q.setHost(c),e(q,J,"start",b(n)),c.done(function(a){I(!a);
1762 (a=y.get(m))&&a.counter===C&&g(m);e(q,J,"close",b(n))})});return q}function F(a){a=a.querySelectorAll("[data-ng-animate]");s(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate"),10),c=y.get(a);if(c)switch(b){case 2:c.runner.end();case 1:y.delete(a)}})}function g(a){a.removeAttribute("data-ng-animate");y.delete(a)}function E(a,b,c){c=C[0].body;var l=K(e),g=a===c||"HTML"===a.nodeName,d=a===l,t=!1,m=O.get(a),h;for((a=A.data(a,"$ngAnimatePin"))&&(b=K(a));b;){d||(d=b===l);if(1!==b.nodeType)break;
1763 a=y.get(b)||{};if(!t){var f=O.get(b);if(!0===f&&!1!==m){m=!0;break}else!1===f&&(m=!1);t=a.structural}if(R(h)||!0===h)a=A.data(b,"$$ngAnimateChildren"),za(a)&&(h=a);if(t&&!1===h)break;g||(g=b===c);if(g&&d)break;if(!d&&(a=A.data(b,"$ngAnimatePin"))){b=K(a);continue}b=b.parentNode}return(!t||h)&&!0!==m&&d&&g}function l(a,b,c){c=c||{};c.state=b;a.setAttribute("data-ng-animate",b);c=(b=y.get(a))?wa(b,c):c;y.set(a,c)}var y=new U,O=new U,B=null,P=d.$watch(function(){return 0===u.totalPendingRequests},function(a){a&&
1764 (P(),d.$$postDigest(function(){d.$$postDigest(function(){null===B&&(B=!0)})}))}),m=Object.create(null);U=a.customFilter();var la=a.classNameFilter();I=function(){return!0};var fa=U||I,Ya=la?function(a,b){var c=[a.getAttribute("class"),b.addClass,b.removeClass].join(" ");return la.test(c)}:I,W=aa(t),Oa=Y.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)},D={on:function(a,b,c){var l=va(b);m[a]=m[a]||[];m[a].push({node:l,callback:c});A(b).on("$destroy",function(){y.get(l)||
1765 D.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||G(arguments[0])){var l=m[a];l&&(m[a]=1===arguments.length?null:h(l,b,c))}else for(l in b=arguments[0],m)m[l]=h(m[l],b)},pin:function(a,b){Fa(sa(a),"element","not an element");Fa(sa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,l){c=c||{};c.domOperation=l;return q(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!B;else if(sa(a)){var l=K(a);if(1===c)b=!O.get(l);else{if(!O.has(l))A(a).on("$destroy",
1766 ia);O.set(l,!b)}}else b=B=!!a;return b}};return D}]}]).provider("$$animateCache",function(){var a=0,b=Object.create(null);this.$get=[function(){return{cacheKey:function(b,d,f,k){var e=b.parentNode;b=[e.$$ngAnimateParentKey||(e.$$ngAnimateParentKey=++a),d,b.getAttribute("class")];f&&b.push(f);k&&b.push(k);return b.join(" ")},containsCachedAnimationWithoutDuration:function(a){return(a=b[a])&&!a.isValid||!1},flush:function(){b=Object.create(null)},count:function(a){return(a=b[a])?a.total:0},get:function(a){return(a=
1767 b[a])&&a.value},put:function(a,d,f){b[a]?(b[a].total++,b[a].value=d):b[a]={total:1,value:d,isValid:f}}}}]}).provider("$$animation",["$animateProvider",function(a){var b=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$Map","$$rAFScheduler","$$animateCache",function(a,d,f,k,e,Q,L){function x(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,t=d.parentNode;f.set(d,a);for(var h;t;){if(h=f.get(t)){h.processed||(h=b(h));break}t=t.parentNode}(h||
1768 c).children.push(a);return a}var c={children:[]},d,f=new e;for(d=0;d<a.length;d++){var da=a[d];f.set(da.domNode,a[d]={domNode:da.domNode,element:da.element,fn:da.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 t=0,f=[];for(d=0;d<c.length;d++){var g=c[d];0>=a&&(a=t,t=0,b.push(f),f=[]);f.push(g);g.children.forEach(function(a){t++;c.push(a)});a--}f.length&&b.push(f);return b}(c)}var C=[],U=aa(a);return function(e,
1769 H,u){function t(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function I(a){var b=[],c={};s(a,function(a,d){var l=K(a.element),g=0<=["enter","move"].indexOf(a.event),l=a.structural?t(l):[];if(l.length){var f=g?"to":"from";s(l,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][f]={animationID:d,element:A(a)}})}else b.push(a)});var d={},g={};s(c,function(c,
1770 t){var f=c.from,e=c.to;if(f&&e){var h=a[f.animationID],k=a[e.animationID],E=f.animationID.toString();if(!g[E]){var I=g[E]={structural:!0,beforeStart:function(){h.beforeStart();k.beforeStart()},close:function(){h.close();k.close()},classes:da(h.classes,k.classes),from:h,to:k,anchors:[]};I.classes.length?b.push(I):(b.push(h),b.push(k))}g[E].anchors.push({out:f.element,"in":e.element})}else f=f?f.animationID:e.animationID,e=f.toString(),d[e]||(d[e]=!0,b.push(a[f]))});return b}function da(a,b){a=a.split(" ");
1771 b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var g=a[d];if("ng-"!==g.substring(0,3))for(var t=0;t<b.length;t++)if(g===b[t]){c.push(g);break}}return c.join(" ")}function ia(a){for(var c=b.length-1;0<=c;c--){var d=f.get(b[c])(a);if(d)return d}}function v(a,b){function c(a){(a=a.data("$$animationRunner"))&&a.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function ua(){var a=e.data("$$animationRunner");!a||"leave"===H&&u.$$domOperationFired||a.end()}function h(b){e.off("$destroy",
1772 ua);e.removeData("$$animationRunner");U(e,u);ha(e,u);u.domOperation();E&&a.removeClass(e,E);F.complete(!b)}u=pa(u);var q=0<=["enter","move","leave"].indexOf(H),F=new k({end:function(){h()},cancel:function(){h(!0)}});if(!b.length)return h(),F;var g=Ga(e.attr("class"),Ga(u.addClass,u.removeClass)),E=u.tempClasses;E&&(g+=" "+E,u.tempClasses=null);q&&e.data("$$animatePrepareClasses","ng-"+H+"-prepare");e.data("$$animationRunner",F);C.push({element:e,classes:g,event:H,structural:q,options:u,beforeStart:function(){E=
1773 (E?E+" ":"")+"ng-animate";a.addClass(e,E);var b=e.data("$$animatePrepareClasses");b&&a.removeClass(e,b)},close:h});e.on("$destroy",ua);if(1<C.length)return F;d.$$postDigest(function(){var b=[];s(C,function(a){a.element.data("$$animationRunner")?b.push(a):a.close()});C.length=0;var d=I(b),g=[];s(d,function(a){var b=a.from?a.from.element:a.element,c=u.addClass,d=L.cacheKey(b[0],a.event,(c?c+" ":"")+"ng-animate",u.removeClass);g.push({element:b,domNode:K(b),fn:function(){var b,c=a.close;if(L.containsCachedAnimationWithoutDuration(d))c();
1774 else{a.beforeStart();if((a.anchors?a.from.element||a.to.element:a.element).data("$$animationRunner")){var g=ia(a);g&&(b=g.start)}b?(b=b(),b.done(function(a){c(!a)}),v(a,b)):c()}}})});for(var d=x(g),t=0;t<d.length;t++)for(var f=d[t],e=0;e<f.length;e++){var h=f[e],k=h.element;d[t][e]=h.fn;0===t?k.removeData("$$animatePrepareClasses"):(h=k.data("$$animatePrepareClasses"))&&a.addClass(k,h)}Q(d)});return F}}]}]).provider("$animateCss",["$animateProvider",function(a){this.$get=["$window","$$jqLite","$$AnimateRunner",
1775 "$timeout","$$animateCache","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,c,d,f,k,e,Q,L,x){function C(d,f,e,x){var v,s="stagger-"+e;0<k.count(e)&&(v=k.get(s),v||(f=$(f,"-stagger"),c.addClass(d,f),v=Ka(a,d,x),v.animationDuration=Math.max(v.animationDuration,0),v.transitionDuration=Math.max(v.transitionDuration,0),c.removeClass(d,f),k.put(s,v,!0)));return v||{}}function U(a){u.push(a);L.waitUntilQuiet(function(){k.flush();for(var a=e(),b=0;b<u.length;b++)u[b](a);u.length=0})}
1776 function z(c,d,f,e){d=k.get(f);d||(d=Ka(a,c,Wa),"infinite"===d.animationIterationCount&&(d.animationIterationCount=1));k.put(f,d,e||0<d.transitionDuration||0<d.animationDuration);c=d;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 H=aa(c),u=[];return function(a,b){function e(){v()}function L(){v(!0)}function v(b){if(!(P||la&&m)){P=!0;m=!1;V&&!g.$$skipPreparationClasses&&
1777 c.removeClass(a,V);ba&&c.removeClass(a,ba);xa(l,!1);ra.blockTransitions(l,!1);s(y,function(a){l.style[a[0]]=""});H(a,g);ha(a,g);Object.keys(E).length&&s(E,function(a,b){a?l.style.setProperty(b,a):l.style.removeProperty(b)});if(g.onDone)g.onDone();w&&w.length&&a.off(w.join(" "),q);var d=a.data("$$animateCss");d&&(f.cancel(d[0].timer),a.removeData("$$animateCss"));fa&&fa.complete(!b)}}function u(a){p.blockTransition&&ra.blockTransitions(l,a);p.blockKeyframeAnimation&&xa(l,!!a)}function h(){fa=new d({end:e,
1778 cancel:L});U(N);v();return{$$willAnimate:!1,start:function(){return fa},end:e}}function q(a){a.stopPropagation();var b=a.originalEvent||a;b.target===l&&(a=b.$manualTimeStamp||Date.now(),b=parseFloat(b.elapsedTime.toFixed(3)),Math.max(a-J,0)>=G&&b>=D&&(la=!0,v()))}function F(){function b(){if(!P){u(!1);s(y,function(a){l.style[a[0]]=a[1]});H(a,g);c.addClass(a,ba);if(p.recalculateTimingStyles){T=l.getAttribute("class")+" "+V;ka=k.cacheKey(l,ja,g.addClass,g.removeClass);r=z(l,T,ka,!1);ga=r.maxDelay;W=
1779 Math.max(ga,0);D=r.maxDuration;if(0===D){v();return}p.hasTransitions=0<r.transitionDuration;p.hasAnimations=0<r.animationDuration}p.applyAnimationDelay&&(ga="boolean"!==typeof g.delay&&ya(g.delay)?parseFloat(g.delay):ga,W=Math.max(ga,0),r.animationDelay=ga,ea=[qa,ga+"s"],y.push(ea),l.style[ea[0]]=ea[1]);G=1E3*W;R=1E3*D;if(g.easing){var e,h=g.easing;p.hasTransitions&&(e=M+"TimingFunction",y.push([e,h]),l.style[e]=h);p.hasAnimations&&(e=ca+"TimingFunction",y.push([e,h]),l.style[e]=h)}r.transitionDuration&&
1780 w.push(Aa);r.animationDuration&&w.push(Ba);J=Date.now();var m=G+1.5*R;e=J+m;var h=a.data("$$animateCss")||[],F=!0;if(h.length){var n=h[0];(F=e>n.expectedEndTime)?f.cancel(n.timer):h.push(v)}F&&(m=f(d,m,!1),h[0]={timer:m,expectedEndTime:e},h.push(v),a.data("$$animateCss",h));if(w.length)a.on(w.join(" "),q);g.to&&(g.cleanupStyles&&Ma(E,l,Object.keys(g.to)),Ja(a,g))}}function d(){var b=a.data("$$animateCss");if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData("$$animateCss")}}if(!P)if(l.parentNode){var e=
1781 function(a){if(la)m&&a&&(m=!1,v());else if(m=!a,r.animationDuration)if(a=xa(l,m),m)y.push(a);else{var b=y,c=b.indexOf(a);0<=a&&b.splice(c,1)}},h=0<aa&&(r.transitionDuration&&0===X.transitionDuration||r.animationDuration&&0===X.animationDuration)&&Math.max(X.animationDelay,X.transitionDelay);h?f(b,Math.floor(h*aa*1E3),!1):b();A.resume=function(){e(!0)};A.pause=function(){e(!1)}}else v()}var g=b||{};g.$$prepared||(g=pa(Da(g)));var E={},l=K(a);if(!l||!l.parentNode||!x.enabled())return h();var y=[],O=
1782 a.attr("class"),B=Qa(g),P,m,la,fa,A,W,G,D,R,J,w=[];if(0===g.duration||!Q.animations&&!Q.transitions)return h();var ja=g.event&&Z(g.event)?g.event.join(" "):g.event,Y=ja&&g.structural,n="",S="";Y?n=$(ja,"ng-",!0):ja&&(n=ja);g.addClass&&(S+=$(g.addClass,"-add"));g.removeClass&&(S.length&&(S+=" "),S+=$(g.removeClass,"-remove"));g.applyClassesEarly&&S.length&&H(a,g);var V=[n,S].join(" ").trim(),T=O+" "+V,O=B.to&&0<Object.keys(B.to).length;if(!(0<(g.keyframeStyle||"").length||O||V))return h();var X,ka=
1783 k.cacheKey(l,ja,g.addClass,g.removeClass);if(k.containsCachedAnimationWithoutDuration(ka))return V=null,h();0<g.stagger?(B=parseFloat(g.stagger),X={transitionDelay:B,animationDelay:B,transitionDuration:0,animationDuration:0}):X=C(l,V,ka,Xa);g.$$skipPreparationClasses||c.addClass(a,V);g.transitionStyle&&(B=[M,g.transitionStyle],ma(l,B),y.push(B));0<=g.duration&&(B=0<l.style[M].length,B=La(g.duration,B),ma(l,B),y.push(B));g.keyframeStyle&&(B=[ca,g.keyframeStyle],ma(l,B),y.push(B));var aa=X?0<=g.staggerIndex?
1784 g.staggerIndex:k.count(ka):0;(n=0===aa)&&!g.skipBlocking&&ra.blockTransitions(l,9999);var r=z(l,T,ka,!Y),ga=r.maxDelay;W=Math.max(ga,0);D=r.maxDuration;var p={};p.hasTransitions=0<r.transitionDuration;p.hasAnimations=0<r.animationDuration;p.hasTransitionAll=p.hasTransitions&&"all"===r.transitionProperty;p.applyTransitionDuration=O&&(p.hasTransitions&&!p.hasTransitionAll||p.hasAnimations&&!p.hasTransitions);p.applyAnimationDuration=g.duration&&p.hasAnimations;p.applyTransitionDelay=ya(g.delay)&&(p.applyTransitionDuration||
1785 p.hasTransitions);p.applyAnimationDelay=ya(g.delay)&&p.hasAnimations;p.recalculateTimingStyles=0<S.length;if(p.applyTransitionDuration||p.applyAnimationDuration)D=g.duration?parseFloat(g.duration):D,p.applyTransitionDuration&&(p.hasTransitions=!0,r.transitionDuration=D,B=0<l.style[M+"Property"].length,y.push(La(D,B))),p.applyAnimationDuration&&(p.hasAnimations=!0,r.animationDuration=D,y.push([Ca,D+"s"]));if(0===D&&!p.recalculateTimingStyles)return h();var ba=$(V,"-active");if(null!=g.delay){var ea;
1786 "boolean"!==typeof g.delay&&(ea=parseFloat(g.delay),W=Math.max(ea,0));p.applyTransitionDelay&&y.push([na,ea+"s"]);p.applyAnimationDelay&&y.push([qa,ea+"s"])}null==g.duration&&0<r.transitionDuration&&(p.recalculateTimingStyles=p.recalculateTimingStyles||n);G=1E3*W;R=1E3*D;g.skipBlocking||(p.blockTransition=0<r.transitionDuration,p.blockKeyframeAnimation=0<r.animationDuration&&0<X.animationDelay&&0===X.animationDuration);g.from&&(g.cleanupStyles&&Ma(E,l,Object.keys(g.from)),Ia(a,g));p.blockTransition||
1787 p.blockKeyframeAnimation?u(D):g.skipBlocking||ra.blockTransitions(l,!1);return{$$willAnimate:!0,end:e,start:function(){if(!P)return A={end:e,cancel:L,resume:null,pause:null},fa=new d(A),U(F),fa}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,f,k,e,Q){function L(a){return a.replace(/\bng-\S+\b/g,"")}function x(a,b){G(a)&&
1788 (a=a.split(" "));G(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function C(c,e,f){function k(a){var b={},c=K(a).getBoundingClientRect();s(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=H.scrollTop;break;case "left":d+=H.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function v(){var c=L(f.attr("class")||""),d=x(c,q),c=x(q,c),d=a(h,{to:k(f),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?
1789 d:null}function C(){h.remove();e.removeClass("ng-animate-shim");f.removeClass("ng-animate-shim")}var h=A(K(e).cloneNode(!0)),q=L(h.attr("class")||"");e.addClass("ng-animate-shim");f.addClass("ng-animate-shim");h.addClass("ng-anchor");u.append(h);var F;c=function(){var c=a(h,{addClass:"ng-anchor-out",delay:!0,from:k(e)});return c.$$willAnimate?c:null}();if(!c&&(F=v(),!F))return C();var g=c||F;return{start:function(){function a(){c&&c.end()}var b,c=g.start();c.done(function(){c=null;if(!F&&(F=v()))return c=
1790 F.start(),c.done(function(){c=null;C();b.complete()}),c;C();b.complete()});return b=new d({end:a,cancel:a})}}}function z(a,b,c,e){var f=oa(a,N),k=oa(b,N),h=[];s(e,function(a){(a=C(c,a.out,a["in"]))&&h.push(a)});if(f||k||0!==h.length)return{start:function(){function a(){s(b,function(a){a.end()})}var b=[];f&&b.push(f.start());k&&b.push(k.start());s(h,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 oa(c){var d=c.element,e=c.options||
1791 {};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=ba(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!k.animations&&!k.transitions)return N;var H=Q[0].body;c=K(f);var u=A(c.parentNode&&11===c.parentNode.nodeType||H.contains(c)?c:H);return function(a){return a.from&&a.to?z(a.from,a.to,a.classes,a.anchors):oa(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=
1792 ["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function f(c){c=Z(c)?c:c.split(" ");for(var d=[],f={},k=0;k<c.length;k++){var s=c[k],z=a.$$registeredAnimations[s];z&&!f[s]&&(d.push(b.get(z)),f[s]=!0)}return d}var k=aa(d);return function(a,b,d,x){function C(){x.domOperation();k(a,x)}function z(a,b,d,f,e){switch(d){case "animate":b=[b,f.from,f.to,e];break;case "setClass":b=[b,t,I,e];break;case "addClass":b=[b,t,e];break;case "removeClass":b=[b,I,e];break;default:b=[b,e]}b.push(f);if(a=a.apply(a,
1793 b))if(Ea(a.start)&&(a=a.start()),a instanceof c)a.done(e);else if(Ea(a))return a;return N}function A(a,b,d,e,f){var h=[];s(e,function(e){var l=e[f];l&&h.push(function(){var e,f,h=!1,k=function(a){h||(h=!0,(f||N)(a),e.complete(!a))};e=new c({end:function(){k()},cancel:function(){k(!0)}});f=z(l,a,b,d,function(a){k(!1===a)});return e})});return h}function H(a,b,d,e,f){var h=A(a,b,d,e,f);if(0===h.length){var k,q;"beforeSetClass"===f?(k=A(a,"removeClass",d,e,"beforeRemoveClass"),q=A(a,"addClass",d,e,"beforeAddClass")):
1794 "setClass"===f&&(k=A(a,"removeClass",d,e,"removeClass"),q=A(a,"addClass",d,e,"addClass"));k&&(h=h.concat(k));q&&(h=h.concat(q))}if(0!==h.length)return function(a){var b=[];h.length&&s(h,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){s(b,function(b){a?b.cancel():b.end()})}}}var u=!1;3===arguments.length&&ta(d)&&(x=d,d=null);x=pa(x);d||(d=a.attr("class")||"",x.addClass&&(d+=" "+x.addClass),x.removeClass&&(d+=" "+x.removeClass));var t=x.addClass,I=x.removeClass,G=f(d),K,v;if(G.length){var M,
1795 h;"leave"===b?(h="leave",M="afterLeave"):(h="before"+b.charAt(0).toUpperCase()+b.substr(1),M=b);"enter"!==b&&"move"!==b&&(K=H(a,b,x,G,h));v=H(a,b,x,G,M)}if(K||v){var q;return{$$willAnimate:!0,end:function(){q?q.end():(u=!0,C(),ha(a,x),q=new c,q.complete(!0));return q},start:function(){function b(c){u=!0;C();ha(a,x);q.complete(c)}if(q)return q;q=new c;var d,f=[];K&&f.push(function(a){d=K(a)});f.length?f.push(function(a){C();a(!0)}):C();v&&f.push(function(a){d=v(a)});q.setHost({end:function(){u||((d||
1796 N)(void 0),b(void 0))},cancel:function(){u||((d||N)(!0),b(!0))}});c.chain(f,b);return q}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),e=d(a.to);if(b||e)return{start:function(){function a(){return function(){s(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());e&&
1797 d.push(e.start());c.all(d,function(a){f.complete(a)});var f=new c({end:a(),cancel:a()});return f}}}else return d(a)}}]}])})(window,window.angular);
1757 1798 //# sourceMappingURL=angular-animate.min.js.map
1758 1799
1759 1800 ;/*
1760 1801 * angular-ui-bootstrap
1761 1802 * http://angular-ui.github.io/bootstrap/
1762 1803
1763 1804 * Version: 1.3.2 - 2016-04-14
1764 1805 * License: MIT
1765 1806 */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 1807 },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 1808 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 1809 }]),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 1810 ;/*!
1770 1811 * State-based routing for AngularJS
1771 1812 * @version v1.0.0-beta.3
1772 1813 * @link https://ui-router.github.io
1773 1814 * @license MIT License, http://www.opensource.org/licenses/MIT
1774 1815 */
1775 1816 !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 1817 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 1818 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 1819 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 1820 //# sourceMappingURL=angular-ui-router.min.js.map
1780 1821 ;angular.module('angular-toArrayFilter', [])
1781 1822
1782 1823 .filter('toArray', function () {
1783 1824 return function (obj, addKey) {
1784 1825 if (!angular.isObject(obj)) return obj;
1785 1826 if ( addKey === false ) {
1786 1827 return Object.keys(obj).map(function(key) {
1787 1828 return obj[key];
1788 1829 });
1789 1830 } else {
1790 1831 return Object.keys(obj).map(function (key) {
1791 1832 var value = obj[key];
1792 1833 return angular.isObject(value) ?
1793 1834 Object.defineProperty(value, '$key', { enumerable: false, value: key}) :
1794 1835 { $key: key, $value: value };
1795 1836 });
1796 1837 }
1797 1838 };
1798 1839 });
1799 ;//Copyright (C) 2012 Kory Nunn
1800
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
1803 //The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
1804
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
1807 /*
1808
1809 This code is not formatted for readability, but rather run-speed and to assist compilers.
1810
1811 However, the code's intention should be transparent.
1812
1813 *** IE SUPPORT ***
1814
1815 If you require this library to work in IE7, add the following after declaring crel.
1816
1817 var testDiv = document.createElement('div'),
1818 testLabel = document.createElement('label');
1819
1820 testDiv.setAttribute('class', 'a');
1821 testDiv['className'] !== 'a' ? crel.attrMap['class'] = 'className':undefined;
1822 testDiv.setAttribute('name','a');
1823 testDiv['name'] !== 'a' ? crel.attrMap['name'] = function(element, value){
1824 element.id = value;
1825 }:undefined;
1826
1827
1828 testLabel.setAttribute('for', 'a');
1829 testLabel['htmlFor'] !== 'a' ? crel.attrMap['for'] = 'htmlFor':undefined;
1830
1831
1832
1833 */
1834
1835 (function (root, factory) {
1836 if (typeof exports === 'object') {
1837 if (!root.window) {
1838 var jsdom = require('jsdom').jsdom;
1839 root.window = jsdom().parentWindow;
1840 }
1841 module.exports = factory(root.window);
1842 } else if (typeof define === 'function' && define.amd) {
1843 define(factory.bind(null, window));
1844 } else {
1845 root.crel = factory(root.window);
1846 }
1847 }(this, function (window) {
1848 // based on http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
1849 var isNode = typeof Node === 'object'
1850 ? function (object) { return object instanceof Node }
1851 : function (object) {
1852 return object
1853 && typeof object === 'object'
1854 && typeof object.nodeType === 'number'
1855 && typeof object.nodeName === 'string';
1856 };
1857
1858 function crel(){
1859 var document = window.document,
1860 args = arguments, //Note: assigned to a variable to assist compilers. Saves about 40 bytes in closure compiler. Has negligable effect on performance.
1861 element = document.createElement(args[0]),
1862 child,
1863 settings = args[1],
1864 childIndex = 2,
1865 argumentsLength = args.length,
1866 attributeMap = crel.attrMap;
1867
1868 // shortcut
1869 if(argumentsLength === 1){
1870 return element;
1871 }
1872
1873 if(typeof settings !== 'object' || isNode(settings)) {
1874 --childIndex;
1875 settings = null;
1876 }
1877
1878 // shortcut if there is only one child that is a string
1879 if((argumentsLength - childIndex) === 1 && typeof args[childIndex] === 'string' && element.textContent !== undefined){
1880 element.textContent = args[childIndex];
1881 }else{
1882 for(; childIndex < argumentsLength; ++childIndex){
1883 child = args[childIndex];
1884
1885 if(child == null){
1886 continue;
1887 }
1888
1889 if(!isNode(child)){
1890 child = document.createTextNode(child);
1891 }
1892
1893 element.appendChild(child);
1894 }
1895 }
1896
1897 for(var key in settings){
1898 if(!attributeMap[key]){
1899 element.setAttribute(key, settings[key]);
1900 }else{
1901 var attr = crel.attrMap[key];
1902 if(typeof attr === 'function'){
1903 attr(element, settings[key]);
1904 }else{
1905 element.setAttribute(attr, settings[key]);
1906 }
1907 }
1908 }
1909
1910 return element;
1911 }
1912
1913 // Used for mapping one kind of attribute to the supported version of that in bad browsers.
1914 // String referenced so that compilers maintain the property name.
1915 crel['attrMap'] = {};
1916
1917 // String referenced so that compilers maintain the property name.
1918 crel["isNode"] = isNode;
1919
1920 return crel;
1921 }));
1840 ;//Copyright (C) 2012 Kory Nunn
1841
1842 //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:
1843
1844 //The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
1845
1846 //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.
1847
1848 /*
1849
1850 This code is not formatted for readability, but rather run-speed and to assist compilers.
1851
1852 However, the code's intention should be transparent.
1853
1854 *** IE SUPPORT ***
1855
1856 If you require this library to work in IE7, add the following after declaring crel.
1857
1858 var testDiv = document.createElement('div'),
1859 testLabel = document.createElement('label');
1860
1861 testDiv.setAttribute('class', 'a');
1862 testDiv['className'] !== 'a' ? crel.attrMap['class'] = 'className':undefined;
1863 testDiv.setAttribute('name','a');
1864 testDiv['name'] !== 'a' ? crel.attrMap['name'] = function(element, value){
1865 element.id = value;
1866 }:undefined;
1867
1868
1869 testLabel.setAttribute('for', 'a');
1870 testLabel['htmlFor'] !== 'a' ? crel.attrMap['for'] = 'htmlFor':undefined;
1871
1872
1873
1874 */
1875
1876 (function (root, factory) {
1877 if (typeof exports === 'object') {
1878 if (!root.window) {
1879 var jsdom = require('jsdom').jsdom;
1880 root.window = jsdom().parentWindow;
1881 }
1882 module.exports = factory(root.window);
1883 } else if (typeof define === 'function' && define.amd) {
1884 define(factory.bind(null, window));
1885 } else {
1886 root.crel = factory(root.window);
1887 }
1888 }(this, function (window) {
1889 // based on http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
1890 var isNode = typeof Node === 'object'
1891 ? function (object) { return object instanceof Node }
1892 : function (object) {
1893 return object
1894 && typeof object === 'object'
1895 && typeof object.nodeType === 'number'
1896 && typeof object.nodeName === 'string';
1897 };
1898
1899 function crel(){
1900 var document = window.document,
1901 args = arguments, //Note: assigned to a variable to assist compilers. Saves about 40 bytes in closure compiler. Has negligable effect on performance.
1902 element = document.createElement(args[0]),
1903 child,
1904 settings = args[1],
1905 childIndex = 2,
1906 argumentsLength = args.length,
1907 attributeMap = crel.attrMap;
1908
1909 // shortcut
1910 if(argumentsLength === 1){
1911 return element;
1912 }
1913
1914 if(typeof settings !== 'object' || isNode(settings)) {
1915 --childIndex;
1916 settings = null;
1917 }
1918
1919 // shortcut if there is only one child that is a string
1920 if((argumentsLength - childIndex) === 1 && typeof args[childIndex] === 'string' && element.textContent !== undefined){
1921 element.textContent = args[childIndex];
1922 }else{
1923 for(; childIndex < argumentsLength; ++childIndex){
1924 child = args[childIndex];
1925
1926 if(child == null){
1927 continue;
1928 }
1929
1930 if(!isNode(child)){
1931 child = document.createTextNode(child);
1932 }
1933
1934 element.appendChild(child);
1935 }
1936 }
1937
1938 for(var key in settings){
1939 if(!attributeMap[key]){
1940 element.setAttribute(key, settings[key]);
1941 }else{
1942 var attr = crel.attrMap[key];
1943 if(typeof attr === 'function'){
1944 attr(element, settings[key]);
1945 }else{
1946 element.setAttribute(attr, settings[key]);
1947 }
1948 }
1949 }
1950
1951 return element;
1952 }
1953
1954 // Used for mapping one kind of attribute to the supported version of that in bad browsers.
1955 // String referenced so that compilers maintain the property name.
1956 crel['attrMap'] = {};
1957
1958 // String referenced so that compilers maintain the property name.
1959 crel["isNode"] = isNode;
1960
1961 return crel;
1962 }));
1922 1963
1923 1964 ;/*globals define, module, require, document*/
1924 1965 (function (root, factory) {
1925 1966 "use strict";
1926 1967 if (typeof define === 'function' && define.amd) {
1927 1968 define([], factory);
1928 1969 } else if (typeof module !== 'undefined' && module.exports) {
1929 1970 module.exports = factory();
1930 1971 } else {
1931 1972 root.JsonHuman = factory();
1932 1973 }
1933 1974 }(this, function () {
1934 1975 "use strict";
1935 1976
1936 1977 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 1978
1938 1979 function makePrefixer(prefix) {
1939 1980 return function (name) {
1940 1981 return prefix + "-" + name;
1941 1982 };
1942 1983 }
1943 1984
1944 1985 function isArray(obj) {
1945 1986 return toString.call(obj) === '[object Array]';
1946 1987 }
1947 1988
1948 1989 function sn(tagName, className, data) {
1949 1990 var result = document.createElement(tagName);
1950 1991
1951 1992 result.className = className;
1952 1993 result.appendChild(document.createTextNode("" + data));
1953 1994
1954 1995 return result;
1955 1996 }
1956 1997
1957 1998 function scn(tagName, className, child) {
1958 1999 var result = document.createElement(tagName),
1959 2000 i, len;
1960 2001
1961 2002 result.className = className;
1962 2003
1963 2004 if (isArray(child)) {
1964 2005 for (i = 0, len = child.length; i < len; i += 1) {
1965 2006 result.appendChild(child[i]);
1966 2007 }
1967 2008 } else {
1968 2009 result.appendChild(child);
1969 2010 }
1970 2011
1971 2012 return result;
1972 2013 }
1973 2014
1974 2015 function linkNode(child, href, target){
1975 2016 var a = scn("a", HYPERLINK_CLASS_NAME, child);
1976 2017 a.setAttribute('href', href);
1977 2018 a.setAttribute('target', target);
1978 2019 return a;
1979 2020 }
1980 2021
1981 2022 var toString = Object.prototype.toString,
1982 2023 prefixer = makePrefixer("jh"),
1983 2024 p = prefixer,
1984 2025 ARRAY = 2,
1985 2026 BOOL = 4,
1986 2027 INT = 8,
1987 2028 FLOAT = 16,
1988 2029 STRING = 32,
1989 2030 OBJECT = 64,
1990 2031 SPECIAL_OBJECT = 128,
1991 2032 FUNCTION = 256,
1992 2033 UNK = 1,
1993 2034
1994 2035 STRING_CLASS_NAME = p("type-string"),
1995 2036 STRING_EMPTY_CLASS_NAME = p("type-string") + " " + p("empty"),
1996 2037
1997 2038 BOOL_TRUE_CLASS_NAME = p("type-bool-true"),
1998 2039 BOOL_FALSE_CLASS_NAME = p("type-bool-false"),
1999 2040 BOOL_IMAGE = p("type-bool-image"),
2000 2041 INT_CLASS_NAME = p("type-int") + " " + p("type-number"),
2001 2042 FLOAT_CLASS_NAME = p("type-float") + " " + p("type-number"),
2002 2043
2003 2044 OBJECT_CLASS_NAME = p("type-object"),
2004 2045 OBJ_KEY_CLASS_NAME = p("key") + " " + p("object-key"),
2005 2046 OBJ_VAL_CLASS_NAME = p("value") + " " + p("object-value"),
2006 2047 OBJ_EMPTY_CLASS_NAME = p("type-object") + " " + p("empty"),
2007 2048
2008 2049 FUNCTION_CLASS_NAME = p("type-function"),
2009 2050
2010 2051 ARRAY_KEY_CLASS_NAME = p("key") + " " + p("array-key"),
2011 2052 ARRAY_VAL_CLASS_NAME = p("value") + " " + p("array-value"),
2012 2053 ARRAY_CLASS_NAME = p("type-array"),
2013 2054 ARRAY_EMPTY_CLASS_NAME = p("type-array") + " " + p("empty"),
2014 2055
2015 2056 HYPERLINK_CLASS_NAME = p('a'),
2016 2057
2017 2058 UNKNOWN_CLASS_NAME = p("type-unk");
2018 2059
2019 2060 function getType(obj) {
2020 2061 var type = typeof obj;
2021 2062
2022 2063 switch (type) {
2023 2064 case "boolean":
2024 2065 return BOOL;
2025 2066 case "string":
2026 2067 return STRING;
2027 2068 case "number":
2028 2069 return (obj % 1 === 0) ? INT : FLOAT;
2029 2070 case "function":
2030 2071 return FUNCTION;
2031 2072 default:
2032 2073 if (isArray(obj)) {
2033 2074 return ARRAY;
2034 2075 } else if (obj === Object(obj)) {
2035 2076 if (obj.constructor === Object) {
2036 2077 return OBJECT;
2037 2078 }
2038 2079 return OBJECT | SPECIAL_OBJECT
2039 2080 } else {
2040 2081 return UNK;
2041 2082 }
2042 2083 }
2043 2084 }
2044 2085
2045 2086 function _format(data, options, parentKey) {
2046 2087
2047 2088 var result, container, key, keyNode, valNode, len, childs, tr, value,
2048 2089 isEmpty = true,
2049 2090 isSpecial = false,
2050 2091 accum = [],
2051 2092 type = getType(data);
2052 2093
2053 2094 // Initialized & used only in case of objects & arrays
2054 2095 var hyperlinksEnabled, aTarget, hyperlinkKeys ;
2055 2096
2056 2097 if (type === BOOL) {
2057 2098 var boolOpt = options.bool;
2058 2099 container = document.createElement('div');
2059 2100
2060 2101 if (boolOpt.showImage) {
2061 2102 var img = document.createElement('img');
2062 2103 img.setAttribute('class', BOOL_IMAGE);
2063 2104
2064 2105 img.setAttribute('src',
2065 2106 '' + (data ? boolOpt.img.true : boolOpt.img.false));
2066 2107
2067 2108 container.appendChild(img);
2068 2109 }
2069 2110
2070 2111 if (boolOpt.showText) {
2071 2112 container.appendChild(data ?
2072 2113 sn("span", BOOL_TRUE_CLASS_NAME, boolOpt.text.true) :
2073 2114 sn("span", BOOL_FALSE_CLASS_NAME, boolOpt.text.false));
2074 2115 }
2075 2116
2076 2117 result = container;
2077 2118
2078 2119 } else if (type === STRING) {
2079 2120 if (data === "") {
2080 2121 result = sn("span", STRING_EMPTY_CLASS_NAME, "(Empty Text)");
2081 2122 } else {
2082 2123 result = sn("span", STRING_CLASS_NAME, data);
2083 2124 }
2084 2125 } else if (type === INT) {
2085 2126 result = sn("span", INT_CLASS_NAME, data);
2086 2127 } else if (type === FLOAT) {
2087 2128 result = sn("span", FLOAT_CLASS_NAME, data);
2088 2129 } else if (type & OBJECT) {
2089 2130 if (type & SPECIAL_OBJECT) {
2090 2131 isSpecial = true;
2091 2132 }
2092 2133 childs = [];
2093 2134
2094 2135 aTarget = options.hyperlinks.target;
2095 2136 hyperlinkKeys = options.hyperlinks.keys;
2096 2137
2097 2138 // Is Hyperlink Key
2098 2139 hyperlinksEnabled =
2099 2140 options.hyperlinks.enable &&
2100 2141 hyperlinkKeys &&
2101 2142 hyperlinkKeys.length > 0;
2102 2143
2103 2144 for (key in data) {
2104 2145 isEmpty = false;
2105 2146
2106 2147 value = data[key];
2107 2148
2108 2149 valNode = _format(value, options, key);
2109 2150 keyNode = sn("th", OBJ_KEY_CLASS_NAME, key);
2110 2151
2111 2152 if( hyperlinksEnabled &&
2112 2153 typeof(value) === 'string' &&
2113 2154 indexOf.call(hyperlinkKeys, key) >= 0){
2114 2155
2115 2156 valNode = scn("td", OBJ_VAL_CLASS_NAME, linkNode(valNode, value, aTarget));
2116 2157 } else {
2117 2158 valNode = scn("td", OBJ_VAL_CLASS_NAME, valNode);
2118 2159 }
2119 2160
2120 2161 tr = document.createElement("tr");
2121 2162 tr.appendChild(keyNode);
2122 2163 tr.appendChild(valNode);
2123 2164
2124 2165 childs.push(tr);
2125 2166 }
2126 2167
2127 2168 if (isSpecial) {
2128 2169 result = sn('span', STRING_CLASS_NAME, data.toString())
2129 2170 } else if (isEmpty) {
2130 2171 result = sn("span", OBJ_EMPTY_CLASS_NAME, "(Empty Object)");
2131 2172 } else {
2132 2173 result = scn("table", OBJECT_CLASS_NAME, scn("tbody", '', childs));
2133 2174 }
2134 2175 } else if (type === FUNCTION) {
2135 2176 result = sn("span", FUNCTION_CLASS_NAME, data);
2136 2177 } else if (type === ARRAY) {
2137 2178 if (data.length > 0) {
2138 2179 childs = [];
2139 2180 var showArrayIndices = options.showArrayIndex;
2140 2181
2141 2182 aTarget = options.hyperlinks.target;
2142 2183 hyperlinkKeys = options.hyperlinks.keys;
2143 2184
2144 2185 // Hyperlink of arrays?
2145 2186 hyperlinksEnabled = parentKey && options.hyperlinks.enable &&
2146 2187 hyperlinkKeys &&
2147 2188 hyperlinkKeys.length > 0 &&
2148 2189 indexOf.call(hyperlinkKeys, parentKey) >= 0;
2149 2190
2150 2191 for (key = 0, len = data.length; key < len; key += 1) {
2151 2192
2152 2193 keyNode = sn("th", ARRAY_KEY_CLASS_NAME, key);
2153 2194 value = data[key];
2154 2195
2155 2196 if (hyperlinksEnabled && typeof(value) === "string") {
2156 2197 valNode = _format(value, options, key);
2157 2198 valNode = scn("td", ARRAY_VAL_CLASS_NAME,
2158 2199 linkNode(valNode, value, aTarget));
2159 2200 } else {
2160 2201 valNode = scn("td", ARRAY_VAL_CLASS_NAME,
2161 2202 _format(value, options, key));
2162 2203 }
2163 2204
2164 2205 tr = document.createElement("tr");
2165 2206
2166 2207 if (showArrayIndices) {
2167 2208 tr.appendChild(keyNode);
2168 2209 }
2169 2210 tr.appendChild(valNode);
2170 2211
2171 2212 childs.push(tr);
2172 2213 }
2173 2214
2174 2215 result = scn("table", ARRAY_CLASS_NAME, scn("tbody", '', childs));
2175 2216 } else {
2176 2217 result = sn("span", ARRAY_EMPTY_CLASS_NAME, "(Empty List)");
2177 2218 }
2178 2219 } else {
2179 2220 result = sn("span", UNKNOWN_CLASS_NAME, data);
2180 2221 }
2181 2222
2182 2223 return result;
2183 2224 }
2184 2225
2185 2226 function format(data, options) {
2186 2227 options = validateOptions(options || {});
2187 2228
2188 2229 var result;
2189 2230
2190 2231 result = _format(data, options);
2191 2232 result.className = result.className + " " + prefixer("root");
2192 2233
2193 2234 return result;
2194 2235 }
2195 2236
2196 2237 function validateOptions(options){
2197 2238 options = validateArrayIndexOption(options);
2198 2239 options = validateHyperlinkOptions(options);
2199 2240 options = validateBoolOptions(options);
2200 2241
2201 2242 // Add any more option validators here
2202 2243
2203 2244 return options;
2204 2245 }
2205 2246
2206 2247
2207 2248 function validateArrayIndexOption(options) {
2208 2249 if(options.showArrayIndex === undefined){
2209 2250 options.showArrayIndex = true;
2210 2251 } else {
2211 2252 // Force to boolean just in case
2212 2253 options.showArrayIndex = options.showArrayIndex ? true: false;
2213 2254 }
2214 2255
2215 2256 return options;
2216 2257 }
2217 2258
2218 2259 function validateHyperlinkOptions(options){
2219 2260 var hyperlinks = {
2220 2261 enable : false,
2221 2262 keys : null,
2222 2263 target : ''
2223 2264 };
2224 2265
2225 2266 if(options.hyperlinks && options.hyperlinks.enable) {
2226 2267 hyperlinks.enable = true;
2227 2268
2228 2269 hyperlinks.keys = isArray(options.hyperlinks.keys) ? options.hyperlinks.keys : [];
2229 2270
2230 2271 if(options.hyperlinks.target) {
2231 2272 hyperlinks.target = '' + options.hyperlinks.target;
2232 2273 } else {
2233 2274 hyperlinks.target = '_blank';
2234 2275 }
2235 2276 }
2236 2277
2237 2278 options.hyperlinks = hyperlinks;
2238 2279
2239 2280 return options;
2240 2281 }
2241 2282
2242 2283 function validateBoolOptions(options){
2243 2284 if(!options.bool){
2244 2285 options.bool = {
2245 2286 text: {
2246 2287 true : "true",
2247 2288 false : "false"
2248 2289 },
2249 2290 img : {
2250 2291 true: "",
2251 2292 false: ""
2252 2293 },
2253 2294 showImage : false,
2254 2295 showText : true
2255 2296 };
2256 2297 } else {
2257 2298 var boolOptions = options.bool;
2258 2299
2259 2300 // Show text if no option
2260 2301 if(!boolOptions.showText && !boolOptions.showImage){
2261 2302 boolOptions.showImage = false;
2262 2303 boolOptions.showText = true;
2263 2304 }
2264 2305
2265 2306 if(boolOptions.showText){
2266 2307 if(!boolOptions.text){
2267 2308 boolOptions.text = {
2268 2309 true : "true",
2269 2310 false : "false"
2270 2311 };
2271 2312 } else {
2272 2313 var t = boolOptions.text.true, f = boolOptions.text.false;
2273 2314
2274 2315 if(getType(t) != STRING || t === ''){
2275 2316 boolOptions.text.true = 'true';
2276 2317 }
2277 2318
2278 2319 if(getType(f) != STRING || f === ''){
2279 2320 boolOptions.text.false = 'false';
2280 2321 }
2281 2322 }
2282 2323 }
2283 2324
2284 2325 if(boolOptions.showImage){
2285 2326 if(!boolOptions.img.true && !boolOptions.img.false){
2286 2327 boolOptions.showImage = false;
2287 2328 }
2288 2329 }
2289 2330 }
2290 2331
2291 2332 return options;
2292 2333 }
2293 2334
2294 2335 return {
2295 2336 format: format
2296 2337 };
2297 2338 }));
2298 2339
2299 2340 ;//! moment.js
2300 2341 //! version : 2.8.4
2301 2342 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
2302 2343 //! license : MIT
2303 2344 //! momentjs.com
2304 2345 (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 2346 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 2347 ;!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 2348 (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 2349 },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 2350 },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 2351 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 2352 ;!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 2353 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 2354 },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 2355 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 2356 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 2357 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 2358 ;/**
2318 2359 * @version 2.1.8
2319 2360 * @license MIT
2320 2361 */
2321 2362 !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 2363 //# sourceMappingURL=smart-table.min.js.map
2323 2364
2324 2365 ;"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 2366 ;moment.defaultFormat = 'YYYY-MM-DDTHH:mm';
2326 2367
2327 2368 ;// MIT License:
2328 2369 //
2329 2370 // Copyright (c) 2010-2012, Joe Walnes
2330 2371 //
2331 2372 // Permission is hereby granted, free of charge, to any person obtaining a copy
2332 2373 // of this software and associated documentation files (the "Software"), to deal
2333 2374 // in the Software without restriction, including without limitation the rights
2334 2375 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2335 2376 // copies of the Software, and to permit persons to whom the Software is
2336 2377 // furnished to do so, subject to the following conditions:
2337 2378 //
2338 2379 // The above copyright notice and this permission notice shall be included in
2339 2380 // all copies or substantial portions of the Software.
2340 2381 //
2341 2382 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2342 2383 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2343 2384 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2344 2385 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2345 2386 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2346 2387 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2347 2388 // THE SOFTWARE.
2348 2389
2349 2390 /**
2350 2391 * This behaves like a WebSocket in every way, except if it fails to connect,
2351 2392 * or it gets disconnected, it will repeatedly poll until it succesfully connects
2352 2393 * again.
2353 2394 *
2354 2395 * It is API compatible, so when you have:
2355 2396 * ws = new WebSocket('ws://....');
2356 2397 * you can replace with:
2357 2398 * ws = new ReconnectingWebSocket('ws://....');
2358 2399 *
2359 2400 * The event stream will typically look like:
2360 2401 * onconnecting
2361 2402 * onopen
2362 2403 * onmessage
2363 2404 * onmessage
2364 2405 * onclose // lost connection
2365 2406 * onconnecting
2366 2407 * onopen // sometime later...
2367 2408 * onmessage
2368 2409 * onmessage
2369 2410 * etc...
2370 2411 *
2371 2412 * It is API compatible with the standard WebSocket API.
2372 2413 *
2373 2414 * Latest version: https://github.com/joewalnes/reconnecting-websocket/
2374 2415 * - Joe Walnes
2375 2416 */
2376 2417 function ReconnectingWebSocket(url, protocols) {
2377 2418 protocols = protocols || [];
2378 2419
2379 2420 // These can be altered by calling code.
2380 2421 this.debug = false;
2381 2422 this.reconnectInterval = 1000;
2382 2423 this.timeoutInterval = 2000;
2383 2424
2384 2425 var self = this;
2385 2426 var ws;
2386 2427 var forcedClose = false;
2387 2428 var timedOut = false;
2388 2429
2389 2430 this.url = url;
2390 2431 this.protocols = protocols;
2391 2432 this.readyState = WebSocket.CONNECTING;
2392 2433 this.URL = url; // Public API
2393 2434
2394 2435 this.onopen = function(event) {
2395 2436 };
2396 2437
2397 2438 this.onclose = function(event) {
2398 2439 };
2399 2440
2400 2441 this.onconnecting = function(event) {
2401 2442 };
2402 2443
2403 2444 this.onmessage = function(event) {
2404 2445 };
2405 2446
2406 2447 this.onerror = function(event) {
2407 2448 };
2408 2449
2409 2450 function connect(reconnectAttempt) {
2410 2451 ws = new WebSocket(url, protocols);
2411 2452
2412 2453 self.onconnecting();
2413 2454 if (self.debug || ReconnectingWebSocket.debugAll) {
2414 2455 console.debug('ReconnectingWebSocket', 'attempt-connect', url);
2415 2456 }
2416 2457
2417 2458 var localWs = ws;
2418 2459 var timeout = setTimeout(function() {
2419 2460 if (self.debug || ReconnectingWebSocket.debugAll) {
2420 2461 console.debug('ReconnectingWebSocket', 'connection-timeout', url);
2421 2462 }
2422 2463 timedOut = true;
2423 2464 localWs.close();
2424 2465 timedOut = false;
2425 2466 }, self.timeoutInterval);
2426 2467
2427 2468 ws.onopen = function(event) {
2428 2469 clearTimeout(timeout);
2429 2470 if (self.debug || ReconnectingWebSocket.debugAll) {
2430 2471 console.debug('ReconnectingWebSocket', 'onopen', url);
2431 2472 }
2432 2473 self.readyState = WebSocket.OPEN;
2433 2474 reconnectAttempt = false;
2434 2475 self.onopen(event);
2435 2476 };
2436 2477
2437 2478 ws.onclose = function(event) {
2438 2479 clearTimeout(timeout);
2439 2480 ws = null;
2440 2481 if (forcedClose) {
2441 2482 self.readyState = WebSocket.CLOSED;
2442 2483 self.onclose(event);
2443 2484 } else {
2444 2485 self.readyState = WebSocket.CONNECTING;
2445 2486 self.onconnecting();
2446 2487 if (!reconnectAttempt && !timedOut) {
2447 2488 if (self.debug || ReconnectingWebSocket.debugAll) {
2448 2489 console.debug('ReconnectingWebSocket', 'onclose', url);
2449 2490 }
2450 2491 self.onclose(event);
2451 2492 }
2452 2493 setTimeout(function() {
2453 2494 connect(true);
2454 2495 }, self.reconnectInterval);
2455 2496 }
2456 2497 };
2457 2498 ws.onmessage = function(event) {
2458 2499 if (self.debug || ReconnectingWebSocket.debugAll) {
2459 2500 console.debug('ReconnectingWebSocket', 'onmessage', url, event.data);
2460 2501 }
2461 2502 self.onmessage(event);
2462 2503 };
2463 2504 ws.onerror = function(event) {
2464 2505 if (self.debug || ReconnectingWebSocket.debugAll) {
2465 2506 console.debug('ReconnectingWebSocket', 'onerror', url, event);
2466 2507 }
2467 2508 self.onerror(event);
2468 2509 };
2469 2510 }
2470 2511 connect(url);
2471 2512
2472 2513 this.send = function(data) {
2473 2514 if (ws) {
2474 2515 if (self.debug || ReconnectingWebSocket.debugAll) {
2475 2516 console.debug('ReconnectingWebSocket', 'send', url, data);
2476 2517 }
2477 2518 return ws.send(data);
2478 2519 } else {
2479 2520 throw 'INVALID_STATE_ERR : Pausing to reconnect websocket';
2480 2521 }
2481 2522 };
2482 2523
2483 2524 this.close = function() {
2484 2525 if (ws) {
2485 2526 forcedClose = true;
2486 2527 ws.close();
2487 2528 }
2488 2529 };
2489 2530
2490 2531 /**
2491 2532 * Additional public API method to refresh the connection if still open (close, re-open).
2492 2533 * For example, if the app suspects bad data / missed heart beats, it can try to refresh.
2493 2534 */
2494 2535 this.refresh = function() {
2495 2536 if (ws) {
2496 2537 ws.close();
2497 2538 }
2498 2539 };
2499 2540 }
2500 2541
2501 2542 /**
2502 2543 * Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true.
2503 2544 */
2504 2545 ReconnectingWebSocket.debugAll = false;
2505 2546
2506 2547
2507 2548 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2508 2549 //
2509 2550 // Licensed under the Apache License, Version 2.0 (the "License");
2510 2551 // you may not use this file except in compliance with the License.
2511 2552 // You may obtain a copy of the License at
2512 2553 //
2513 2554 // http://www.apache.org/licenses/LICENSE-2.0
2514 2555 //
2515 2556 // Unless required by applicable law or agreed to in writing, software
2516 2557 // distributed under the License is distributed on an "AS IS" BASIS,
2517 2558 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2518 2559 // See the License for the specific language governing permissions and
2519 2560 // limitations under the License.
2520 2561
2521 2562 if (!String.prototype.trim) {
2522 2563 String.prototype.trim = function () {
2523 2564 return this.replace(/^\s+|\s+$/g, '');
2524 2565 };
2525 2566
2526 2567 String.prototype.ltrim = function () {
2527 2568 return this.replace(/^\s+/, '');
2528 2569 };
2529 2570
2530 2571 String.prototype.rtrim = function () {
2531 2572 return this.replace(/\s+$/, '');
2532 2573 };
2533 2574
2534 2575 String.prototype.fulltrim = function () {
2535 2576 return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, '').replace(/\s+/g, ' ');
2536 2577 };
2537 2578 }
2538 2579
2539 2580 function decodeEncodedJSON (input){
2540 2581 try{
2541 2582 var val = JSON.parse(input);
2542 2583 delete doc;
2543 2584 return val;
2544 2585 }catch(exc){
2545 2586
2546 2587 delete doc;
2547 2588 }
2548 2589 }
2549 2590
2550 2591 function parseTagsToSearch(searchParams) {
2551 2592 var params = {};
2552 2593 _.each(searchParams.tags, function (t) {
2553 2594 if (!_.has(params, t.type)) {
2554 2595 params[t.type] = [];
2555 2596 }
2556 2597 params[t.type].push(t.value);
2557 2598 });
2558 2599 if (searchParams.page > 1){
2559 2600 params.page = searchParams.page;
2560 2601 }
2561 2602 return params;
2562 2603 }
2563 2604
2564 2605 function parseSearchToTags(search) {
2565 2606 var config = {page: 1, tags: [], type:''};
2566 2607 _.each(_.pairs(search), function (obj) {
2567 2608 if (_.isArray(obj[1])) {
2568 2609 _.each(obj[1], function (obj2) {
2569 2610 config.tags.push({type: obj[0], value: obj2});
2570 2611 })
2571 2612 } else {
2572 2613 if (obj[0] == 'page') {
2573 2614 config.page = obj[1];
2574 2615 }
2575 2616 else if (obj[0] == 'type') {
2576 2617 config.type = obj[1];
2577 2618 }
2578 2619 else {
2579 2620 config.tags.push({type: obj[0], value: obj[1]});
2580 2621 }
2581 2622
2582 2623 }
2583 2624 });
2584 2625 return config;
2585 2626 }
2586 2627
2587 2628
2588 2629 /* returns ISO date string from UTC now - timespan */
2589 2630 function timeSpanToStartDate(timeSpan){
2590 2631 var amount = Number(timeSpan.slice(0,-1));
2591 2632 var unit = timeSpan.slice(-1);
2592 2633 return moment.utc().subtract(amount, unit).format();
2593 2634 }
2594 2635
2595 2636 /* Sets server validation messages on form using angular machinery +
2596 2637 * custom key holding actual error messages */
2597 2638 function setServerValidation(form, errors){
2598 2639
2599 2640 if (typeof form.ae_validation === 'undefined'){
2600 2641 form.ae_validation = {};
2601 2642
2602 2643 }
2603 2644 for (var key in form.ae_validation){
2604 2645 form.ae_validation[key] = [];
2605 2646
2606 2647 }
2607 2648
2608 2649
2609 2650 for (var key in form){
2610 2651 if (key[0] !== '$' && key !== 'ae_validation'){
2611 2652 form[key].$setValidity('ae_validation', true);
2612 2653 }
2613 2654 }
2614 2655 if (typeof errors !== undefined){
2615 2656 for (var key in errors){
2616 2657 if (typeof form[key] !== 'undefined'){
2617 2658 form[key].$setValidity('ae_validation', false);
2618 2659 }
2619 2660 // handle wtforms and colander errors based on
2620 2661 // whether we have list of erors or a single error in a key
2621 2662 if (angular.isArray(errors[key])){
2622 2663 form.ae_validation[key] = errors[key];
2623 2664 }
2624 2665 else{
2625 2666 form.ae_validation[key] = [errors[key]];
2626 2667 }
2627 2668 }
2628 2669 }
2629 2670 return form;
2630 2671 }
2631 2672
2632 2673 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2633 2674 //
2634 2675 // Licensed under the Apache License, Version 2.0 (the "License");
2635 2676 // you may not use this file except in compliance with the License.
2636 2677 // You may obtain a copy of the License at
2637 2678 //
2638 2679 // http://www.apache.org/licenses/LICENSE-2.0
2639 2680 //
2640 2681 // Unless required by applicable law or agreed to in writing, software
2641 2682 // distributed under the License is distributed on an "AS IS" BASIS,
2642 2683 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2643 2684 // See the License for the specific language governing permissions and
2644 2685 // limitations under the License.
2645 2686
2646 2687 'use strict';
2647 2688
2648 2689 // Declare app level module which depends on filters, and services
2649 2690 angular.module('appenlight.base', [
2650 2691 'ngRoute',
2651 2692 'ui.router',
2652 2693 'ui.router.router',
2653 2694 'underscore',
2654 2695 'ui.bootstrap',
2655 2696 'ngResource',
2656 2697 'ngAnimate',
2657 2698 'ngCookies',
2658 2699 'smart-table',
2659 2700 'angular-toArrayFilter',
2660 2701 'mentio'
2661 2702 ]);
2662 2703
2663 2704 angular.module('appenlight.filters', []);
2664 2705 angular.module('appenlight.templates', []);
2665 2706 angular.module('appenlight.controllers', [
2666 2707 'appenlight.base'
2667 2708 ]);
2668 2709 angular.module('appenlight.components', [
2669 2710 'appenlight.components.channelstream',
2670 2711 'appenlight.components.appenlightApp',
2671 2712 'appenlight.components.appenlightHeader',
2672 2713 'appenlight.components.indexDashboardView',
2673 2714 'appenlight.components.logsBrowserView',
2674 2715 'appenlight.components.reportView',
2675 2716 'appenlight.components.reportsBrowserView',
2676 2717 'appenlight.components.reportsSlowBrowserView',
2677 2718 'appenlight.components.eventBrowserView',
2678 2719 'appenlight.components.userProfileView',
2679 2720 'appenlight.components.userIdentitiesView',
2680 2721 'appenlight.components.userPasswordView',
2681 2722 'appenlight.components.userAuthTokensView',
2682 2723 'appenlight.components.userAlertChannelsListView',
2683 2724 'appenlight.components.userAlertChannelsEmailNewView',
2684 2725 'appenlight.components.applicationsListView',
2685 2726 'appenlight.components.applicationsPurgeLogsView',
2686 2727 'appenlight.components.applicationsUpdateView',
2687 2728 'appenlight.components.integrationsListView',
2688 2729 'appenlight.components.bitbucketIntegrationConfigView',
2689 2730 'appenlight.components.campfireIntegrationConfigView',
2690 2731 'appenlight.components.flowdockIntegrationConfigView',
2691 2732 'appenlight.components.githubIntegrationConfigView',
2692 2733 'appenlight.components.hipchatIntegrationConfigView',
2693 2734 'appenlight.components.jiraIntegrationConfigView',
2694 2735 'appenlight.components.slackIntegrationConfigView',
2695 2736 'appenlight.components.webhooksIntegrationConfigView',
2696 2737 'appenlight.components.adminView',
2697 2738 'appenlight.components.adminApplicationsListView',
2698 2739 'appenlight.components.adminUsersListView',
2699 2740 'appenlight.components.adminUsersCreateView',
2700 2741 'appenlight.components.adminGroupsListView',
2701 2742 'appenlight.components.adminGroupsCreateView',
2702 2743 'appenlight.components.adminConfigurationView',
2703 2744 'appenlight.components.adminSystemView',
2704 2745 'appenlight.components.adminPartitionsView',
2705 2746 'appenlight.components.settingsView'
2706 2747 ]);
2707 2748 angular.module('appenlight.directives', [
2708 2749 'appenlight.directives.c3chart',
2709 2750 'appenlight.directives.confirmValidate',
2710 2751 'appenlight.directives.focus',
2711 2752 'appenlight.directives.formErrors',
2712 2753 'appenlight.directives.humanFormat',
2713 2754 'appenlight.directives.isoToRelativeTime',
2714 2755 'appenlight.directives.permissionsForm',
2715 2756 'appenlight.directives.smallReportGroupList',
2716 2757 'appenlight.directives.smallReportList',
2717 2758 'appenlight.directives.pluginConfig',
2718 2759 'appenlight.directives.recursive',
2719 2760 'appenlight.directives.reportAlertAction',
2720 2761 'appenlight.directives.postProcessAction',
2721 2762 'appenlight.directives.rule',
2722 2763 'appenlight.directives.ruleReadOnly'
2723 2764 ]);
2724 2765 angular.module('appenlight.services', [
2725 2766 'appenlight.services.chartResultParser',
2726 2767 'appenlight.services.resources',
2727 2768 'appenlight.services.stateHolder',
2728 2769 'appenlight.services.typeAheadTagHelper',
2729 2770 'appenlight.services.UUIDProvider'
2730 2771 ]).value('version', '0.1');
2731 2772
2732 2773
2733 2774 var pluginsToLoad = _.map(decodeEncodedJSON(window.AE.plugins),
2734 2775 function(item){
2735 2776 return item.config.javascript.angular_module
2736 2777 });
2737 2778 console.info(pluginsToLoad);
2738 2779
2739 2780 angular.module('appenlight.plugins', pluginsToLoad);
2740 2781
2741 2782 var app = angular.module('appenlight', [
2742 2783 'appenlight.base',
2743 2784 'appenlight.config',
2744 2785 'appenlight.templates',
2745 2786 'appenlight.filters',
2746 2787 'appenlight.services',
2747 2788 'appenlight.directives',
2748 2789 'appenlight.controllers',
2749 2790 'appenlight.components',
2750 2791 'appenlight.plugins'
2751 2792 ]);
2752 2793
2753 2794 // needs manual execution because of plugin files
2754 2795 function kickstartAE(initialUserData) {
2755 2796 app.config(['$httpProvider', '$uibTooltipProvider', '$locationProvider', function ($httpProvider, $uibTooltipProvider, $locationProvider) {
2756 2797 $locationProvider.html5Mode(true);
2757 2798 $httpProvider.interceptors.push(['$q', '$rootScope', '$timeout', 'stateHolder', function ($q, $rootScope, $timeout, stateHolder) {
2758 2799 return {
2759 2800 'response': function (response) {
2760 2801 var flashMessages = angular.fromJson(response.headers('x-flash-messages'));
2761 2802 if (flashMessages && flashMessages.length > 0) {
2762 2803 stateHolder.flashMessages.extend(flashMessages);
2763 2804 }
2764 2805 return response;
2765 2806 },
2766 2807 'responseError': function (rejection) {
2767 2808 if (rejection.status > 299 && rejection.status !== 422) {
2768 2809 stateHolder.flashMessages.extend([{
2769 2810 msg: 'Response status code: ' + rejection.status + ', "' + rejection.statusText + '", url: ' + rejection.config.url,
2770 2811 type: 'error'
2771 2812 }]);
2772 2813 }
2773 2814 if (rejection.status == 0) {
2774 2815 stateHolder.flashMessages.extend([{
2775 2816 msg: 'Response timeout',
2776 2817 type: 'error'
2777 2818 }]);
2778 2819 }
2779 2820 var flashMessages = angular.fromJson(rejection.headers('x-flash-messages'));
2780 2821 if (flashMessages && flashMessages.length > 0) {
2781 2822 stateHolder.flashMessages.extend(flashMessages);
2782 2823 }
2783 2824
2784 2825 return $q.reject(rejection);
2785 2826 }
2786 2827 }
2787 2828 }]);
2788 2829
2789 2830 $uibTooltipProvider.options({appendToBody: true});
2790 2831
2791 2832 }]);
2792 2833
2793 2834
2794 2835 app.config(function ($provide) {
2795 2836 $provide.decorator("$exceptionHandler", function ($delegate) {
2796 2837 return function (exception, cause) {
2797 2838 $delegate(exception, cause);
2798 2839 if (typeof AppEnlight !== 'undefined') {
2799 2840 AppEnlight.grabError(exception);
2800 2841 }
2801 2842 };
2802 2843 });
2803 2844 });
2804 2845
2805 2846 app.run(['$rootScope', '$timeout', 'stateHolder', '$state', '$location', '$transitions', '$window', 'AeConfig',
2806 2847 function ($rootScope, $timeout, stateHolder, $state, $location, $transitions, $window, AeConfig) {
2807 2848
2808 2849 if (initialUserData){
2809 2850 stateHolder.AeUser.update(initialUserData);
2810 2851
2811 2852 if (stateHolder.AeUser.hasAppPermission('root_administration'
2812 2853 )){
2813 2854 AeConfig.topNav.menuAdminItems.push(
2814 2855 {'sref': 'admin', 'label': 'Admin Settings'}
2815 2856 )
2816 2857 }
2817 2858
2818 2859 }
2819 2860 $rootScope.$state = $state;
2820 2861 $rootScope.stateHolder = stateHolder;
2821 2862 $rootScope.flash = stateHolder.flashMessages.list;
2822 2863 $rootScope.closeAlert = stateHolder.flashMessages.closeAlert;
2823 2864 $rootScope.AeConfig = AeConfig;
2824 2865
2825 2866 var transitionApp = function($transition$, $state) {
2826 2867 // redirect user to /register unless its one of open views
2827 2868 var isGuestState = [
2828 2869 'report.view_detail',
2829 2870 'report.view_group',
2830 2871 'dashboard.view'
2831 2872 ].indexOf($transition$.to().name) !== -1;
2832 2873
2833 2874 var path = $window.location.pathname;
2834 2875 // strip trailing slash
2835 2876 if (path.substr(path.length - 1) === '/') {
2836 2877 path = path.substr(0, path.length - 1);
2837 2878 }
2838 2879 var isOpenView = false;
2839 2880 var openViews = [
2840 2881 AeConfig.urls.otherRoutes.lostPassword,
2841 2882 AeConfig.urls.otherRoutes.lostPasswordGenerate
2842 2883 ];
2843 2884
2844 2885 _.each(openViews, function (url) {
2845 2886 var url = '/' + url.split('/').slice(3).join('/');
2846 2887 if (url === path) {
2847 2888 isOpenView = true;
2848 2889 }
2849 2890 });
2850 2891 if (stateHolder.AeUser.id === null && !isGuestState && !isOpenView) {
2851 2892 if (window.location.toString().indexOf(AeConfig.urls.otherRoutes.register) === -1) {
2852 2893
2853 2894 var newLocation = AeConfig.urls.otherRoutes.register + '?came_from=' + encodeURIComponent(window.location);
2854 2895 // fix infinite digest here
2855 2896 $rootScope.$on('$locationChangeStart',
2856 2897 function(event, toState, toParams, fromState, fromParams, options){
2857 2898 event.preventDefault();
2858 2899 $window.location = newLocation;
2859 2900 });
2860 2901 $window.location = newLocation;
2861 2902 return false;
2862 2903 }
2863 2904 return false;
2864 2905 }
2865 2906 return true;
2866 2907 };
2867 2908
2868 2909 for (var i=0; i < stateHolder.plugins.callables.length; i++){
2869 2910 stateHolder.plugins.callables[i]();
2870 2911 }
2871 2912
2872 2913 $transitions.onBefore({}, transitionApp);
2873 2914 }]);
2874 2915 }
2875 2916
2876 2917 ;angular.module('appenlight.templates').run(['$templateCache', function($templateCache) {
2877 2918 'use strict';
2878 2919
2879 2920 $templateCache.put('components/appenlight-app/appenlight-app.html',
2880 2921 "<channelstream config=\"AeConfig\"></channelstream>\n" +
2881 2922 "<appenlight-header></appenlight-header>\n" +
2882 2923 "<div class=\"container\" data-ng-if=\"flash.length\">\n" +
2883 2924 " <div class=\"row\" style=\"margin-bottom: 10px\">\n" +
2884 2925 " <div class=\"col-xs-12\">\n" +
2885 2926 " <uib-alert data-ng-repeat=\"message in flash\"\n" +
2886 2927 " type=\"{{ message.type }}\"\n" +
2887 2928 " close=\"closeAlert($index)\" class=\"animate-repeat\">\n" +
2888 2929 " {{ message.msg }}</uib-alert>\n" +
2889 2930 " </div>\n" +
2890 2931 " </div>\n" +
2891 2932 "</div>\n" +
2892 2933 "\n" +
2893 2934 "<div id=\"outer-content\">\n" +
2894 2935 " <div ui-view class=\"container\"></div>\n" +
2895 2936 "</div>\n"
2896 2937 );
2897 2938
2898 2939
2899 2940 $templateCache.put('components/appenlight-header/appenlight-header.html',
2900 2941 "<!-- Fixed navbar -->\n" +
2901 2942 "<div id=\"top-navbar\" class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n" +
2902 2943 " <div class=\"pattern\">\n" +
2903 2944 " <div class=\"container\">\n" +
2904 2945 " <div class=\"navbar-header pull-left\">\n" +
2905 2946 " <a data-ui-sref=\"front_dashboard\" class=\"navbar-brand\">\n" +
2906 2947 " <div id=\"logo-normal\" class=\"hidden-sm hidden-xs\"></div>\n" +
2907 2948 " <div id=\"logo-icon\" class=\"visible-sm visible-xs\"></div>\n" +
2908 2949 " </a>\n" +
2909 2950 " </div>\n" +
2910 2951 "\n" +
2911 2952 " <div class=\"container-fluid\">\n" +
2912 2953 " <div>\n" +
2913 2954 " <ul class=\"nav navbar-nav navbar-right\" ng-if=\"$ctrl.stateHolder.AeUser.id !== null\">\n" +
2914 2955 " <li id=\"user-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown>\n" +
2915 2956 "\n" +
2916 2957 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
2917 2958 " <span class=\"badge\">{{$ctrl.assignedReports.length}}</span>\n" +
2918 2959 " <span class=\"fa fa-envelope-o\"></span>\n" +
2919 2960 " </a>\n" +
2920 2961 " <ul class=\"dropdown-menu\">\n" +
2921 2962 " <li role=\"presentation\" class=\"dropdown-header\">Assigned reports</li>\n" +
2922 2963 " <li data-ng-repeat=\"report in $ctrl.assignedReports\" role=\"presentation\">\n" +
2923 2964 " <a href=\"{{report.front_url}}\" role=\"menuitem\" tabindex=\"-1\">\n" +
2924 2965 " <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>\n" +
2925 2966 " </a>\n" +
2926 2967 "\n" +
2927 2968 " </li>\n" +
2928 2969 " <li data-ng-if=\"$ctrl.assignedReports.length == 0\"><a><small>No reports</small></a></li>\n" +
2929 2970 " </ul>\n" +
2930 2971 " </li>\n" +
2931 2972 " <li id=\"alert-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown auto-close=\"outsideClick\">\n" +
2932 2973 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
2933 2974 " <span class=\"badge {{ activeEvents ? 'danger' : '' }}\">{{$ctrl.activeEvents}}</span>\n" +
2934 2975 " <span class=\"fa fa-bell-o\"></span></a>\n" +
2935 2976 " <ul class=\"dropdown-menu\">\n" +
2936 2977 " <li role=\"presentation\" class=\"dropdown-header\">\n" +
2937 2978 " <a data-ui-sref=\"events\" class=\"btn btn-xs btn-default\">Show me more</a></li>\n" +
2938 2979 " <li role=\"presentation\" class=\"dropdown-header\">Latest events</li>\n" +
2939 2980 " <li data-ng-repeat=\"event in $ctrl.latestEvents\" role=\"presentation\">\n" +
2940 2981 " <a data-ng-click=\"$ctrl.clickedEvent(event)\"><small class=\"resource-name\">For {{ event.resource_name }}</small><br/>\n" +
2941 2982 " <small>{{ event.text |truncate:65}}</small><br/>\n" +
2942 2983 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\">created: <iso-to-relative-time time=\"{{event.start_date}}\"/></small>\n" +
2943 2984 " <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" +
2944 2985 " </a>\n" +
2945 2986 " </li>\n" +
2946 2987 " <li data-ng-if=\"$ctrl.latestEvents.length == 0\"><a><small>No events</small></a></li>\n" +
2947 2988 " </ul>\n" +
2948 2989 " </li>\n" +
2949 2990 "\n" +
2950 2991 " <li id=\"dashboards\" class=\"dropdown\" data-uib-dropdown>\n" +
2951 2992 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Dashboards\">\n" +
2952 2993 " <span class=\"fa fa-bar-chart-o \"></span></a>\n" +
2953 2994 " <ul class=\"dropdown-menu\">\n" +
2954 2995 " <li role=\"presentation\"><a data-ui-sref=\"front_dashboard\">Main dashboard</a></li>\n" +
2955 2996 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menuDashboardsItems\">\n" +
2956 2997 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
2957 2998 " </li>\n" +
2958 2999 " </ul>\n" +
2959 3000 " </li>\n" +
2960 3001 "\n" +
2961 3002 " <li class=\"dropdown\" data-uib-dropdown>\n" +
2962 3003 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Reports\">\n" +
2963 3004 " <span class=\"fa fa-exclamation-triangle\"></span></a>\n" +
2964 3005 " <ul class=\"dropdown-menu\">\n" +
2965 3006 " <li role=\"presentation\">\n" +
2966 3007 " <a data-ui-sref=\"report.list({resource:$ctrl.stateHolder.resource})\">Error Reports</a>\n" +
2967 3008 " </li>\n" +
2968 3009 " <li role=\"presentation\">\n" +
2969 3010 " <a data-ui-sref=\"report.list_slow({resource:$ctrl.stateHolder.resource})\">Slowness Reports</a>\n" +
2970 3011 " </li>\n" +
2971 3012 "\n" +
2972 3013 " </ul>\n" +
2973 3014 " </li>\n" +
2974 3015 "\n" +
2975 3016 " <li>\n" +
2976 3017 " <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" +
2977 3018 " <li>\n" +
2978 3019 " <a data-ui-sref=\"user\" data-uib-tooltip=\"Settings\" tooltip-placement=\"bottom\"><span class=\"fa fa-cog \"></span></a>\n" +
2979 3020 " </li>\n" +
2980 3021 " <li class=\"dropdown\" data-uib-dropdown data-ng-if=\"$ctrl.AeConfig.topNav.menuAdminItems.length\">\n" +
2981 3022 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Admin Settings\">\n" +
2982 3023 " <span class=\"fa fa-wrench\"></span></a>\n" +
2983 3024 " <ul class=\"dropdown-menu\">\n" +
2984 3025 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menuAdminItems\">\n" +
2985 3026 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
2986 3027 " </li>\n" +
2987 3028 " </ul>\n" +
2988 3029 " </li>\n" +
2989 3030 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.signOut }}\" target=\"_self\"\n" +
2990 3031 " data-uib-tooltip=\"Sign out\" tooltip-placement=\"bottom\">\n" +
2991 3032 " <span class=\"fa fa-power-off \"></span></a></li>\n" +
2992 3033 " </ul>\n" +
2993 3034 " <ul class=\"nav navbar-nav pull-right\" ng-if=\"$ctrl.stateHolder.AeUser.id === null\">\n" +
2994 3035 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.register }}\" target=\"_self\" class=\"btn btn-orange\">Sign In</a></li>\n" +
2995 3036 " </ul>\n" +
2996 3037 " </div><!-- /.navbar-collapse -->\n" +
2997 3038 " </div><!-- /.container-fluid -->\n" +
2998 3039 " </div>\n" +
2999 3040 " </div>\n" +
3000 3041 "</div>\n"
3001 3042 );
3002 3043
3003 3044
3004 3045 $templateCache.put('components/views/admin-applications-list-view/admin-applications-list-view.html',
3005 3046 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3006 3047 "\n" +
3007 3048 "<div class=\"panel panel-default\" ng-if=\"!$ctrl.loading.applications\">\n" +
3008 3049 " <div class=\"panel-heading\">\n" +
3009 3050 "\n" +
3010 3051 " Currently active applications: {{$ctrl.applications.length}}\n" +
3011 3052 "\n" +
3012 3053 " </div>\n" +
3013 3054 "\n" +
3014 3055 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.applications\" class=\"table table-striped\">\n" +
3015 3056 " <thead>\n" +
3016 3057 " <tr>\n" +
3017 3058 " <th st-sort=\"resource_name\"><a>Application name</a></th>\n" +
3018 3059 " <th st-sort=\"owner_user_name\"><a>Owner User</a></th>\n" +
3019 3060 " <th st-sort=\"owner_group_name\"><a>Owner Group</a></th>\n" +
3020 3061 " <th class=\"options\"></th>\n" +
3021 3062 " </tr>\n" +
3022 3063 " <tr>\n" +
3023 3064 " <th><input st-search=\"resource_name\" placeholder=\"search for application\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3024 3065 " <th><input st-search=\"owner_user_name\" placeholder=\"search for user\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3025 3066 " <th><input st-search=\"owner_group_name\" placeholder=\"search for group\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3026 3067 " <th></th>\n" +
3027 3068 " </tr>\n" +
3028 3069 " </thead>\n" +
3029 3070 " <tbody>\n" +
3030 3071 "\n" +
3031 3072 " <tr ng-repeat=\"resource in displayedCollection track by resource.resource_id\">\n" +
3032 3073 " <td> {{resource.resource_name}}</td>\n" +
3033 3074 " <td>{{resource.owner_user_name}}</td>\n" +
3034 3075 " <td>{{resource.owner_group_name}}</td>\n" +
3035 3076 " <td>\n" +
3036 3077 " <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" +
3037 3078 " </td>\n" +
3038 3079 " </tr>\n" +
3039 3080 " <tfoot>\n" +
3040 3081 " <tr>\n" +
3041 3082 " <td colspan=\"4\" class=\"text-center\">\n" +
3042 3083 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3043 3084 " </td>\n" +
3044 3085 " </tr>\n" +
3045 3086 " </tfoot>\n" +
3046 3087 " </tbody>\n" +
3047 3088 " </table>\n" +
3048 3089 "\n" +
3049 3090 "</div>\n"
3050 3091 );
3051 3092
3052 3093
3053 3094 $templateCache.put('components/views/admin-configuration-view/admin-configuration-view.html',
3054 3095 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.config\"></ng-include>\n" +
3055 3096 "\n" +
3056 3097 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.config\">\n" +
3057 3098 " <div class=\"panel-heading\">\n" +
3058 3099 " <h3 class=\"panel-title\">Basic Configuration</h3>\n" +
3059 3100 " </div>\n" +
3060 3101 " <div class=\"panel-body\">\n" +
3061 3102 " <h2>Visual</h2>\n" +
3062 3103 " <form class=\"form-horizontal\">\n" +
3063 3104 " <div class=\"form-group\">\n" +
3064 3105 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3065 3106 " Footer HTML\n" +
3066 3107 " </label>\n" +
3067 3108 " <div class=\"col-sm-8 col-lg-9\">\n" +
3068 3109 " <textarea class=\"form-control\" type=\"text\" ng-model=\"$ctrl.configs.global.template_footer_html.value\" style=\"min-height: 150px\"></textarea>\n" +
3069 3110 " </div>\n" +
3070 3111 " </div>\n" +
3071 3112 " </form>\n" +
3072 3113 "\n" +
3073 3114 " <h2>Functional</h2>\n" +
3074 3115 "\n" +
3075 3116 " <form class=\"form-horizontal\">\n" +
3076 3117 " <div class=\"form-group\">\n" +
3077 3118 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3078 3119 " Show user groups to non-admin users\n" +
3079 3120 " </label>\n" +
3080 3121 " <div class=\"col-sm-8 col-lg-9\">\n" +
3081 3122 " <button type=\"button\" class=\"btn btn-default\" ng-model=\"$ctrl.configs.global.list_groups_to_non_admins.value\" uib-btn-checkbox>\n" +
3082 3123 " Enable\n" +
3083 3124 " </button>\n" +
3084 3125 " </div>\n" +
3085 3126 " </div>\n" +
3086 3127 " </form>\n" +
3087 3128 "\n" +
3088 3129 " <h2>Global Rate Limiting</h2>\n" +
3089 3130 "\n" +
3090 3131 " <form class=\"form-horizontal\">\n" +
3091 3132 " <div class=\"form-group\">\n" +
3092 3133 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3093 3134 " Ignore reports per minute/per application\n" +
3094 3135 " </label>\n" +
3095 3136 " <div class=\"col-sm-8 col-lg-9\">\n" +
3096 3137 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_reports_rate_limit.value\" />\n" +
3097 3138 " </div>\n" +
3098 3139 " </div>\n" +
3099 3140 "\n" +
3100 3141 " <div class=\"form-group\">\n" +
3101 3142 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3102 3143 " Ignore logs per minute/per application\n" +
3103 3144 " </label>\n" +
3104 3145 " <div class=\"col-sm-8 col-lg-9\">\n" +
3105 3146 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_logs_rate_limit.value\" />\n" +
3106 3147 " </div>\n" +
3107 3148 " </div>\n" +
3108 3149 "\n" +
3109 3150 " <div class=\"form-group\">\n" +
3110 3151 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
3111 3152 " Ignore metrics per minute/per application\n" +
3112 3153 " </label>\n" +
3113 3154 " <div class=\"col-sm-8 col-lg-9\">\n" +
3114 3155 " <input class=\"form-control\" type=\"number\" ng-model=\"$ctrl.configs.global.per_application_metrics_rate_limit.value\" />\n" +
3115 3156 " </div>\n" +
3116 3157 " </div>\n" +
3117 3158 "\n" +
3118 3159 " </form>\n" +
3119 3160 "\n" +
3120 3161 " <hr/>\n" +
3121 3162 "\n" +
3122 3163 " <a class=\"btn btn-primary\" ng-click=\"$ctrl.save()\">Save configuration</a>\n" +
3123 3164 " </div>\n" +
3124 3165 "\n" +
3125 3166 "</div>\n" +
3126 3167 "\n" +
3127 3168 "\n" +
3128 3169 "<div class=\"panel panel-default\">\n" +
3129 3170 " <div class=\"panel-heading\">\n" +
3130 3171 " <h3 class=\"panel-title\">Plugin Configuration</h3>\n" +
3131 3172 " </div>\n" +
3132 3173 " <div class=\"panel-body\">\n" +
3133 3174 " <plugin-config section=\"'admin.config'\">\n" +
3134 3175 " </plugin-config>\n" +
3135 3176 " </div>\n" +
3136 3177 "</div>\n"
3137 3178 );
3138 3179
3139 3180
3140 3181 $templateCache.put('components/views/admin-groups-create-view/admin-groups-create-view.html',
3141 3182 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.group\"></ng-include>\n" +
3142 3183 "\n" +
3143 3184 "<div ng-show=\"!$ctrl.loading.group\">\n" +
3144 3185 "\n" +
3145 3186 " <div class=\"panel panel-default\">\n" +
3146 3187 " <div class=\"panel-body\">\n" +
3147 3188 " <form name=\"$ctrl.groupForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.createGroup()\">\n" +
3148 3189 " <div class=\"form-group\" id=\"row-group_name\">\n" +
3149 3190 " <data-form-errors errors=\"$ctrl.groupForm.ae_validation.group_name\"></data-form-errors>\n" +
3150 3191 " <label for=\"group_name\" id=\"label-group_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3151 3192 " Group name\n" +
3152 3193 " <span class=\"required\">*</span>\n" +
3153 3194 " </label>\n" +
3154 3195 " <div class=\"col-sm-8 col-lg-9\">\n" +
3155 3196 " <input class=\"form-control\" id=\"group_name\" name=\"group_name\" type=\"text\" ng-model=\"$ctrl.group.group_name\">\n" +
3156 3197 " </div>\n" +
3157 3198 " </div>\n" +
3158 3199 "\n" +
3159 3200 " <div class=\"form-group\" id=\"row-description\">\n" +
3160 3201 " <data-form-errors errors=\"$ctrl.groupForm.ae_validation.description\"></data-form-errors>\n" +
3161 3202 " <label for=\"description\" id=\"label-description\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3162 3203 " Description\n" +
3163 3204 " <span class=\"required\">*</span>\n" +
3164 3205 " </label>\n" +
3165 3206 " <div class=\"col-sm-8 col-lg-9\">\n" +
3166 3207 " <input class=\"form-control\" id=\"description\" name=\"description\" type=\"text\" ng-model=\"$ctrl.group.description\">\n" +
3167 3208 " </div>\n" +
3168 3209 " </div>\n" +
3169 3210 "\n" +
3170 3211 "\n" +
3171 3212 " <div class=\"form-group\" id=\"row-submit\">\n" +
3172 3213 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3173 3214 " </label>\n" +
3174 3215 " <div class=\"col-sm-8 col-lg-9\">\n" +
3175 3216 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.$state.params.groupId ? 'Update' : 'Add'}} Group\">\n" +
3176 3217 " </div>\n" +
3177 3218 " </div>\n" +
3178 3219 " </form>\n" +
3179 3220 " </div>\n" +
3180 3221 " </div>\n" +
3181 3222 "\n" +
3182 3223 "\n" +
3183 3224 " <div class=\"panel panel-default\" ng-if=\"$ctrl.group.id\">\n" +
3184 3225 " <div class=\"panel-heading\">\n" +
3185 3226 " <h3 class=\"panel-title\">Permissions summary</h3>\n" +
3186 3227 " </div>\n" +
3187 3228 " <div class=\"panel-body\">\n" +
3188 3229 " <h3>Direct application permissions</h3>\n" +
3189 3230 "\n" +
3190 3231 " <ul class=\"list-group\">\n" +
3191 3232 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.group.application\" class=\"animate-repeat list-group-item\">\n" +
3192 3233 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3193 3234 "\n" +
3194 3235 " <div class=\"pull-right\">\n" +
3195 3236 "\n" +
3196 3237 " <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" +
3197 3238 "\n" +
3198 3239 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
3199 3240 " <span class=\"fa fa-cog\"></span>\n" +
3200 3241 " </a>\n" +
3201 3242 " </div>\n" +
3202 3243 " </li>\n" +
3203 3244 " </ul>\n" +
3204 3245 "\n" +
3205 3246 " <h3>Direct dashboard permissions</h3>\n" +
3206 3247 "\n" +
3207 3248 " <ul class=\"list-group\">\n" +
3208 3249 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.group.dashboard\" class=\"animate-repeat list-group-item\">\n" +
3209 3250 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3210 3251 "\n" +
3211 3252 " <div class=\"pull-right\">\n" +
3212 3253 " <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" +
3213 3254 "\n" +
3214 3255 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
3215 3256 " <span class=\"fa fa-cog\"></span>\n" +
3216 3257 " </a>\n" +
3217 3258 " </div>\n" +
3218 3259 " </li>\n" +
3219 3260 " </ul>\n" +
3220 3261 "\n" +
3221 3262 " </div>\n" +
3222 3263 "\n" +
3223 3264 " </div>\n" +
3224 3265 "\n" +
3225 3266 "\n" +
3226 3267 " <div class=\"panel panel-default\" ng-if=\"$ctrl.group.id\">\n" +
3227 3268 " <div class=\"panel-heading\">\n" +
3228 3269 " <h3 class=\"panel-title\">User list</h3>\n" +
3229 3270 " </div>\n" +
3230 3271 " <div class=\"panel-body\">\n" +
3231 3272 "\n" +
3232 3273 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"$ctrl.addUser()\">\n" +
3233 3274 " <div class=\"form-group\">\n" +
3234 3275 " <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" +
3235 3276 " </div>\n" +
3236 3277 " <div class=\"form-group\">\n" +
3237 3278 " <button class=\"btn btn-info\" ng-disabled=\"!$ctrl.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Add user</button>\n" +
3238 3279 " </div>\n" +
3239 3280 " </form>\n" +
3240 3281 "\n" +
3241 3282 " </div>\n" +
3242 3283 "\n" +
3243 3284 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.users\" class=\"table table-striped\">\n" +
3244 3285 " <thead>\n" +
3245 3286 " <tr>\n" +
3246 3287 " <th st-sort=\"user_name\"><a>Username</a></th>\n" +
3247 3288 " <th st-sort=\"email\"><a>Email</a></th>\n" +
3248 3289 " <th st-sort=\"status\"><a>Status</a></th>\n" +
3249 3290 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
3250 3291 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
3251 3292 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
3252 3293 " <th class=\"options\" style=\"width: 130px\"></th>\n" +
3253 3294 " </tr>\n" +
3254 3295 " <tr>\n" +
3255 3296 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3256 3297 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3257 3298 " <th></th>\n" +
3258 3299 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3259 3300 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3260 3301 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3261 3302 " <th></th>\n" +
3262 3303 " </tr>\n" +
3263 3304 " </thead>\n" +
3264 3305 " <tbody>\n" +
3265 3306 "\n" +
3266 3307 " <tr ng-repeat=\"user in displayedCollection\">\n" +
3267 3308 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
3268 3309 " <td>{{user.email}}</td>\n" +
3269 3310 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
3270 3311 " <td>{{user.first_name}}</td>\n" +
3271 3312 " <td>{{user.last_name}}</td>\n" +
3272 3313 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
3273 3314 " <td>\n" +
3274 3315 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3275 3316 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3276 3317 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3277 3318 " <ul class=\"dropdown-menu\">\n" +
3278 3319 " <li><a>No</a></li>\n" +
3279 3320 " <li><a ng-click=\"$ctrl.removeUser(user)\">Yes</a></li>\n" +
3280 3321 " </ul>\n" +
3281 3322 " </span>\n" +
3282 3323 " </tr>\n" +
3283 3324 " <tfoot>\n" +
3284 3325 " <tr>\n" +
3285 3326 " <td colspan=\"7\" class=\"text-center\">\n" +
3286 3327 " <div st-pagination=\"\" st-items-by-page=\"50\" st-displayed-pages=\"7\"></div>\n" +
3287 3328 " </td>\n" +
3288 3329 " </tr>\n" +
3289 3330 " </tfoot>\n" +
3290 3331 " </tbody>\n" +
3291 3332 " </table>\n" +
3292 3333 "\n" +
3293 3334 " </div>\n" +
3294 3335 "\n" +
3295 3336 "\n" +
3296 3337 "</div>\n"
3297 3338 );
3298 3339
3299 3340
3300 3341 $templateCache.put('components/views/admin-groups-list-view/admin-groups-list-view.html',
3301 3342 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.groups\"></ng-include>\n" +
3302 3343 "\n" +
3303 3344 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.groups\">\n" +
3304 3345 "\n" +
3305 3346 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.groups\" class=\"table table-striped\">\n" +
3306 3347 " <thead>\n" +
3307 3348 " <tr>\n" +
3308 3349 " <th st-sort=\"group_name\"><a>Group name</a></th>\n" +
3309 3350 " <th st-sort=\"description\"><a>Description</a></th>\n" +
3310 3351 " <th st-sort=\"members\"><a>Member count</a></th>\n" +
3311 3352 " <th class=\"options\"></th>\n" +
3312 3353 " </tr>\n" +
3313 3354 " <tr>\n" +
3314 3355 " <th><input st-search=\"group_name\" placeholder=\"search for group name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3315 3356 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3316 3357 " <th></th>\n" +
3317 3358 " <th></th>\n" +
3318 3359 " </tr>\n" +
3319 3360 " </thead>\n" +
3320 3361 " <tbody>\n" +
3321 3362 "\n" +
3322 3363 " <tr ng-repeat=\"group in displayedCollection track by group.id\">\n" +
3323 3364 " <td>{{group.group_name}}</td>\n" +
3324 3365 " <td>{{group.description}}</td>\n" +
3325 3366 " <td>{{group.member_count}}</td>\n" +
3326 3367 " <td>\n" +
3327 3368 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.group.update({groupId:group.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3328 3369 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3329 3370 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3330 3371 " <ul class=\"dropdown-menu\">\n" +
3331 3372 " <li><a>No</a></li>\n" +
3332 3373 " <li><a ng-click=\"$ctrl.removeGroup(group)\">Yes</a></li>\n" +
3333 3374 " </ul>\n" +
3334 3375 " </span>\n" +
3335 3376 " </tr>\n" +
3336 3377 " <tfoot>\n" +
3337 3378 " <tr>\n" +
3338 3379 " <td colspan=\"4\" class=\"text-center\">\n" +
3339 3380 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3340 3381 " </td>\n" +
3341 3382 " </tr>\n" +
3342 3383 " </tfoot>\n" +
3343 3384 " </tbody>\n" +
3344 3385 " </table>\n" +
3345 3386 "\n" +
3346 3387 "</div>\n" +
3347 3388 "\n"
3348 3389 );
3349 3390
3350 3391
3351 3392 $templateCache.put('components/views/admin-partitions-view/admin-partitions-view.html',
3352 3393 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.partitions\"></ng-include>\n" +
3353 3394 "\n" +
3354 3395 "<div ng-show=\"!$ctrl.loading.partitions\">\n" +
3355 3396 "\n" +
3356 3397 " <div class=\"panel panel-default\">\n" +
3357 3398 " <div class=\"panel-heading\">\n" +
3358 3399 " DELETE Daily Partitions\n" +
3359 3400 " </div>\n" +
3360 3401 "\n" +
3361 3402 " <form name=\"$ctrl.dailyPartitionsForm\"\n" +
3362 3403 " novalidate ng-submit=\"$ctrl.partitionsDelete('dailyPartitions')\"\n" +
3363 3404 " class=\"form-inline\"\n" +
3364 3405 " ng-class=\"{'has-error':$ctrl.dailyPartitionsForm.$invalid}\">\n" +
3365 3406 "\n" +
3366 3407 " <div class=\"panel-body\">\n" +
3367 3408 "\n" +
3368 3409 " <input type=\"text\" name=\"confirm\"\n" +
3369 3410 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control input-autosize\" confirm-validate required ng-model=\"$ctrl.dailyConfirm\">\n" +
3370 3411 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"$ctrl.dailyPartitionsForm.$invalid\">\n" +
3371 3412 " <input type=\"checkbox\" ng-model=\"$ctrl.dailyChecked\" ng-change=\"$ctrl.setCheckedList('dailyPartitions')\"> Check All\n" +
3372 3413 "\n" +
3373 3414 " </div>\n" +
3374 3415 "\n" +
3375 3416 " <table class=\"table table-striped\">\n" +
3376 3417 " <tr>\n" +
3377 3418 " <th class=\"c1 date\">Date</th>\n" +
3378 3419 " <th class=\"c2 indices\">Indices</th>\n" +
3379 3420 " </tr>\n" +
3380 3421 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.dailyPartitions\">\n" +
3381 3422 " <td class=\"c1\">{{row[0]}}</td>\n" +
3382 3423 " <td class=\"c2\">\n" +
3383 3424 " <ul class=\"list-group\">\n" +
3384 3425 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
3385 3426 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
3386 3427 " </li>\n" +
3387 3428 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
3388 3429 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
3389 3430 " </li>\n" +
3390 3431 " </ul>\n" +
3391 3432 " </td>\n" +
3392 3433 " </tr>\n" +
3393 3434 " </table>\n" +
3394 3435 " </form>\n" +
3395 3436 "\n" +
3396 3437 " </div>\n" +
3397 3438 "\n" +
3398 3439 " <div class=\"panel panel-default\">\n" +
3399 3440 " <div class=\"panel-heading\">\n" +
3400 3441 " DELETE Permanent Partitions\n" +
3401 3442 " </div>\n" +
3402 3443 "\n" +
3403 3444 " <form name=\"$ctrl.permanentPartitionsForm\" novalidate\n" +
3404 3445 " ng-submit=\"$ctrl.partitionsDelete('permanentPartitions')\"\n" +
3405 3446 " class=\"form-inline\"\n" +
3406 3447 " ng-class=\"{'has-error':$ctrl.permanentPartitionsForm.$invalid}\">\n" +
3407 3448 "\n" +
3408 3449 "\n" +
3409 3450 " <div class=\"panel-body\">\n" +
3410 3451 "\n" +
3411 3452 " <div class=\"form-group\">\n" +
3412 3453 " <input type=\"text\" name=\"confirm\"\n" +
3413 3454 " placeholder=\"Enter CONFIRM to proceed\" class=\"form-control\" confirm-validate required ng-model=\"$ctrl.permConfirm\">\n" +
3414 3455 " <input type=\"submit\" class=\"btn btn-danger\" ng-disabled=\"$ctrl.permanentPartitionsForm.$invalid\">\n" +
3415 3456 " <input type=\"checkbox\" ng-model=\"$ctrl.permChecked\" ng-change=\"$ctrl.setCheckedList('permanentPartitions')\"> Check All\n" +
3416 3457 " </div>\n" +
3417 3458 "\n" +
3418 3459 " </div>\n" +
3419 3460 "\n" +
3420 3461 " <table class=\"table table-striped\">\n" +
3421 3462 " <tr>\n" +
3422 3463 " <th class=\"c1 date\">Date</th>\n" +
3423 3464 " <th class=\"c2 indices\">Indices</th>\n" +
3424 3465 " </tr>\n" +
3425 3466 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.permanentPartitions\">\n" +
3426 3467 " <td class=\"c1\">{{row[0]}}</td>\n" +
3427 3468 " <td class=\"c2\">\n" +
3428 3469 " <ul class=\"list-group\">\n" +
3429 3470 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].elasticsearch\">\n" +
3430 3471 " <input name=\"es_index\" type=\"checkbox\" ng-model=\"partition.checked\"> ES: {{partition.name}}\n" +
3431 3472 " </li>\n" +
3432 3473 " <li class=\"list-group-item\" ng-repeat=\"partition in row[1].pg\">\n" +
3433 3474 " <input name=\"pg_index\" type=\"checkbox\" ng-model=\"partition.checked\"> PG: {{partition.name}}\n" +
3434 3475 " </li>\n" +
3435 3476 " </ul>\n" +
3436 3477 " </td>\n" +
3437 3478 " </tr>\n" +
3438 3479 " </table>\n" +
3439 3480 " </form>\n" +
3440 3481 "\n" +
3441 3482 " </div>\n" +
3442 3483 "\n" +
3443 3484 "</div>\n"
3444 3485 );
3445 3486
3446 3487
3447 3488 $templateCache.put('components/views/admin-system-view/admin-system-view.html',
3448 3489 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.system\"></ng-include>\n" +
3449 3490 "\n" +
3450 3491 "<div ng-if=\"$ctrl.loading.system == false\">\n" +
3451 3492 " <div class=\"row\">\n" +
3452 3493 " <div class=\"col-sm-12\">\n" +
3453 3494 " <div class=\"panel panel-default\">\n" +
3454 3495 " <div class=\"panel-heading\">\n" +
3455 3496 " <h3 class=\"panel-title\">\n" +
3456 3497 " System Info\n" +
3457 3498 " </h3>\n" +
3458 3499 " </div>\n" +
3459 3500 " <div class=\"panel-body\">\n" +
3460 3501 "\n" +
3461 3502 " <p><strong>System Load:</strong>\n" +
3462 3503 " 1min: {{$ctrl.systemLoad[0]}}, 5min: {{$ctrl.systemLoad[1]}}, 15min: {{$ctrl.systemLoad[2]}}\n" +
3463 3504 " </p>\n" +
3464 3505 " <p><strong>Awaiting tasks:</strong>\n" +
3465 3506 " <ul>\n" +
3466 3507 " <li>reports: {{$ctrl.queueStats.waiting_reports}}</li>\n" +
3467 3508 " <li>logs: {{$ctrl.queueStats.waiting_logs}}</li>\n" +
3468 3509 " <li>metrics: {{$ctrl.queueStats.waiting_metrics}}</li>\n" +
3469 3510 " <li>other: {{$ctrl.queueStats.waiting_other}}</li>\n" +
3470 3511 " </ul>\n" +
3471 3512 " </p>\n" +
3472 3513 " <p><strong>Queue stats from last minute:</strong>\n" +
3473 3514 " <ul>\n" +
3474 3515 " <li>Processed reports: {{$ctrl.queueStats.processed_reports}}</li>\n" +
3475 3516 " <li>Processed logs: {{$ctrl.queueStats.processed_logs}}</li>\n" +
3476 3517 " <li>Processed metrics: {{$ctrl.queueStats.processed_metrics}}</li>\n" +
3477 3518 " </ul>\n" +
3478 3519 " </p>\n" +
3479 3520 "\n" +
3480 3521 " <p><strong>Disks:</strong>\n" +
3481 3522 " <ul>\n" +
3482 3523 " <li ng-repeat=\"disk in $ctrl.disks\">\n" +
3483 3524 " <strong>{{disk.device}}</strong> {{disk.free}}/{{disk.total}}, {{disk.percentage}}% used\n" +
3484 3525 " </li>\n" +
3485 3526 " </ul>\n" +
3486 3527 " </p>\n" +
3487 3528 "\n" +
3488 3529 " <p><strong>Process stats:</strong>\n" +
3489 3530 " <ul>\n" +
3490 3531 " <li>FD soft limits: {{$ctrl.selfInfo.fds.soft}}</li>\n" +
3491 3532 " <li>FD hard limits: {{$ctrl.selfInfo.fds.hard}}</li>\n" +
3492 3533 " <li>Memlock soft limits: {{$ctrl.selfInfo.memlock.soft}}</li>\n" +
3493 3534 " <li>Memlock hard limits: {{$ctrl.selfInfo.memlock.hard}}</li>\n" +
3494 3535 " </ul>\n" +
3495 3536 " </p>\n" +
3496 3537 "\n" +
3497 3538 " </div>\n" +
3498 3539 " </div>\n" +
3499 3540 " </div>\n" +
3500 3541 " </div>\n" +
3501 3542 " <div class=\"row\">\n" +
3502 3543 " <div class=\"col-sm-12\">\n" +
3503 3544 "\n" +
3504 3545 " <div class=\"panel panel-default\">\n" +
3505 3546 " <div class=\"panel-body\">\n" +
3506 3547 "\n" +
3507 3548 " <uib-tabset>\n" +
3508 3549 " <uib-tab>\n" +
3509 3550 " <uib-tab-heading>\n" +
3510 3551 " Postgresql Tables\n" +
3511 3552 " </uib-tab-heading>\n" +
3512 3553 "\n" +
3513 3554 " <table class=\"table table-striped\">\n" +
3514 3555 " <thead>\n" +
3515 3556 " <tr>\n" +
3516 3557 " <th class=\"c1 tablename\">Table name</th>\n" +
3517 3558 " <th class=\"c2 size_human\">Size</th>\n" +
3518 3559 " </tr>\n" +
3519 3560 " </thead>\n" +
3520 3561 " <tbody>\n" +
3521 3562 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.DBtables\">\n" +
3522 3563 " <td class=\"c1\">{{row.table_name}}</td>\n" +
3523 3564 " <td class=\"c2\">{{row.size_human}}</td>\n" +
3524 3565 " </tr>\n" +
3525 3566 " </tbody>\n" +
3526 3567 " </table>\n" +
3527 3568 "\n" +
3528 3569 " </uib-tab>\n" +
3529 3570 "\n" +
3530 3571 " <uib-tab>\n" +
3531 3572 " <uib-tab-heading>\n" +
3532 3573 " Elasticsearch Indices\n" +
3533 3574 " </uib-tab-heading>\n" +
3534 3575 "\n" +
3535 3576 " <table class=\"table table-striped\">\n" +
3536 3577 " <thead>\n" +
3537 3578 " <tr>\n" +
3538 3579 " <th class=\"c1 tablename\">Index name</th>\n" +
3539 3580 " <th class=\"c2 size_human\">Size</th>\n" +
3540 3581 " </tr>\n" +
3541 3582 " </thead>\n" +
3542 3583 " <tbody>\n" +
3543 3584 " <tr class=\"r{{$index}}\" ng-repeat=\"row in $ctrl.ESIndices\">\n" +
3544 3585 " <td class=\"c1\">{{row.name}}</td>\n" +
3545 3586 " <td class=\"c2\">{{row.size_human}}</td>\n" +
3546 3587 " </tr>\n" +
3547 3588 " </tbody>\n" +
3548 3589 " </table>\n" +
3549 3590 "\n" +
3550 3591 " </uib-tab>\n" +
3551 3592 "\n" +
3552 3593 " <uib-tab>\n" +
3553 3594 " <uib-tab-heading>\n" +
3554 3595 " Processes\n" +
3555 3596 " </uib-tab-heading>\n" +
3556 3597 "\n" +
3557 3598 " <table class=\"table table-striped\">\n" +
3558 3599 " <thead>\n" +
3559 3600 " <tr>\n" +
3560 3601 " <th class=\"c1 tablename\">Owner</th>\n" +
3561 3602 " <th class=\"c2 tablename\">PID</th>\n" +
3562 3603 " <th class=\"c3 tablename\">CPU</th>\n" +
3563 3604 " <th class=\"c4 tablename\">MEM</th>\n" +
3564 3605 " <th class=\"c4 tablename\">Name</th>\n" +
3565 3606 " </tr>\n" +
3566 3607 " </thead>\n" +
3567 3608 " <tbody>\n" +
3568 3609 " <tr class=\"r{{$index}}\" ng-repeat-start=\"row in $ctrl.processInfo\">\n" +
3569 3610 " <td class=\"c1\">{{row.owner}}</td>\n" +
3570 3611 " <td class=\"c2\">{{row.pid}}</td>\n" +
3571 3612 " <td class=\"c3\">{{row.cpu}}</td>\n" +
3572 3613 " <td class=\"c4\">{{row.mem_usage}} ({{row.mem_percentage}}%)</td>\n" +
3573 3614 " <td class=\"c5\"><strong>{{row.name}}</strong></td>\n" +
3574 3615 " </tr>\n" +
3575 3616 " <tr ng-repeat-end>\n" +
3576 3617 " <td colspan=\"5\" class=\"word-wrap\">{{row.command}}</td>\n" +
3577 3618 " </tr>\n" +
3578 3619 " </tbody>\n" +
3579 3620 " </table>\n" +
3580 3621 "\n" +
3581 3622 " </uib-tab>\n" +
3582 3623 "\n" +
3583 3624 " <uib-tab>\n" +
3584 3625 " <uib-tab-heading>\n" +
3585 3626 " Python packages\n" +
3586 3627 " </uib-tab-heading>\n" +
3587 3628 "\n" +
3588 3629 " <table class=\"table\">\n" +
3589 3630 " <tr ng-repeat=\"package in $ctrl.packages\">\n" +
3590 3631 " <td>{{package.name}}</td>\n" +
3591 3632 " <td>{{package.version}}</td>\n" +
3592 3633 " </tr>\n" +
3593 3634 " </table>\n" +
3594 3635 " </p>\n" +
3595 3636 "\n" +
3596 3637 " </uib-tab>\n" +
3597 3638 "\n" +
3598 3639 " </uib-tabset>\n" +
3599 3640 " </div>\n" +
3600 3641 " </div>\n" +
3601 3642 " </div>\n" +
3602 3643 " </div>\n" +
3603 3644 "</div>\n"
3604 3645 );
3605 3646
3606 3647
3607 3648 $templateCache.put('components/views/admin-users-create-view/admin-users-create-view.html',
3608 3649 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.user\"></ng-include>\n" +
3609 3650 "\n" +
3610 3651 "<div ng-show=\"!$ctrl.loading.user\">\n" +
3611 3652 "\n" +
3612 3653 " <div class=\"panel panel-default\">\n" +
3613 3654 " <div class=\"panel-body\">\n" +
3614 3655 "\n" +
3615 3656 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"$ctrl.user.id\">\n" +
3616 3657 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-user-secret\"></span> Re-login to user</a>\n" +
3617 3658 " <ul class=\"dropdown-menu\">\n" +
3618 3659 " <li><a>No</a></li>\n" +
3619 3660 " <li><a ng-click=\"$ctrl.reloginUser(user)\">Yes</a></li>\n" +
3620 3661 " </ul>\n" +
3621 3662 " </span>\n" +
3622 3663 "\n" +
3623 3664 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.createUser()\">\n" +
3624 3665 " <div class=\"form-group\" id=\"row-user_name\">\n" +
3625 3666 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.user_name\"></data-form-errors>\n" +
3626 3667 " <label for=\"user_name\" id=\"label-user_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3627 3668 " User name\n" +
3628 3669 " <span class=\"required\">*</span>\n" +
3629 3670 " </label>\n" +
3630 3671 " <div class=\"col-sm-8 col-lg-9\">\n" +
3631 3672 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.user.user_name\">\n" +
3632 3673 " </div>\n" +
3633 3674 " </div>\n" +
3634 3675 "\n" +
3635 3676 " <div class=\"form-group\" id=\"row-user_password\">\n" +
3636 3677 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.user_password\"></data-form-errors>\n" +
3637 3678 " <label for=\"user_password\" id=\"label-user_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3638 3679 " Password\n" +
3639 3680 " <span class=\"required\">*</span>\n" +
3640 3681 " </label>\n" +
3641 3682 " <div class=\"col-sm-8 col-lg-9\">\n" +
3642 3683 " <input class=\"form-control\" id=\"user_password\" name=\"user_password\" type=\"password\" ng-model=\"$ctrl.user.user_password\">\n" +
3643 3684 "\n" +
3644 3685 " <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" +
3645 3686 " <span ng-show=\"$ctrl.gen_pass.length > 0\">(generated password: {{$ctrl.gen_pass}})</span>\n" +
3646 3687 " </p>\n" +
3647 3688 "\n" +
3648 3689 " </div>\n" +
3649 3690 " </div>\n" +
3650 3691 "\n" +
3651 3692 "\n" +
3652 3693 " <div class=\"form-group\" id=\"row-email\">\n" +
3653 3694 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
3654 3695 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3655 3696 " Email Address\n" +
3656 3697 " <span class=\"required\">*</span>\n" +
3657 3698 " </label>\n" +
3658 3699 " <div class=\"col-sm-8 col-lg-9\">\n" +
3659 3700 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
3660 3701 " </div>\n" +
3661 3702 " </div>\n" +
3662 3703 "\n" +
3663 3704 " <div class=\"form-group\" id=\"row-first_name\">\n" +
3664 3705 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
3665 3706 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3666 3707 " First Name\n" +
3667 3708 " </label>\n" +
3668 3709 " <div class=\"col-sm-8 col-lg-9\">\n" +
3669 3710 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
3670 3711 " </div>\n" +
3671 3712 " </div>\n" +
3672 3713 " <div class=\"form-group\" id=\"row-last_name\">\n" +
3673 3714 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
3674 3715 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3675 3716 " Last Name\n" +
3676 3717 " </label>\n" +
3677 3718 " <div class=\"col-sm-8 col-lg-9\">\n" +
3678 3719 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
3679 3720 " </div>\n" +
3680 3721 " </div>\n" +
3681 3722 "\n" +
3682 3723 " <div class=\"form-group\" id=\"row-status\">\n" +
3683 3724 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.status\"></data-form-errors>\n" +
3684 3725 " <label for=\"status\" id=\"label-status\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3685 3726 " Active\n" +
3686 3727 " </label>\n" +
3687 3728 " <div class=\"col-sm-8 col-lg-9\">\n" +
3688 3729 " <input checked class=\"form-control\" id=\"status\" name=\"status\" type=\"checkbox\" ng-model=\"$ctrl.user.status\">\n" +
3689 3730 " </div>\n" +
3690 3731 " </div>\n" +
3691 3732 "\n" +
3692 3733 " <div class=\"form-group\" id=\"row-submit\">\n" +
3693 3734 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
3694 3735 " </label>\n" +
3695 3736 " <div class=\"col-sm-8 col-lg-9\">\n" +
3696 3737 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.$state.params.userId ? 'Update' : 'Add'}} User\">\n" +
3697 3738 " </div>\n" +
3698 3739 " </div>\n" +
3699 3740 " </form>\n" +
3700 3741 " </div>\n" +
3701 3742 " </div>\n" +
3702 3743 "\n" +
3703 3744 "\n" +
3704 3745 " <div class=\"panel panel-default\" ng-if=\"$ctrl.user.id\">\n" +
3705 3746 " <div class=\"panel-heading\">\n" +
3706 3747 " <h3 class=\"panel-title\">Permission Summary</h3>\n" +
3707 3748 " </div>\n" +
3708 3749 " <div class=\"panel-body\">\n" +
3709 3750 " <h3>Direct application permissions</h3>\n" +
3710 3751 "\n" +
3711 3752 " <ul class=\"list-group\">\n" +
3712 3753 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.user.application\" class=\"animate-repeat list-group-item\">\n" +
3713 3754 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3714 3755 " <div class=\"pull-right\">\n" +
3715 3756 "\n" +
3716 3757 " <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" +
3717 3758 "\n" +
3718 3759 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Application\" data-ui-sref=\"applications.update({resourceId:perm.self.resource_id})\">\n" +
3719 3760 " <span class=\"fa fa-cog\"></span>\n" +
3720 3761 " </a>\n" +
3721 3762 " </div>\n" +
3722 3763 " </li>\n" +
3723 3764 " </ul>\n" +
3724 3765 "\n" +
3725 3766 " <h3>Direct dashboard permissions</h3>\n" +
3726 3767 "\n" +
3727 3768 " <ul class=\"list-group\">\n" +
3728 3769 " <li ng-repeat=\"perm in $ctrl.resourcePermissions.user.dashboard\" class=\"animate-repeat list-group-item\">\n" +
3729 3770 " <strong>{{ perm.self.resource_name }}</strong>\n" +
3730 3771 " <div class=\"pull-right\">\n" +
3731 3772 "\n" +
3732 3773 " <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" +
3733 3774 "\n" +
3734 3775 " <a class=\"btn btn-default btn-xs\" data-uib-tooltip=\"Visit Dashboard\" data-ui-sref=\"dashboard.update({resourceId:perm.self.resource_id})\">\n" +
3735 3776 " <span class=\"fa fa-cog\"></span>\n" +
3736 3777 " </a>\n" +
3737 3778 " </div>\n" +
3738 3779 " </li>\n" +
3739 3780 " </ul>\n" +
3740 3781 "\n" +
3741 3782 " </div>\n" +
3742 3783 "\n" +
3743 3784 " </div>\n" +
3744 3785 "\n" +
3745 3786 "\n" +
3746 3787 "</div>\n"
3747 3788 );
3748 3789
3749 3790
3750 3791 $templateCache.put('components/views/admin-users-list-view/admin-users-list-view.html',
3751 3792 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.users\"></ng-include>\n" +
3752 3793 "\n" +
3753 3794 "<div ng-show=\"!$ctrl.loading.users\">\n" +
3754 3795 "\n" +
3755 3796 " <div class=\"panel panel-default\">\n" +
3756 3797 "\n" +
3757 3798 " <div class=\"panel-heading\">\n" +
3758 3799 " {{$ctrl.activeUsers}} active out of {{$ctrl.users.length}} users\n" +
3759 3800 " </div>\n" +
3760 3801 "\n" +
3761 3802 "\n" +
3762 3803 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.users\" class=\"table table-striped\">\n" +
3763 3804 " <thead>\n" +
3764 3805 " <tr>\n" +
3765 3806 " <th class=\"user_name\" st-sort=\"user_name\"><a>Username</a></th>\n" +
3766 3807 " <th class=\"email\" st-sort=\"email\"><a>Email</a></th>\n" +
3767 3808 " <th class=\"status\" st-sort=\"status\"><a>Status</a></th>\n" +
3768 3809 " <th st-sort=\"first_name\"><a>First Name</a></th>\n" +
3769 3810 " <th st-sort=\"last_name\"><a>Last Name</a></th>\n" +
3770 3811 " <th st-sort=\"last_login_date\"><a>Last login</a></th>\n" +
3771 3812 " <th class=\"options\"></th>\n" +
3772 3813 " </tr>\n" +
3773 3814 " <tr>\n" +
3774 3815 " <th><input st-search=\"user_name\" placeholder=\"search for user name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3775 3816 " <th><input st-search=\"email\" placeholder=\"search for email\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3776 3817 " <th></th>\n" +
3777 3818 " <th><input st-search=\"first_name\" placeholder=\"search for first name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3778 3819 " <th><input st-search=\"last_name\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3779 3820 " <th><input st-search=\"last_login_date\" placeholder=\"search for last name\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
3780 3821 " <th></th>\n" +
3781 3822 " </tr>\n" +
3782 3823 " </thead>\n" +
3783 3824 " <tbody>\n" +
3784 3825 "\n" +
3785 3826 " <tr ng-repeat=\"user in displayedCollection track by user.id\">\n" +
3786 3827 " <td><img src=\"{{user.gravatar_url}}\" class=\"avatar\"> {{user.user_name}}</td>\n" +
3787 3828 " <td class=\"word-wrap small\">{{user.email}}</td>\n" +
3788 3829 " <td class=\"text-center\"><span class=\"fa\" ng-class=\"{'fa-check-circle':user.status, 'fa-times':!user.status}\"></span></td>\n" +
3789 3830 " <td class=\"word-wrap small\">{{user.first_name}}</td>\n" +
3790 3831 " <td class=\"word-wrap small\">{{user.last_name}}</td>\n" +
3791 3832 " <td><span data-uib-tooltip=\"{{user.last_login_date}}\" class=\"small\">{{user.last_login_date | isoToRelativeTime}}</span></td>\n" +
3792 3833 " <td>\n" +
3793 3834 " <a class=\"btn btn-default btn-sm\" data-ui-sref=\"admin.user.update({userId:user.id})\"><span class=\"fa fa-cog\"></span></a>\n" +
3794 3835 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
3795 3836 " <a class=\"btn btn-danger btn-sm\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
3796 3837 " <ul class=\"dropdown-menu\">\n" +
3797 3838 " <li><a>No</a></li>\n" +
3798 3839 " <li><a ng-click=\"$ctrl.removeUser(user)\">Yes</a></li>\n" +
3799 3840 " </ul>\n" +
3800 3841 " </span>\n" +
3801 3842 " </tr>\n" +
3802 3843 " <tfoot>\n" +
3803 3844 " <tr>\n" +
3804 3845 " <td colspan=\"6\" class=\"text-center\">\n" +
3805 3846 " <div st-pagination=\"\" st-items-by-page=\"100\" st-displayed-pages=\"7\"></div>\n" +
3806 3847 " </td>\n" +
3807 3848 " </tr>\n" +
3808 3849 " </tfoot>\n" +
3809 3850 " </tbody>\n" +
3810 3851 " </table>\n" +
3811 3852 "\n" +
3812 3853 "\n" +
3813 3854 " </div>\n" +
3814 3855 "</div>\n"
3815 3856 );
3816 3857
3817 3858
3818 3859 $templateCache.put('components/views/admin-view/admin-view.html',
3819 3860 "<div class=\"row\">\n" +
3820 3861 " <div class=\"col-sm-3\" id=\"menu\">\n" +
3821 3862 " <div class=\"panel panel-default\">\n" +
3822 3863 " <div class=\"panel-heading\">Users and groups</div>\n" +
3823 3864 " <ul class=\"list-group\">\n" +
3824 3865 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.list\"> Users</a></li>\n" +
3825 3866 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.user.create\"> Create user</a></li>\n" +
3826 3867 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.list\"> Groups</a></li>\n" +
3827 3868 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.group.create\"> Create group</a></li>\n" +
3828 3869 " </ul>\n" +
3829 3870 "\n" +
3830 3871 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.adminNav.menuUsersItems.length\">\n" +
3831 3872 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.adminNav.menuUsersItems\">\n" +
3832 3873 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
3833 3874 " </li>\n" +
3834 3875 " </ul>\n" +
3835 3876 "\n" +
3836 3877 " </div>\n" +
3837 3878 " <div class=\"panel panel-default\">\n" +
3838 3879 " <div class=\"panel-heading\">Resources</div>\n" +
3839 3880 " <ul class=\"list-group\">\n" +
3840 3881 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.application.list\"> List applications</a></li>\n" +
3841 3882 " </ul>\n" +
3842 3883 "\n" +
3843 3884 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.adminNav.menuResourcesItems.length\">\n" +
3844 3885 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.adminNav.menuResourcesItems\">\n" +
3845 3886 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
3846 3887 " </li>\n" +
3847 3888 " </ul>\n" +
3848 3889 "\n" +
3849 3890 " </div>\n" +
3850 3891 "\n" +
3851 3892 " <div class=\"panel panel-default\">\n" +
3852 3893 " <div class=\"panel-heading\">System</div>\n" +
3853 3894 " <ul class=\"list-group\">\n" +
3854 3895 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.configs.list\"> Config variables</a></li>\n" +
3855 3896 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.system\"> System</a></li>\n" +
3856 3897 " <li class=\"list-group-item\" ui-sref-active=\"active\"><a data-ui-sref=\"admin.partitions\"> Partition Management</a></li>\n" +
3857 3898 " </ul>\n" +
3858 3899 "\n" +
3859 3900 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.adminNav.menuSystemItems.length\">\n" +
3860 3901 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.adminNav.menuSystemItems\">\n" +
3861 3902 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
3862 3903 " </li>\n" +
3863 3904 " </ul>\n" +
3864 3905 "\n" +
3865 3906 " </div>\n" +
3866 3907 " </div>\n" +
3867 3908 "\n" +
3868 3909 " <div class=\"col-sm-9\" ui-view></div>\n" +
3869 3910 "</div>\n"
3870 3911 );
3871 3912
3872 3913
3873 3914 $templateCache.put('components/views/applications-integrations-view/applications-integrations-view.html',
3874 3915 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application && $state.is('applications.integrations')\"></ng-include>\n" +
3875 3916 "\n" +
3876 3917 "<ui-view>\n" +
3877 3918 " <div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application\">\n" +
3878 3919 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3879 3920 " <div class=\"panel-body\">\n" +
3880 3921 "\n" +
3881 3922 " <a class=\"btn btn-default integration\"\n" +
3882 3923 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'bitbucket'})\">\n" +
3883 3924 " <span class=\"fa fa-fw fa-bitbucket fa-3x pull-left\"></span>\n" +
3884 3925 " <strong>Bitbucket</strong>\n" +
3885 3926 "\n" +
3886 3927 " <p>Send issues and reports to Bitbucket</p>\n" +
3887 3928 " </a>\n" +
3888 3929 "\n" +
3889 3930 " <a class=\"btn btn-default integration\"\n" +
3890 3931 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'campfire'})\">\n" +
3891 3932 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3892 3933 " <strong>Campfire</strong>\n" +
3893 3934 "\n" +
3894 3935 " <p>Receive reports and alerts in your Campfire rooms</p>\n" +
3895 3936 " </a>\n" +
3896 3937 "\n" +
3897 3938 " <a class=\"btn btn-default integration\"\n" +
3898 3939 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'flowdock'})\">\n" +
3899 3940 " <span class=\"fa fa-fw fa-envelope fa-3x pull-left\"></span>\n" +
3900 3941 " <strong>Flowdock</strong>\n" +
3901 3942 "\n" +
3902 3943 " <p>Receive reports and alerts on your Flowdock team\n" +
3903 3944 " inbox</p>\n" +
3904 3945 " </a>\n" +
3905 3946 "\n" +
3906 3947 " <a class=\"btn btn-default integration\"\n" +
3907 3948 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'github'})\">\n" +
3908 3949 " <span class=\"fa fa-fw fa-github fa-3x pull-left\"></span>\n" +
3909 3950 " <strong>Github</strong>\n" +
3910 3951 "\n" +
3911 3952 " <p>Send issues and reports to Github</p>\n" +
3912 3953 " </a>\n" +
3913 3954 "\n" +
3914 3955 " <a class=\"btn btn-default integration\"\n" +
3915 3956 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'hipchat'})\">\n" +
3916 3957 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3917 3958 " <strong>HipChat</strong>\n" +
3918 3959 "\n" +
3919 3960 " <p>Receive reports and alerts in your Hipchat chanels</p>\n" +
3920 3961 " </a>\n" +
3921 3962 "\n" +
3922 3963 " <a class=\"btn btn-default integration\"\n" +
3923 3964 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'jira'})\">\n" +
3924 3965 " <span class=\"fa fa-fw fa-ticket fa-3x pull-left\"></span>\n" +
3925 3966 " <strong>Jira</strong>\n" +
3926 3967 "\n" +
3927 3968 " <p>Send issues and reports to Jira</p>\n" +
3928 3969 " </a>\n" +
3929 3970 "\n" +
3930 3971 " <a class=\"btn btn-default integration\"\n" +
3931 3972 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'slack'})\">\n" +
3932 3973 " <span class=\"fa fa-fw fa-comment fa-3x pull-left\"></span>\n" +
3933 3974 " <strong>Slack</strong>\n" +
3934 3975 "\n" +
3935 3976 " <p>Receive reports and alerts in your Slack chanels</p>\n" +
3936 3977 " </a>\n" +
3937 3978 "\n" +
3938 3979 " <a class=\"btn btn-default integration\"\n" +
3939 3980 " data-ui-sref=\"applications.integrations.edit({resourceId:$ctrl.resource.resource_id, integration:'webhooks'})\">\n" +
3940 3981 " <span class=\"fa fa-fw fa-cloud-upload fa-3x pull-left\"></span>\n" +
3941 3982 " <strong>Webhooks</strong>\n" +
3942 3983 "\n" +
3943 3984 " <p>Notify third party API's of your reports and alerts</p>\n" +
3944 3985 " </a>\n" +
3945 3986 " </div>\n" +
3946 3987 " </div>\n" +
3947 3988 "</ui-view>\n"
3948 3989 );
3949 3990
3950 3991
3951 3992 $templateCache.put('components/views/applications-list-view/applications-list-view.html',
3952 3993 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3953 3994 "\n" +
3954 3995 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.applications\">\n" +
3955 3996 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3956 3997 " <div class=\"panel-body\" ng-if=\"$ctrl.applications.length === 0 \">\n" +
3957 3998 "\n" +
3958 3999 " <p>You have to create a new application first.</p>\n" +
3959 4000 "\n" +
3960 4001 " </div>\n" +
3961 4002 "\n" +
3962 4003 " <table class=\"table table-striped\" ng-if=\"$ctrl.applications.length > 0\">\n" +
3963 4004 " <thead>\n" +
3964 4005 " <tr>\n" +
3965 4006 " <th class=\"resource_name\">Resource Name</th>\n" +
3966 4007 " <th class=\"domains\">Domains</th>\n" +
3967 4008 " <th class=\"options\">Options</th>\n" +
3968 4009 " </tr>\n" +
3969 4010 " </thead>\n" +
3970 4011 " <tbody>\n" +
3971 4012 " <tr class=\"r{{$index+1}}\" ng-repeat=\"application in $ctrl.applications\">\n" +
3972 4013 " <td>{{application.resource_name}}</td>\n" +
3973 4014 " <td>{{application.domains}}</td>\n" +
3974 4015 " <td class=\"options\">\n" +
3975 4016 " <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" +
3976 4017 " <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" +
3977 4018 " </td>\n" +
3978 4019 " </tr>\n" +
3979 4020 " </tbody>\n" +
3980 4021 " </table>\n" +
3981 4022 "\n" +
3982 4023 "</div>\n"
3983 4024 );
3984 4025
3985 4026
3986 4027 $templateCache.put('components/views/applications-purge-logs-view/applications-purge-logs-view.html',
3987 4028 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.applications\"></ng-include>\n" +
3988 4029 "\n" +
3989 4030 "<div ng-show=\"!$ctrl.loading.applications\">\n" +
3990 4031 " <div class=\"panel panel-default\">\n" +
3991 4032 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
3992 4033 " <div class=\"panel-body\">\n" +
3993 4034 "\n" +
3994 4035 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.form\" ng-submit=\"$ctrl.purgeLogs()\">\n" +
3995 4036 " <div class=\"form-group\">\n" +
3996 4037 " <label class=\"control-label col-sm-3 col-lg-2\">Application:</label>\n" +
3997 4038 "\n" +
3998 4039 " <div class=\"col-sm-9 col-lg-10 form-inline\">\n" +
3999 4040 " <select ng-model=\"$ctrl.selectedResource\" ng-change=\"$ctrl.getCommonKeys()\"\n" +
4000 4041 " ng-options=\"r.resource_id as r.resource_name for r in $ctrl.applications\" class=\"form-control\"></select>\n" +
4001 4042 " </div>\n" +
4002 4043 " </div>\n" +
4003 4044 "\n" +
4004 4045 " <div class=\"form-group\">\n" +
4005 4046 " <label class=\"control-label col-sm-3 col-lg-2\">Namespace:</label>\n" +
4006 4047 "\n" +
4007 4048 " <div class=\"col-sm-9 col-lg-10\">\n" +
4008 4049 " <input type=\"text\" name=\"namespace\" ng-model=\"$ctrl.namespace\"\n" +
4009 4050 " placeholder=\"Namespace to filter on\" uib-typeahead=\"ns for ns in $ctrl.commonNamespaces\"\n" +
4010 4051 " class=\"form-control\">\n" +
4011 4052 " </div>\n" +
4012 4053 " </div>\n" +
4013 4054 "\n" +
4014 4055 " <div class=\"form-group\">\n" +
4015 4056 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4016 4057 "\n" +
4017 4058 " <div class=\"col-sm-8 col-lg-9 \">\n" +
4018 4059 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Purge logs meeting the criteria\">\n" +
4019 4060 " </div>\n" +
4020 4061 " </div>\n" +
4021 4062 "\n" +
4022 4063 " </form>\n" +
4023 4064 " </div>\n" +
4024 4065 " </div>\n" +
4025 4066 "</div>\n"
4026 4067 );
4027 4068
4028 4069
4029 4070 $templateCache.put('components/views/applications-update-view/applications-update-view.html',
4030 4071 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application\"></ng-include>\n" +
4031 4072 "\n" +
4032 4073 "<div ng-show=\"!$ctrl.loading.application\">\n" +
4033 4074 "\n" +
4034 4075 " <div class=\"panel panel-default\">\n" +
4035 4076 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4036 4077 " <div class=\"panel-body\">\n" +
4037 4078 "\n" +
4038 4079 " <div class=\"row\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4039 4080 " <div class=\"col-sm-6\">\n" +
4040 4081 "\n" +
4041 4082 " <uib-tabset>\n" +
4042 4083 " <uib-tab>\n" +
4043 4084 " <uib-tab-heading>\n" +
4044 4085 " API keys\n" +
4045 4086 " </uib-tab-heading>\n" +
4046 4087 "\n" +
4047 4088 " <p><strong>PRIVATE API KEY:</strong></p>\n" +
4048 4089 " <p>\n" +
4049 4090 " <div class=\"well well-sm\">{{ $ctrl.resource.api_key }}</div>\n" +
4050 4091 " </p>\n" +
4051 4092 " <p><strong>PUBLIC API KEY</strong> (for javascript clients):</p>\n" +
4052 4093 " <p>\n" +
4053 4094 " <div class=\"well well-sm\">{{ $ctrl.resource.public_key }}</div>\n" +
4054 4095 " </p>\n" +
4055 4096 " <p><small>Your key will be used to identify to which application your data\n" +
4056 4097 " belongs to please keep them private at all times.</small></p>\n" +
4057 4098 "\n" +
4058 4099 " </uib-tab>\n" +
4059 4100 "\n" +
4060 4101 " <uib-tab>\n" +
4061 4102 " <uib-tab-heading>\n" +
4062 4103 " <span class=\"btn btn-danger btn-xs\"><span class=\"fa fa-exclamation-triangle\"></span></span> Regenerate API keys\n" +
4063 4104 " </uib-tab-heading>\n" +
4064 4105 " <p>Are you sure you want to regenerate API KEY for this application?</p>\n" +
4065 4106 " <p>All client application keys will need to be updated.</p>\n" +
4066 4107 " <form ng-submit=\"$ctrl.regenerateAPIKeys()\" name=\"$ctrl.regenerateAPIKeysForm\" class=\"form-inline\">\n" +
4067 4108 " <data-form-errors errors=\"$ctrl.regenerateAPIKeysForm.ae_validation.password\"></data-form-errors>\n" +
4068 4109 " <div class=\"form-group\">\n" +
4069 4110 " <input type=\"password\" name=\"confirm\"\n" +
4070 4111 " placeholder=\"Enter your password to proceed\" class=\"form-control\" ng-model=\"$ctrl.regenerateAPIKeysPassword\">\n" +
4071 4112 " <input type=\"submit\" class=\"btn btn-danger\" value=\"Confirm\">\n" +
4072 4113 " </div>\n" +
4073 4114 " </form>\n" +
4074 4115 " </uib-tab>\n" +
4075 4116 " </uib-tabset>\n" +
4076 4117 " </div>\n" +
4077 4118 " <div class=\"col-sm-6 text-center\">\n" +
4078 4119 " <h2 class=\"m-t-0\">How to connect your application?</h2>\n" +
4079 4120 " <p>Visit our <a href=\"{{AeConfig.urls.docs}}\"><strong>developer documentation</strong></a> for step-by-step integration instructions.</p>\n" +
4080 4121 " <div class=\"clearfix\"></div>\n" +
4081 4122 " <p class=\"text-center\">\n" +
4082 4123 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/django_small.png\" alt=\"Django Logo\">\n" +
4083 4124 " <img src=\"/static/appenlight/images/logos/pyramid_small.png\" alt=\"Pyramid Logo\">\n" +
4084 4125 " <img src=\"/static/appenlight/images/logos/flask_small.png\" alt=\"Flask Logo\"></a>\n" +
4085 4126 "\n" +
4086 4127 " <a href=\"{{AeConfig.urls.docs}}\"><img src=\"/static/appenlight/images/logos/js_small.png\" alt=\"Javascript Logo\">\n" +
4087 4128 " <img src=\"/static/appenlight/images/logos/nodejs.png\" alt=\"Node.js\"></a>\n" +
4088 4129 " <img src=\"/static/appenlight/images/logos/ruby_small.png\" alt=\"Ruby Logo\">\n" +
4089 4130 " <img src=\"/static/appenlight/images/logos/php_small.png\" alt=\"PHP Logo\">\n" +
4090 4131 " </a>\n" +
4091 4132 "\n" +
4092 4133 " </p>\n" +
4093 4134 " </div>\n" +
4094 4135 " </div>\n" +
4095 4136 "\n" +
4096 4137 " <hr ng-show=\"$ctrl.resource.resource_id\">\n" +
4097 4138 "\n" +
4098 4139 " <form method=\"post\" class=\"form-horizontal\" name=\"$ctrl.BasicForm\" ng-submit=\"$ctrl.updateBasicForm()\" novalidate>\n" +
4099 4140 " <div class=\"form-group\">\n" +
4100 4141 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.resource_name\"></data-form-errors>\n" +
4101 4142 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4102 4143 " Application name\n" +
4103 4144 " <span class=\"required\">*</span>\n" +
4104 4145 " </label>\n" +
4105 4146 "\n" +
4106 4147 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4107 4148 " <input class=\"form-control\" name=\"resource_name\" placeholder=\"Application Name\" type=\"text\" ng-model=\"$ctrl.resource.resource_name\">\n" +
4108 4149 " </div>\n" +
4109 4150 "\n" +
4110 4151 "\n" +
4111 4152 " </div>\n" +
4112 4153 "\n" +
4113 4154 " <div class=\"form-group\">\n" +
4114 4155 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.domains\"></data-form-errors>\n" +
4115 4156 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4116 4157 " Domain names for CORS headers\n" +
4117 4158 " </label>\n" +
4118 4159 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4119 4160 " <textarea class=\"form-control\" name=\"domains\" ng-model=\"$ctrl.resource.domains\"></textarea>\n" +
4120 4161 " <p class=\"description\">Required for Javascript error tracking (one line one domain, skip http:// part)</p>\n" +
4121 4162 " </div>\n" +
4122 4163 "\n" +
4123 4164 "\n" +
4124 4165 " </div>\n" +
4125 4166 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4126 4167 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.default_grouping\"></data-form-errors>\n" +
4127 4168 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4128 4169 " Default grouping for errors\n" +
4129 4170 " </label>\n" +
4130 4171 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4131 4172 " <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" +
4132 4173 " </div>\n" +
4133 4174 "\n" +
4134 4175 " </div>\n" +
4135 4176 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4136 4177 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.error_report_threshold\"></data-form-errors>\n" +
4137 4178 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4138 4179 " Alert on error reports\n" +
4139 4180 " <span class=\"required\">*</span>\n" +
4140 4181 " </label>\n" +
4141 4182 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4142 4183 " <input class=\"form-control\" name=\"error_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.error_report_threshold\">\n" +
4143 4184 " <p class=\"description\">Application requires to send at least this amount of error reports per minute to open alert</p>\n" +
4144 4185 " </div>\n" +
4145 4186 " </div>\n" +
4146 4187 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4147 4188 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.slow_report_threshold\"></data-form-errors>\n" +
4148 4189 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4149 4190 " Alert on slow reports\n" +
4150 4191 " <span class=\"required\">*</span>\n" +
4151 4192 " </label>\n" +
4152 4193 "\n" +
4153 4194 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4154 4195 " <input class=\"form-control\" name=\"slow_report_threshold\" type=\"text\" ng-model=\"$ctrl.resource.slow_report_threshold\">\n" +
4155 4196 " <p class=\"description\">Application requires to send at least this amount of slow reports per minute to open alert</p>\n" +
4156 4197 " </div>\n" +
4157 4198 " </div>\n" +
4158 4199 " <div class=\"form-group\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4159 4200 " <data-form-errors errors=\"$ctrl.BasicForm.ae_validation.allow_permanent_storage\"></data-form-errors>\n" +
4160 4201 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4161 4202 " Permanent logs\n" +
4162 4203 " </label>\n" +
4163 4204 " <div class=\" col-sm-8 col-lg-9\">\n" +
4164 4205 " <input class=\"form-control\" name=\"allow_permanent_storage\" type=\"checkbox\" ng-model=\"$ctrl.resource.allow_permanent_storage\">\n" +
4165 4206 " <p class=\"description\">Allow permanent storage of logs in separate DB partitions (only administrator can enable this feature)</p>\n" +
4166 4207 " </div>\n" +
4167 4208 " </div>\n" +
4168 4209 " <div class=\"form-group\">\n" +
4169 4210 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4170 4211 "\n" +
4171 4212 " </label>\n" +
4172 4213 "\n" +
4173 4214 " <div class=\" col-sm-8 col-lg-9 \">\n" +
4174 4215 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"{{$ctrl.resource.resource_id? 'Update' : 'Create'}} Application\">\n" +
4175 4216 " </div>\n" +
4176 4217 " </div>\n" +
4177 4218 " </form>\n" +
4178 4219 " </div>\n" +
4179 4220 " </div>\n" +
4180 4221 "\n" +
4181 4222 " <div class=\"panel panel-default\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4182 4223 " <div class=\"panel-heading\">\n" +
4183 4224 " <h3 class=\"panel-title\">Plugins</h3>\n" +
4184 4225 " </div>\n" +
4185 4226 " <div class=\"panel-body\">\n" +
4186 4227 "\n" +
4187 4228 " <plugin-config resource=\"$ctrl.resource\"\n" +
4188 4229 " section=\"'application.update'\"\n" +
4189 4230 " ng-if=\"$ctrl.resource.resource_id\">\n" +
4190 4231 " </plugin-config>\n" +
4191 4232 "\n" +
4192 4233 " </div>\n" +
4193 4234 " </div>\n" +
4194 4235 "\n" +
4195 4236 " <div class=\"panel panel-default m-t-1\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4196 4237 " <div class=\"panel-heading\">\n" +
4197 4238 " <h3 class=\"panel-title\">API Testing</h3>\n" +
4198 4239 " </div>\n" +
4199 4240 " <div class=\"panel-body\">\n" +
4200 4241 " <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" +
4201 4242 " <p>This will enable AppEnlight to send you notification emails about errors inside your $ctrl.</p>\n" +
4202 4243 " <p><strong>After this is done you can use this CURL commands to test APIs:</strong></p>\n" +
4203 4244 " <p>(Please note that the data like execution times is semi randomly generated)</p>\n" +
4204 4245 " <uib-tabset>\n" +
4205 4246 " <uib-tab>\n" +
4206 4247 " <uib-tab-heading>\n" +
4207 4248 " Log API\n" +
4208 4249 " </uib-tab-heading>\n" +
4209 4250 "\n" +
4210 4251 " <div class=\"codehilite\">\n" +
4211 4252 " <pre class=\"m-a-0\">\n" +
4212 4253 "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" +
4213 4254 " [\n" +
4214 4255 " {\n" +
4215 4256 " \"log_level\": \"WARNING\",\n" +
4216 4257 " \"message\": \"OMG ValueError happened\",\n" +
4217 4258 " \"namespace\": \"some.namespace.indicator\",\n" +
4218 4259 " \"request_id\": \"SOME_UUID\",\n" +
4219 4260 " \"permanent\": false,\n" +
4220 4261 " \"primary_key\": \"random_key\",\n" +
4221 4262 " \"server\": \"some.server.hostname\",\n" +
4222 4263 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4223 4264 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]]\n" +
4224 4265 " },\n" +
4225 4266 " {\n" +
4226 4267 " \"log_level\": \"ERROR\",\n" +
4227 4268 " \"message\": \"OMG ValueError happened2\",\n" +
4228 4269 " \"namespace\": \"some.namespace.indicator\",\n" +
4229 4270 " \"request_id\": \"SOME_UUID\",\n" +
4230 4271 " \"permanent\": false,\n" +
4231 4272 " \"server\": \"some.server.hostname\",\n" +
4232 4273 " \"date\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\"\n" +
4233 4274 " }\n" +
4234 4275 " ]'\n" +
4235 4276 " </pre>\n" +
4236 4277 " </div>\n" +
4237 4278 "\n" +
4238 4279 " </uib-tab>\n" +
4239 4280 "\n" +
4240 4281 " <uib-tab>\n" +
4241 4282 " <uib-tab-heading>\n" +
4242 4283 " Report API\n" +
4243 4284 " </uib-tab-heading>\n" +
4244 4285 "\n" +
4245 4286 " <div class=\"codehilite\">\n" +
4246 4287 " <pre class=\"m-a-0\">\n" +
4247 4288 "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" +
4248 4289 " [{\n" +
4249 4290 " \"client\": \"your-client-name-python\",\n" +
4250 4291 " \"language\": \"python\",\n" +
4251 4292 " \"view_name\": \"views/foo:bar\",\n" +
4252 4293 " \"server\": \"SERVERNAME/INSTANCENAME\",\n" +
4253 4294 " \"priority\": 5,\n" +
4254 4295 " \"error\": \"OMG ValueError happened\",\n" +
4255 4296 " \"occurences\":1,\n" +
4256 4297 " \"http_status\": 500,\n" +
4257 4298 " \"tags\": [[\"tag1\",\"value\"], [\"tag2\", 5]],\n" +
4258 4299 " \"username\": \"USER\",\n" +
4259 4300 " \"url\": \"HTTP://SOMEURL\",\n" +
4260 4301 " \"ip\": \"127.0.0.1\",\n" +
4261 4302 " \"start_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4262 4303 " \"end_time\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(2, 'seconds').toISOString()}}\",\n" +
4263 4304 " \"user_agent\": \"BROWSER_AGENT\",\n" +
4264 4305 " \"extra\": [[\"message\",\"CUSTOM MESSAGE\"], [\"custom_value\", \"some payload\"]],\n" +
4265 4306 " \"request_id\": \"SOME_UUID\",\n" +
4266 4307 " \"request\": {\"REQUEST_METHOD\": \"GET\",\n" +
4267 4308 " \"PATH_INFO\": \"/FOO/BAR\",\n" +
4268 4309 " \"POST\": {\"FOO\":\"BAZ\",\"XXX\":\"YYY\"}\n" +
4269 4310 " },\n" +
4270 4311 " \"slow_calls\":[{\n" +
4271 4312 " \"start\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4272 4313 " \"end\": \"{{$ctrl.momentJs.utc().milliseconds(0).add(1, 'seconds').toISOString()}}\",\n" +
4273 4314 " \"type\": \"sql\",\n" +
4274 4315 " \"subtype\": \"postgresql\",\n" +
4275 4316 " \"parameters\": [\"QPARAM1\",\"QPARAM2\",\"QPARAMX\"],\n" +
4276 4317 " \"statement\": \"QUERY\"\n" +
4277 4318 " }],\n" +
4278 4319 " \"request_stats\": {\n" +
4279 4320 " \"main\": 2.50779,\n" +
4280 4321 " \"nosql\": 0.01008,\n" +
4281 4322 " \"nosql_calls\": 17.0,\n" +
4282 4323 " \"remote\": 0.0,\n" +
4283 4324 " \"remote_calls\": 0.0,\n" +
4284 4325 " \"sql\": 1,\n" +
4285 4326 " \"sql_calls\": 1.0,\n" +
4286 4327 " \"tmpl\": 0.0,\n" +
4287 4328 " \"tmpl_calls\": 0.0,\n" +
4288 4329 " \"custom\": 0.0,\n" +
4289 4330 " \"custom_calls\": 0.0\n" +
4290 4331 " },\n" +
4291 4332 " \"traceback\": [\n" +
4292 4333 " {\"cline\": \"return foo_bar_baz(1,2,3)\",\n" +
4293 4334 " \"file\": \"somedir/somefile.py\",\n" +
4294 4335 " \"fn\": \"somefunction\",\n" +
4295 4336 " \"line\": 454,\n" +
4296 4337 " \"vars\": [[\"a_list\",\n" +
4297 4338 " [\"1\",2,\"4\",\"5\",6]],\n" +
4298 4339 " [\"b\", {\"1\": \"2\", \"ccc\": \"ddd\", \"1\": \"a\"}],\n" +
4299 4340 " [\"obj\", \"object object at 0x7f0030853dc0\"]]\n" +
4300 4341 " },\n" +
4301 4342 " {\"cline\": \"OMG ValueError happened\",\n" +
4302 4343 " \"file\": \"\",\n" +
4303 4344 " \"fn\": \"\",\n" +
4304 4345 " \"line\": \"\",\n" +
4305 4346 " \"vars\": []}\n" +
4306 4347 " ]\n" +
4307 4348 " }]'\n" +
4308 4349 " </pre>\n" +
4309 4350 " </div>\n" +
4310 4351 "\n" +
4311 4352 " </uib-tab>\n" +
4312 4353 "\n" +
4313 4354 " <uib-tab>\n" +
4314 4355 "\n" +
4315 4356 " <uib-tab-heading>\n" +
4316 4357 " Metrics API\n" +
4317 4358 " </uib-tab-heading>\n" +
4318 4359 "\n" +
4319 4360 " <div class=\"codehilite\">\n" +
4320 4361 " <pre class=\"m-a-0\">\n" +
4321 4362 "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" +
4322 4363 " [{\n" +
4323 4364 " \"namespace\": \"some.monitor\",\n" +
4324 4365 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4325 4366 " \"server_name\": \"server.name\",\n" +
4326 4367 " \"tags\": [[\"value1\", 15.7], [\"value2\", 26]]}]'\n" +
4327 4368 " </pre>\n" +
4328 4369 " </div>\n" +
4329 4370 "\n" +
4330 4371 " </uib-tab>\n" +
4331 4372 "\n" +
4332 4373 " <uib-tab>\n" +
4333 4374 "\n" +
4334 4375 " <uib-tab-heading>\n" +
4335 4376 " Request Stats API\n" +
4336 4377 " </uib-tab-heading>\n" +
4337 4378 "\n" +
4338 4379 " <div class=\"codehilite\">\n" +
4339 4380 " <pre class=\"m-a-0\">\n" +
4340 4381 "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" +
4341 4382 " [{\"server\": \"some.server.hostname\",\n" +
4342 4383 " \"timestamp\": \"{{$ctrl.momentJs.utc().milliseconds(0).toISOString()}}\",\n" +
4343 4384 " \"metrics\": [[\"dir/module:func\",\n" +
4344 4385 " {\"custom\": 0.0,\n" +
4345 4386 " \"custom_calls\": 0,\n" +
4346 4387 " \"main\": 0.01664,\n" +
4347 4388 " \"nosql\": 0.00061,\n" +
4348 4389 " \"nosql_calls\": 23,\n" +
4349 4390 " \"remote\": 0.0,\n" +
4350 4391 " \"remote_calls\": 0,\n" +
4351 4392 " \"requests\": 1,\n" +
4352 4393 " \"sql\": 0.00105,\n" +
4353 4394 " \"sql_calls\": 2,\n" +
4354 4395 " \"tmpl\": 0.0,\n" +
4355 4396 " \"tmpl_calls\": 0}],\n" +
4356 4397 " [\"SomeView.function\",\n" +
4357 4398 " {\"custom\": 0.0,\n" +
4358 4399 " \"custom_calls\": 0,\n" +
4359 4400 " \"main\": 0.647261,\n" +
4360 4401 " \"nosql\": 0.306554,\n" +
4361 4402 " \"nosql_calls\": 140,\n" +
4362 4403 " \"remote\": 0.0,\n" +
4363 4404 " \"remote_calls\": 0,\n" +
4364 4405 " \"requests\": 28,\n" +
4365 4406 " \"sql\": 0.0,\n" +
4366 4407 " \"sql_calls\": 0,\n" +
4367 4408 " \"tmpl\": 0.0,\n" +
4368 4409 " \"tmpl_calls\": 0}]]\n" +
4369 4410 " }]'\n" +
4370 4411 " </pre>\n" +
4371 4412 " </div>\n" +
4372 4413 "\n" +
4373 4414 " </uib-tab>\n" +
4374 4415 "\n" +
4375 4416 " </uib-tabset>\n" +
4376 4417 "\n" +
4377 4418 " </div>\n" +
4378 4419 " </div>\n" +
4379 4420 "\n" +
4380 4421 " <permissions-form resource=\"$ctrl.resource\" current-permissions=\"$ctrl.resource.current_permissions\"\n" +
4381 4422 " possible-permissions=\"$ctrl.resource.possible_permissions\" ng-if=\"$ctrl.resource.resource_id\"></permissions-form>\n" +
4382 4423 "\n" +
4383 4424 " <div class=\"panel panel-info\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4384 4425 " <div class=\"panel-heading\">\n" +
4385 4426 " <h3 class=\"panel-title\">Postprocessing</h3>\n" +
4386 4427 " </div>\n" +
4387 4428 " <div class=\"panel-body\">\n" +
4388 4429 " <p>This section allows you influence the rating of report groups - if rule is matched once its not executed anymore</p>\n" +
4389 4430 "\n" +
4390 4431 " <p>\n" +
4391 4432 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addRule()\"><span class=\"fa fa-plus-circle\"></span> Add rule</a>\n" +
4392 4433 " </p>\n" +
4393 4434 "\n" +
4394 4435 " <post-process-action action=\"action\" resource=\"$ctrl.resource\" ng-repeat=\"action in $ctrl.resource.postprocessing_rules\"></post-process-action>\n" +
4395 4436 " </div>\n" +
4396 4437 " </div>\n" +
4397 4438 "\n" +
4398 4439 " <div class=\"panel panel-danger\" ng-show=\"$ctrl.resource.resource_id\">\n" +
4399 4440 " <div class=\"panel-heading\">\n" +
4400 4441 " <h3 class=\"panel-title\">Administration</h3>\n" +
4401 4442 " </div>\n" +
4402 4443 " <div class=\"panel-body\">\n" +
4403 4444 " <h2>Transfer ownership</h2>\n" +
4404 4445 " <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" +
4405 4446 " <div class=\"confirmation_form\" ng-submit=\"$ctrl.transferApplication()\">\n" +
4406 4447 " <form class=\"form-horizontal\" name=\"$ctrl.formTransfer\">\n" +
4407 4448 " <div class=\"form-group\">\n" +
4408 4449 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.password\"></data-form-errors>\n" +
4409 4450 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4410 4451 " Password\n" +
4411 4452 " </label>\n" +
4412 4453 " <div class=\"col-sm-8 col-lg-9\">\n" +
4413 4454 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formTransferModel.password\">\n" +
4414 4455 " </div>\n" +
4415 4456 " </div>\n" +
4416 4457 " <div class=\"form-group\">\n" +
4417 4458 " <data-form-errors errors=\"$ctrl.formTransfer.ae_validation.user_name\"></data-form-errors>\n" +
4418 4459 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4419 4460 " New owners username\n" +
4420 4461 " </label>\n" +
4421 4462 " <div class=\"col-sm-8 col-lg-9\">\n" +
4422 4463 " <input class=\"form-control\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.formTransferModel.user_name\">\n" +
4423 4464 " </div>\n" +
4424 4465 " </div>\n" +
4425 4466 " <div class=\"form-group\">\n" +
4426 4467 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4427 4468 " </label>\n" +
4428 4469 " <div class=\"col-sm-8 col-lg-9\">\n" +
4429 4470 " <button class=\"btn btn-danger\">\n" +
4430 4471 " <span class=\"fa fa-user-plus\"></span>\n" +
4431 4472 " Transfer ownership of application\n" +
4432 4473 " </button>\n" +
4433 4474 " </div>\n" +
4434 4475 " </div>\n" +
4435 4476 " </form>\n" +
4436 4477 " </div>\n" +
4437 4478 "\n" +
4438 4479 " <hr/>\n" +
4439 4480 "\n" +
4440 4481 " <h2>Remove application</h2>\n" +
4441 4482 " <p><strong>This operation will wipe out all data from database - there is no undo.</strong></p>\n" +
4442 4483 "\n" +
4443 4484 " <div class=\"confirmation_form\">\n" +
4444 4485 " <form class=\"form-horizontal\" name=\"$ctrl.formDelete\" ng-submit=\"$ctrl.deleteApplication()\">\n" +
4445 4486 " <div class=\"form-group\">\n" +
4446 4487 " <data-form-errors errors=\"$ctrl.formDelete.ae_validation.password\"></data-form-errors>\n" +
4447 4488 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4448 4489 " Password\n" +
4449 4490 " </label>\n" +
4450 4491 " <div class=\"col-sm-8 col-lg-9\">\n" +
4451 4492 " <input class=\"form-control\" name=\"password\" type=\"password\" ng-model=\"$ctrl.formDeleteModel.password\">\n" +
4452 4493 " </div>\n" +
4453 4494 " </div>\n" +
4454 4495 " <div class=\"form-group\">\n" +
4455 4496 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
4456 4497 "\n" +
4457 4498 " </label>\n" +
4458 4499 " <div class=\"col-sm-8 col-lg-9\">\n" +
4459 4500 " <button class=\"btn btn-danger\">\n" +
4460 4501 " <span class=\"fa fa-trash-o\"></span>\n" +
4461 4502 " Delete my application\n" +
4462 4503 " </button>\n" +
4463 4504 " </div>\n" +
4464 4505 " </div>\n" +
4465 4506 " </form>\n" +
4466 4507 " </div>\n" +
4467 4508 " </div>\n" +
4468 4509 " </div>\n" +
4469 4510 "</div>\n"
4470 4511 );
4471 4512
4472 4513
4473 4514 $templateCache.put('components/views/event-browser/event-browser.html',
4474 4515 "<div class=\"panel panel-default\">\n" +
4475 4516 " <div class=\"panel-body\">\n" +
4476 4517 "\n" +
4477 4518 " <h1>Event history</h1>\n" +
4478 4519 "\n" +
4479 4520 " <table class=\"table table-striped event-table\">\n" +
4480 4521 " <tr ng-repeat=\"event in $ctrl.events track by event.id\">\n" +
4481 4522 " <td class=\"text-center icons\">\n" +
4482 4523 " <span ng-if=\"event.event_type === 1\" class=\"fa fa-exclamation-triangle fa-2x\" style=\"color:orangered\"></span>\n" +
4483 4524 " <span ng-if=\"event.event_type === 3\" class=\"fa fa-clock-o fa-2x\" style=\"color:darkorange\"></span>\n" +
4484 4525 " <span ng-if=\"event.event_type === 7\" class=\"fa fa-question-circle fa-2x\" style=\"color:dimgrey\"></span>\n" +
4485 4526 " <span ng-if=\"event.event_type === 9\" class=\"fa fa-line-chart fa-2x\" style=\"color:green\"></span>\n" +
4486 4527 " </td>\n" +
4487 4528 " <td>\n" +
4488 4529 " <p>For <strong>{{ event.resource_name }}</strong></p>\n" +
4489 4530 "\n" +
4490 4531 " <p>{{ event.text }}</p>\n" +
4491 4532 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\"> created:\n" +
4492 4533 " <iso-to-relative-time time=\"{{event.start_date}}\"/>\n" +
4493 4534 " </small>\n" +
4494 4535 " <small class=\"date\" ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\"> | closed:\n" +
4495 4536 " <iso-to-relative-time time=\"{{event.end_date}}\"/>\n" +
4496 4537 " </small>\n" +
4497 4538 " </td>\n" +
4498 4539 " <td class=\"options\">\n" +
4499 4540 "\n" +
4500 4541 " <span class=\"dropdown pull-right\" ng-if=\"event.status === 1\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4501 4542 " <a class=\"dropdown-toggle btn btn-danger\" data-uib-dropdown-toggle>\n" +
4502 4543 " <span class=\"fa fa-exclamation-circle\"></span>\n" +
4503 4544 " </a>\n" +
4504 4545 " <ul class=\"dropdown-menu\">\n" +
4505 4546 " <li>\n" +
4506 4547 " <a ng-click=\"$ctrl.closeEvent(event)\">Close event</a>\n" +
4507 4548 " <a>Do nothing</a>\n" +
4508 4549 " </li>\n" +
4509 4550 " </ul>\n" +
4510 4551 " </span>\n" +
4511 4552 "\n" +
4512 4553 " </td>\n" +
4513 4554 " </tr>\n" +
4514 4555 " </table>\n" +
4515 4556 " </div>\n" +
4516 4557 "</div>\n"
4517 4558 );
4518 4559
4519 4560
4520 4561 $templateCache.put('components/views/index-dashboard/index-dashboard.html',
4521 4562 "<style type=\"text/css\">\n" +
4522 4563 " #metrics_chart .c3-line {\n" +
4523 4564 " stroke-width: 0px;\n" +
4524 4565 " }\n" +
4525 4566 "\n" +
4526 4567 " #metrics_chart .c3-area {\n" +
4527 4568 " stroke-width: 0;\n" +
4528 4569 " opacity: 0.75;\n" +
4529 4570 " }\n" +
4530 4571 "</style>\n" +
4531 4572 "\n" +
4532 4573 "<div class=\"row\">\n" +
4533 4574 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
4534 4575 " <div ng-if=\"!$ctrl.stateHolder.AeUser.applications.length\">\n" +
4535 4576 "\n" +
4536 4577 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
4537 4578 "\n" +
4538 4579 " </div>\n" +
4539 4580 "\n" +
4540 4581 " <div ng-if=\"$ctrl.stateHolder.AeUser.applications.length\">\n" +
4541 4582 "\n" +
4542 4583 " <div class=\"row\">\n" +
4543 4584 " <div class=\"col-sm-6\">\n" +
4544 4585 " <div class=\"panel panel-default\">\n" +
4545 4586 " <div class=\"panel-body\">\n" +
4546 4587 " <form class=\"graph-type form-inline\">\n" +
4547 4588 " <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" +
4548 4589 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
4549 4590 "\n" +
4550 4591 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"$ctrl.timeSpan\"\n" +
4551 4592 " ng-options=\"i as i.label for i in $ctrl.timeOptions | objectToOrderedArray:'minutes'\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4552 4593 " class=\"SelectField\"></select>\n" +
4553 4594 "\n" +
4554 4595 "\n" +
4555 4596 " <div class=\"btn-group\">\n" +
4556 4597 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4557 4598 " uib-btn-radio=\"'requests_graphs'\" data-uib-tooltip=\"Requests per second\">\n" +
4558 4599 " <span class=\"fa fa-line-chart\"></span>\n" +
4559 4600 " </button>\n" +
4560 4601 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4561 4602 " uib-btn-radio=\"'response_graphs'\" data-uib-tooltip=\"Average response time\">\n" +
4562 4603 " <span class=\"fa fa-random\"></span>\n" +
4563 4604 " </button>\n" +
4564 4605 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4565 4606 " uib-btn-radio=\"'metrics_graphs'\" data-uib-tooltip=\"Time spent per request\">\n" +
4566 4607 " <span class=\"fa fa-bar-chart-o\"></span>\n" +
4567 4608 " </button>\n" +
4568 4609 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4569 4610 " uib-btn-radio=\"'report_graphs'\" data-uib-tooltip=\"Errors\">\n" +
4570 4611 " <span class=\"fa fa-exclamation-triangle\"></span>\n" +
4571 4612 " </button>\n" +
4572 4613 " <button type=\"button\" class=\"btn btn-primary btn-sm\" ng-model=\"$ctrl.graphType.selected\" ng-change=\"$ctrl.updateSearchParams()\"\n" +
4573 4614 " uib-btn-radio=\"'slow_report_graphs'\" data-uib-tooltip=\"Slow reports\">\n" +
4574 4615 " <span class=\"fa fa-clock-o\"></span>\n" +
4575 4616 " </button>\n" +
4576 4617 " </div>\n" +
4577 4618 " </form>\n" +
4578 4619 " <div class=\"clearfix\"></div>\n" +
4579 4620 "\n" +
4580 4621 " <p ng-if=\"$ctrl.loading.series != false\" class=\"text-center\">\n" +
4581 4622 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4582 4623 " </p>\n" +
4583 4624 "\n" +
4584 4625 " <div ng-if=\"$ctrl.loading.series == false\">\n" +
4585 4626 " <div ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\">\n" +
4586 4627 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.requestsChartData\" data-config=\"$ctrl.requestsChartConfig\" update=\"true\">\n" +
4587 4628 " </c3chart>\n" +
4588 4629 " </div>\n" +
4589 4630 "\n" +
4590 4631 " <div ng-if=\"$ctrl.graphType.selected == 'response_graphs'\">\n" +
4591 4632 " <c3chart data-domid=\"reponse_chart\" data-data=\"$ctrl.responseChartData\" data-config=\"$ctrl.responseChartConfig\" update=\"true\">\n" +
4592 4633 " </c3chart>\n" +
4593 4634 " </div>\n" +
4594 4635 "\n" +
4595 4636 " <div ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\">\n" +
4596 4637 " <c3chart data-domid=\"metrics_chart\" data-data=\"$ctrl.metricsChartData\" data-config=\"$ctrl.metricsChartConfig\" update=\"true\">\n" +
4597 4638 " </c3chart>\n" +
4598 4639 " </div>\n" +
4599 4640 " <div ng-if=\"$ctrl.graphType.selected == 'report_graphs'\">\n" +
4600 4641 " <c3chart data-domid=\"reports_chart\" data-data=\"$ctrl.reportChartData\" data-config=\"$ctrl.reportChartConfig\" update=\"true\">\n" +
4601 4642 " </c3chart>\n" +
4602 4643 " </div>\n" +
4603 4644 "\n" +
4604 4645 " <div ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\">\n" +
4605 4646 " <c3chart data-domid=\"slow_reports_chart\" data-data=\"$ctrl.reportSlowChartData\" data-config=\"$ctrl.reportSlowChartConfig\" update=\"true\">\n" +
4606 4647 " </c3chart>\n" +
4607 4648 " </div>\n" +
4608 4649 "\n" +
4609 4650 " <p ng-if=\"$ctrl.graphType.selected == 'requests_graphs'\" class=\"text-center\">\n" +
4610 4651 " <small>Average requests per second from all servers</small>\n" +
4611 4652 " </p>\n" +
4612 4653 "\n" +
4613 4654 " <p ng-if=\"$ctrl.graphType.selected == 'response_graphs'\" class=\"text-center\">\n" +
4614 4655 " <small>Average response time from all servers</small>\n" +
4615 4656 " </p>\n" +
4616 4657 "\n" +
4617 4658 " <p ng-if=\"$ctrl.graphType.selected == 'metrics_graphs'\" class=\"text-center\">\n" +
4618 4659 " <small>Aggregated average time spent per request - broken to layers</small>\n" +
4619 4660 " </p>\n" +
4620 4661 "\n" +
4621 4662 " <p ng-if=\"$ctrl.graphType.selected == 'report_graphs'\" class=\"text-center\">\n" +
4622 4663 " <small>Aggregated reports sent by your application</small>\n" +
4623 4664 " </p>\n" +
4624 4665 "\n" +
4625 4666 " <p ng-if=\"$ctrl.graphType.selected == 'slow_report_graphs'\" class=\"text-center\">\n" +
4626 4667 " <small>Aggregated slow reports sent by your application</small>\n" +
4627 4668 " </p>\n" +
4628 4669 " </div>\n" +
4629 4670 " </div>\n" +
4630 4671 " </div>\n" +
4631 4672 " </div>\n" +
4632 4673 "\n" +
4633 4674 "\n" +
4634 4675 " <div class=\"col-sm-6\">\n" +
4635 4676 "\n" +
4636 4677 " <div id=\"server-container\">\n" +
4637 4678 "\n" +
4638 4679 " <div ng-if=\"$ctrl.loading.apdex==false\" class=\"text-center m-b-1\">\n" +
4639 4680 "\n" +
4640 4681 " <a data-ui-sref=\"report.list({resource:$ctrl.resource, start_date:$ctrl.startDateFilter})\" class=\"combined-stat text-center\" id=\"error-rate\">\n" +
4641 4682 " <small>Exceptions</small>\n" +
4642 4683 " <br/>\n" +
4643 4684 " <strong>{{ $ctrl.exceptions|numberToThousands}}</strong>\n" +
4644 4685 " <span class=\"fa fa-chevron-right\"></span>\n" +
4645 4686 " </a><!--\n" +
4646 4687 "\n" +
4647 4688 " --><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" +
4648 4689 " <small>Frustrating req.</small>\n" +
4649 4690 " <br/>\n" +
4650 4691 " <strong>{{$ctrl.frustratingRequests|numberToThousands}}</strong>\n" +
4651 4692 " <span class=\"fa fa-chevron-right\"></span>\n" +
4652 4693 " </a><!--\n" +
4653 4694 "\n" +
4654 4695 " --><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" +
4655 4696 " data-uib-tooltip=\"Requests under 4s\">\n" +
4656 4697 " <small>Tolerated req.</small>\n" +
4657 4698 " <br/>\n" +
4658 4699 " <strong>{{$ctrl.toleratedRequests|numberToThousands}}</strong>\n" +
4659 4700 " <span class=\"fa fa-chevron-right\"></span>\n" +
4660 4701 " </a><!--\n" +
4661 4702 " \n" +
4662 4703 " --><a class=\"combined-stat text-center\" id=\"satisfying-requests\" data-uib-tooltip=\"Requests under 1s\">\n" +
4663 4704 " <small>Satisfying req.</small>\n" +
4664 4705 " <br/>\n" +
4665 4706 " <strong>{{$ctrl.satisfyingRequests|numberToThousands}}</strong>\n" +
4666 4707 " </a><!--\n" +
4667 4708 "\n" +
4668 4709 " --><a data-ui-sref=\"uptime({resource:$ctrl.resource})\" class=\"combined-stat text-center\" id=\"uptime-stats\" data-uib-tooltip=\"Uptime\">\n" +
4669 4710 " <small>Uptime</small>\n" +
4670 4711 " <br/>\n" +
4671 4712 " <strong>{{$ctrl.uptimeStats}}%</strong>\n" +
4672 4713 " <span class=\"fa fa-chevron-right\"></span>\n" +
4673 4714 " </a>\n" +
4674 4715 "\n" +
4675 4716 " <div class=\"clearfix\"></div>\n" +
4676 4717 " </div>\n" +
4677 4718 "\n" +
4678 4719 " <div id=\"apdex-rate\" class=\"m-b-1 panel panel-default\">\n" +
4679 4720 " <table class=\"servers table table-striped\">\n" +
4680 4721 " <thead>\n" +
4681 4722 " <tr>\n" +
4682 4723 " <th></th>\n" +
4683 4724 " <th>Server</th>\n" +
4684 4725 " <th>Apdex\n" +
4685 4726 " <span class=\"fa fa-question-circle\"\n" +
4686 4727 " data-uib-tooltip=\"Application Performance Index - measures viewer satisfaction based on response times and error rates\"></span>\n" +
4687 4728 " </th>\n" +
4688 4729 " <th>rpm</th>\n" +
4689 4730 " <th>avg. response</th>\n" +
4690 4731 " </tr>\n" +
4691 4732 " </thead>\n" +
4692 4733 " <tbody>\n" +
4693 4734 " <tr ng-if=\"$ctrl.loading.apdex!=false\" class=\"text-center\">\n" +
4694 4735 " <td colspan=\"5\"><span class=\"fa fa-cog fa-spin fa-5x loader\"></span></td>\n" +
4695 4736 " </tr>\n" +
4696 4737 " <tr ng-repeat=\"server in $ctrl.apdexStats\" class=\"{{ server | apdexValue }}\"\n" +
4697 4738 " ng-if=\"$ctrl.loading.apdex==false\">\n" +
4698 4739 " <td><span class=\"fa fa-hdd-o\"></span></td>\n" +
4699 4740 " <td>\n" +
4700 4741 " <small><strong>{{ server.name }}</strong></small>\n" +
4701 4742 " </td>\n" +
4702 4743 " <td class=\"apdex\">\n" +
4703 4744 " <small><strong>{{ server.apdex }} %</strong></small>\n" +
4704 4745 " </td>\n" +
4705 4746 " <td>\n" +
4706 4747 " <small><strong>{{ server.rpm }}rpm</strong></small>\n" +
4707 4748 " </td>\n" +
4708 4749 " <td>\n" +
4709 4750 " <small><strong>{{ server.avg_response_time }}s</strong></small>\n" +
4710 4751 " </td>\n" +
4711 4752 " </tr>\n" +
4712 4753 " </tbody>\n" +
4713 4754 " </table>\n" +
4714 4755 "\n" +
4715 4756 " </div>\n" +
4716 4757 " </div>\n" +
4717 4758 "\n" +
4718 4759 " </div>\n" +
4719 4760 "\n" +
4720 4761 "\n" +
4721 4762 " </div>\n" +
4722 4763 "\n" +
4723 4764 " <div class=\"row\">\n" +
4724 4765 " <div class=\"col-sm-6\">\n" +
4725 4766 "\n" +
4726 4767 " <div class=\"panel panel-default\">\n" +
4727 4768 " <div class=\"panel-heading position-relative\">\n" +
4728 4769 " <h3 class=\"panel-title\"><span class=\"fa fa-exclamation-triangle\"></span> Newest errors (real-time)\n" +
4729 4770 " </h3>\n" +
4730 4771 " <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" +
4731 4772 " <span class=\"fa {{stream.paused ? 'fa-play' : 'fa-pause'}}\"></span>\n" +
4732 4773 " </a>\n" +
4733 4774 " <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" +
4734 4775 " <span class=\"fa fa-lock\"></span>\n" +
4735 4776 " </a>\n" +
4736 4777 "\n" +
4737 4778 "\n" +
4738 4779 " </div>\n" +
4739 4780 " <div class=\"panel-body\">\n" +
4740 4781 "\n" +
4741 4782 " <p ng-if=\"$ctrl.stream.reports.length === 0\">No new reports</p>\n" +
4742 4783 "\n" +
4743 4784 " <div small-report-list reports=\"$ctrl.stream.reports\" applications=\"$ctrl.applications\"></div>\n" +
4744 4785 " </div>\n" +
4745 4786 " </div>\n" +
4746 4787 " </div>\n" +
4747 4788 "\n" +
4748 4789 " <div class=\"col-sm-6\">\n" +
4749 4790 "\n" +
4750 4791 " <div class=\"panel panel-default\">\n" +
4751 4792 " <div class=\"panel-heading\">\n" +
4752 4793 " <h3 class=\"panel-title\"><span class=\"fa fa-sort-amount-desc\"></span> Request breakdown over {{ $ctrl.timeSpan.label }}</h3>\n" +
4753 4794 " </div>\n" +
4754 4795 " <div class=\"panel-body\" id=\"view-breakdown-container\">\n" +
4755 4796 " <p ng-if=\"$ctrl.loading.requestsBreakdown!=false\" class=\"text-center\">\n" +
4756 4797 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4757 4798 " </p>\n" +
4758 4799 "\n" +
4759 4800 " <div class=\"report-list\">\n" +
4760 4801 " <div ng-if=\"$ctrl.loading.requestsBreakdown==false\" ng-repeat=\"view in $ctrl.requestsBreakdown\">\n" +
4761 4802 " <div class=\"view-info\">\n" +
4762 4803 " <div class=\"view-name\">\n" +
4763 4804 " <div class=\"bar\" style=\"width: {{view.percentage}}%\">\n" +
4764 4805 " </div>\n" +
4765 4806 " </div>\n" +
4766 4807 " <strong ng-if=\"view.latest_details.length\">\n" +
4767 4808 " <a data-ui-sref=\"report.list_slow({view_name:view.view_name})\">{{view.view_name}}</a></strong>\n" +
4768 4809 " <strong ng-if=\"!view.latest_details.length\">{{view.view_name}}</strong>\n" +
4769 4810 "\n" +
4770 4811 " <div class=\"stats\">\n" +
4771 4812 " <small>\n" +
4772 4813 " avg. response <strong>{{view.avg_response}}s</strong> in\n" +
4773 4814 " <span class=\"requests\"\n" +
4774 4815 " data-uib-tooltip=\"Requests\"><strong>{{view.requests|numberToThousands}}</strong> requests</span>\n" +
4775 4816 "\n" +
4776 4817 " <span ng-if=\"view.latest_details\">\n" +
4777 4818 " &nbsp;&nbsp; Latest reports:\n" +
4778 4819 " <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" +
4779 4820 " </span>\n" +
4780 4821 " </small>\n" +
4781 4822 " </div>\n" +
4782 4823 "\n" +
4783 4824 " </div>\n" +
4784 4825 "\n" +
4785 4826 " </div>\n" +
4786 4827 " </div>\n" +
4787 4828 "\n" +
4788 4829 "\n" +
4789 4830 " </div>\n" +
4790 4831 " </div>\n" +
4791 4832 "\n" +
4792 4833 " </div>\n" +
4793 4834 "\n" +
4794 4835 " </div>\n" +
4795 4836 "\n" +
4796 4837 " <div class=\"row\">\n" +
4797 4838 " <div class=\"col-sm-6\">\n" +
4798 4839 "\n" +
4799 4840 " <div class=\"panel panel-default\">\n" +
4800 4841 " <div class=\"panel-heading\">\n" +
4801 4842 " <h3 class=\"panel-title\">\n" +
4802 4843 " <span class=\"fa fa-exclamation-triangle\"></span> Report groups trending over {{ $ctrl.timeSpan.label }}\n" +
4803 4844 " </h3>\n" +
4804 4845 " </div>\n" +
4805 4846 " <div class=\"panel-body\">\n" +
4806 4847 " <p ng-if=\"$ctrl.loading.reports != false\" class=\"text-center\">\n" +
4807 4848 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4808 4849 " </p>\n" +
4809 4850 "\n" +
4810 4851 " <p ng-if=\"$ctrl.trendingReports.length == 0 && $ctrl.loading.reports == false\">\n" +
4811 4852 " No reports found\n" +
4812 4853 " </p>\n" +
4813 4854 "\n" +
4814 4855 " <div small-report-group-list groups=\"$ctrl.trendingReports\" applications=\"$ctrl.applications\" ng-if=\"$ctrl.loading.reports==false\"></div>\n" +
4815 4856 " </div>\n" +
4816 4857 " </div>\n" +
4817 4858 "\n" +
4818 4859 " </div>\n" +
4819 4860 "\n" +
4820 4861 " <div class=\"col-sm-6\">\n" +
4821 4862 "\n" +
4822 4863 "\n" +
4823 4864 " <div class=\"panel panel-default\">\n" +
4824 4865 " <div class=\"panel-heading\">\n" +
4825 4866 " <h3 class=\"panel-title\">\n" +
4826 4867 " Most common slow calls over {{ $ctrl.timeSpan.label }}\n" +
4827 4868 " </h3>\n" +
4828 4869 " </div>\n" +
4829 4870 " <div class=\"panel-body\">\n" +
4830 4871 "\n" +
4831 4872 " <div ng-if=\"$ctrl.loading.slowCalls!=false\" class=\"text-center\">\n" +
4832 4873 " <span class=\"fa fa-cog fa-spin fa-5x loader\"></span>\n" +
4833 4874 " </div>\n" +
4834 4875 "\n" +
4835 4876 " <table id=\"slow-statements\" ng-if=\"$ctrl.loading.slowCalls==false\">\n" +
4836 4877 " <tbody>\n" +
4837 4878 " <tr ng-repeat=\"call in $ctrl.slowCalls\">\n" +
4838 4879 " <td class=\"occurences\">\n" +
4839 4880 " <span class=\"occurences\" data-uib-tooltip=\"Occurences\">{{call.occurences|numberToThousands}}</span>\n" +
4840 4881 " </td>\n" +
4841 4882 " <td class=\"ellipsis\">\n" +
4842 4883 " <small title=\"{{call.statement}}\" class=\"statement\">{{call.statement}}</small>\n" +
4843 4884 " <br/>\n" +
4844 4885 " <span class=\"type\">{{call.statement_type}}</span>\n" +
4845 4886 " <span class=\"subtype\">{{call.statement_subtype}}</span>\n" +
4846 4887 " <span class=\"duration\" data-uib-tooltip=\"Average duration\">{{call.total_duration/call.occurences|round:2}}s</span>\n" +
4847 4888 " <span class=\"report-list\">\n" +
4848 4889 " Latest reports:\n" +
4849 4890 " <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" +
4850 4891 " </span>\n" +
4851 4892 " </td>\n" +
4852 4893 " </tr>\n" +
4853 4894 " </tbody>\n" +
4854 4895 " </table>\n" +
4855 4896 "\n" +
4856 4897 "\n" +
4857 4898 " </div>\n" +
4858 4899 " </div>\n" +
4859 4900 "\n" +
4860 4901 "\n" +
4861 4902 " </div>\n" +
4862 4903 "\n" +
4863 4904 " </div>\n" +
4864 4905 " </div>\n" +
4865 4906 " </div>\n" +
4866 4907 "</div>\n"
4867 4908 );
4868 4909
4869 4910
4870 4911 $templateCache.put('components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
4871 4912 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4872 4913 "\n" +
4873 4914 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4874 4915 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4875 4916 " <div class=\"panel-body\">\n" +
4876 4917 "\n" +
4877 4918 " <h1>Bitbucket Integration</h1>\n" +
4878 4919 "\n" +
4879 4920 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4880 4921 " <div class=\"form-group\">\n" +
4881 4922 "\n" +
4882 4923 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
4883 4924 "\n" +
4884 4925 " <div class=\"col-sm-8 col-lg-9\">\n" +
4885 4926 "\n" +
4886 4927 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4887 4928 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
4888 4929 "\n" +
4889 4930 " <div class=\"input-group\">\n" +
4890 4931 " <div class=\"input-group-addon\">https://bitbucket.org/</div>\n" +
4891 4932 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
4892 4933 " <div class=\"input-group-addon\">/</div>\n" +
4893 4934 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
4894 4935 " </div>\n" +
4895 4936 "\n" +
4896 4937 " </div>\n" +
4897 4938 " </div>\n" +
4898 4939 " <div class=\"form-group\">\n" +
4899 4940 "\n" +
4900 4941 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
4901 4942 "\n" +
4902 4943 " <div class=\"col-sm-8 col-lg-9\">\n" +
4903 4944 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
4904 4945 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4905 4946 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4906 4947 " <ul class=\"dropdown-menu\">\n" +
4907 4948 " <li><a>No</a></li>\n" +
4908 4949 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4909 4950 " </ul>\n" +
4910 4951 " </span>\n" +
4911 4952 " </div>\n" +
4912 4953 " </div>\n" +
4913 4954 " </form>\n" +
4914 4955 "\n" +
4915 4956 " <p class=\"m-t-1\">Remember you first need to\n" +
4916 4957 " <strong>\n" +
4917 4958 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
4918 4959 " with Bitbucket before we can send issues on your behalf.</p>\n" +
4919 4960 "\n" +
4920 4961 " <p>Every user will have to authorize AppEnlight to access Bitbucket to be able to post issues.</p>\n" +
4921 4962 "\n" +
4922 4963 " </div>\n" +
4923 4964 "</div>\n"
4924 4965 );
4925 4966
4926 4967
4927 4968 $templateCache.put('components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
4928 4969 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
4929 4970 "\n" +
4930 4971 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
4931 4972 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
4932 4973 " <div class=\"panel-body\">\n" +
4933 4974 " <h1>Campfire Integration</h1>\n" +
4934 4975 "\n" +
4935 4976 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
4936 4977 "\n" +
4937 4978 " <div class=\"form-group\">\n" +
4938 4979 "\n" +
4939 4980 " <label class=\"control-label col-sm-3 col-lg-2\">Account name</label>\n" +
4940 4981 " <div class=\"col-sm-8 col-lg-9\">\n" +
4941 4982 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
4942 4983 "\n" +
4943 4984 " <div class=\"input-group\">\n" +
4944 4985 " <div class=\"input-group-addon\">http://</div>\n" +
4945 4986 " <input class=\"form-control\" ng-model=\"$ctrl.config.account\" placeholder=\"account\">\n" +
4946 4987 " <div class=\"input-group-addon\">.campfirenow.com</div>\n" +
4947 4988 " </div>\n" +
4948 4989 " </div>\n" +
4949 4990 " </div>\n" +
4950 4991 "\n" +
4951 4992 " <div class=\"form-group\">\n" +
4952 4993 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
4953 4994 " <div class=\"col-sm-8 col-lg-9\">\n" +
4954 4995 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
4955 4996 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\">\n" +
4956 4997 " </div>\n" +
4957 4998 " </div>\n" +
4958 4999 "\n" +
4959 5000 " <div class=\"form-group\">\n" +
4960 5001 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
4961 5002 " <div class=\"col-sm-8 col-lg-9\">\n" +
4962 5003 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
4963 5004 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\">\n" +
4964 5005 " <p>\n" +
4965 5006 " <small>Room ID list separated by comma</small>\n" +
4966 5007 " </p>\n" +
4967 5008 " </div>\n" +
4968 5009 " </div>\n" +
4969 5010 " <div class=\"form-group\">\n" +
4970 5011 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Campfire\">\n" +
4971 5012 "\n" +
4972 5013 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
4973 5014 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
4974 5015 " <ul class=\"dropdown-menu\">\n" +
4975 5016 " <li><a>No</a></li>\n" +
4976 5017 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
4977 5018 " </ul>\n" +
4978 5019 " </span>\n" +
4979 5020 "\n" +
4980 5021 " <div class=\"btn-group\" uib-dropdown>\n" +
4981 5022 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
4982 5023 " Test integration <span class=\"caret\"></span>\n" +
4983 5024 " </button>\n" +
4984 5025 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
4985 5026 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
4986 5027 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
4987 5028 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
4988 5029 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
4989 5030 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
4990 5031 " </ul>\n" +
4991 5032 " </div>\n" +
4992 5033 "\n" +
4993 5034 " </div>\n" +
4994 5035 "\n" +
4995 5036 " </form>\n" +
4996 5037 "\n" +
4997 5038 " </div>\n" +
4998 5039 "</div>\n"
4999 5040 );
5000 5041
5001 5042
5002 5043 $templateCache.put('components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
5003 5044 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5004 5045 "\n" +
5005 5046 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5006 5047 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5007 5048 " <div class=\"panel-body\">\n" +
5008 5049 "\n" +
5009 5050 " <h1>Flowdock Integration</h1>\n" +
5010 5051 "\n" +
5011 5052 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5012 5053 "\n" +
5013 5054 " <div class=\"form-group\">\n" +
5014 5055 "\n" +
5015 5056 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
5016 5057 "\n" +
5017 5058 " <div class=\"col-sm-8 col-lg-9\">\n" +
5018 5059 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5019 5060 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
5020 5061 " </div>\n" +
5021 5062 "\n" +
5022 5063 "\n" +
5023 5064 " </div>\n" +
5024 5065 "\n" +
5025 5066 " <div class=\"form-group\">\n" +
5026 5067 "\n" +
5027 5068 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5028 5069 "\n" +
5029 5070 " <div class=\"col-sm-8 col-lg-9\">\n" +
5030 5071 "\n" +
5031 5072 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Flowdock\">\n" +
5032 5073 "\n" +
5033 5074 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5034 5075 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5035 5076 " <ul class=\"dropdown-menu\">\n" +
5036 5077 " <li><a>No</a></li>\n" +
5037 5078 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5038 5079 " </ul>\n" +
5039 5080 " </span>\n" +
5040 5081 " <div class=\"btn-group\" uib-dropdown>\n" +
5041 5082 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5042 5083 " Test integration <span class=\"caret\"></span>\n" +
5043 5084 " </button>\n" +
5044 5085 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5045 5086 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5046 5087 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5047 5088 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5048 5089 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5049 5090 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5050 5091 " </ul>\n" +
5051 5092 " </div>\n" +
5052 5093 " </div>\n" +
5053 5094 " </div>\n" +
5054 5095 "\n" +
5055 5096 "\n" +
5056 5097 " </form>\n" +
5057 5098 "\n" +
5058 5099 " </div>\n" +
5059 5100 "</div>\n"
5060 5101 );
5061 5102
5062 5103
5063 5104 $templateCache.put('components/views/integrations/github-integration-config-view/github-integration-config-view.html',
5064 5105 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5065 5106 "\n" +
5066 5107 "<div class=\"panel panel-default\" ng-show=\"!$ctrl.loading.application && !$ctrl.loading.integration\">\n" +
5067 5108 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5068 5109 " <div class=\"panel-body\">\n" +
5069 5110 "\n" +
5070 5111 " <h1>Github Integration</h1>\n" +
5071 5112 "\n" +
5072 5113 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5073 5114 "\n" +
5074 5115 "\n" +
5075 5116 " <div class=\"form-group\">\n" +
5076 5117 "\n" +
5077 5118 " <label class=\"control-label col-sm-3 col-lg-2\">Repository</label>\n" +
5078 5119 "\n" +
5079 5120 " <div class=\"col-sm-8 col-lg-9\">\n" +
5080 5121 "\n" +
5081 5122 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5082 5123 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.repo_name\"></data-form-errors>\n" +
5083 5124 "\n" +
5084 5125 " <div class=\"input-group\">\n" +
5085 5126 " <div class=\"input-group-addon\">https://api.github.com/</div>\n" +
5086 5127 " <input class=\"form-control\" ng-model=\"$ctrl.config.user_name\" placeholder=\"user\" type=\"text\">\n" +
5087 5128 " <div class=\"input-group-addon\">/</div>\n" +
5088 5129 " <input class=\"form-control\" ng-model=\"$ctrl.config.repo_name\" placeholder=\"repo_name\" type=\"text\">\n" +
5089 5130 " </div>\n" +
5090 5131 "\n" +
5091 5132 " </div>\n" +
5092 5133 " </div>\n" +
5093 5134 "\n" +
5094 5135 " <div class=\"form-group\">\n" +
5095 5136 "\n" +
5096 5137 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5097 5138 "\n" +
5098 5139 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Use this repo\">\n" +
5099 5140 "\n" +
5100 5141 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5101 5142 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5102 5143 " <ul class=\"dropdown-menu\">\n" +
5103 5144 " <li><a>No</a></li>\n" +
5104 5145 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5105 5146 " </ul>\n" +
5106 5147 " </span>\n" +
5107 5148 "\n" +
5108 5149 " </div>\n" +
5109 5150 " </form>\n" +
5110 5151 "\n" +
5111 5152 " <p class=\"m-t-1\">Remember you first need to\n" +
5112 5153 " <strong>\n" +
5113 5154 " <a data-ui-sref=\"user.profile.identities\">authorize your user account</a></strong>\n" +
5114 5155 " with Github before we can send issues on your behalf.</p>\n" +
5115 5156 "\n" +
5116 5157 " <p>Every user will have to authorize AppEnlight to access Github to be able to post issues.</p>\n" +
5117 5158 "\n" +
5118 5159 " <div class=\"panel panel-warning\">\n" +
5119 5160 " <div class=\"panel-heading\">Private repository access</div>\n" +
5120 5161 " <div class=\"panel-body\">\n" +
5121 5162 " <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" +
5122 5163 "\n" +
5123 5164 " <p>Registration page OAuth does NOT give you token with private repository access permissions.</p>\n" +
5124 5165 " </div>\n" +
5125 5166 " </div>\n" +
5126 5167 "\n" +
5127 5168 " </div>\n" +
5128 5169 "</div>\n"
5129 5170 );
5130 5171
5131 5172
5132 5173 $templateCache.put('components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
5133 5174 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5134 5175 "\n" +
5135 5176 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5136 5177 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5137 5178 " <div class=\"panel-body\">\n" +
5138 5179 "\n" +
5139 5180 " <h1>Hipchat Integration</h1>\n" +
5140 5181 "\n" +
5141 5182 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5142 5183 "\n" +
5143 5184 " <div class=\"form-group\">\n" +
5144 5185 " <label class=\"control-label col-sm-3 col-lg-2\">API Token</label>\n" +
5145 5186 "\n" +
5146 5187 " <div class=\"col-sm-8 col-lg-9\">\n" +
5147 5188 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.api_token\"></data-form-errors>\n" +
5148 5189 " <input class=\"form-control\" ng-model=\"$ctrl.config.api_token\" placeholder=\"Your API token\" type=\"text\">\n" +
5149 5190 " </div>\n" +
5150 5191 " </div>\n" +
5151 5192 "\n" +
5152 5193 " <div class=\"form-group\">\n" +
5153 5194 "\n" +
5154 5195 " <label class=\"control-label col-sm-3 col-lg-2\">Room ID list</label>\n" +
5155 5196 "\n" +
5156 5197 " <div class=\"col-sm-8 col-lg-9\">\n" +
5157 5198 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.rooms\"></data-form-errors>\n" +
5158 5199 " <input class=\"form-control\" ng-model=\"$ctrl.config.rooms\" placeholder=\"Room ID list\" type=\"text\">\n" +
5159 5200 "\n" +
5160 5201 " <p>\n" +
5161 5202 " <small>Room ID list separated by comma</small>\n" +
5162 5203 " </p>\n" +
5163 5204 " </div>\n" +
5164 5205 "\n" +
5165 5206 " </div>\n" +
5166 5207 "\n" +
5167 5208 " <div class=\"form-group\">\n" +
5168 5209 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5169 5210 " <div class=\"col-sm-8 col-lg-9\">\n" +
5170 5211 " <input type=\"submit\" class=\"btn btn-primary\" value=\"Connect to Hipchat\">\n" +
5171 5212 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5172 5213 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5173 5214 " <ul class=\"dropdown-menu\">\n" +
5174 5215 " <li><a>No</a></li>\n" +
5175 5216 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5176 5217 " </ul>\n" +
5177 5218 " </span>\n" +
5178 5219 "\n" +
5179 5220 " <div class=\"btn-group\" uib-dropdown>\n" +
5180 5221 " <button id=\"single-button\" type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5181 5222 " Test integration <span class=\"caret\"></span>\n" +
5182 5223 " </button>\n" +
5183 5224 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5184 5225 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5185 5226 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5186 5227 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5187 5228 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5188 5229 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5189 5230 " </ul>\n" +
5190 5231 " </div>\n" +
5191 5232 "\n" +
5192 5233 " </div>\n" +
5193 5234 " </div>\n" +
5194 5235 "\n" +
5195 5236 " </form>\n" +
5196 5237 "\n" +
5197 5238 " </div>\n" +
5198 5239 "</div>\n"
5199 5240 );
5200 5241
5201 5242
5202 5243 $templateCache.put('components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
5203 5244 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5204 5245 "\n" +
5205 5246 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5206 5247 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5207 5248 " <div class=\"panel-body\">\n" +
5208 5249 "\n" +
5209 5250 " <h1>Jira Integration</h1>\n" +
5210 5251 "\n" +
5211 5252 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5212 5253 "\n" +
5213 5254 " <div class=\"form-group\" id=\"row-host_name\">\n" +
5214 5255 "\n" +
5215 5256 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5216 5257 " Server URL <span class=\"required\">*</span>\n" +
5217 5258 " </label>\n" +
5218 5259 " <div class=\"col-sm-8 col-lg-9\">\n" +
5219 5260 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.host_name\"></data-form-errors>\n" +
5220 5261 " <input class=\"form-control\" id=\"host_name\" name=\"host_name\" type=\"text\" ng-model=\"$ctrl.config.host_name\">\n" +
5221 5262 "\n" +
5222 5263 " <p>\n" +
5223 5264 " <small>https://servername.atlassian.net</small>\n" +
5224 5265 " </p>\n" +
5225 5266 "\n" +
5226 5267 " </div>\n" +
5227 5268 " </div>\n" +
5228 5269 " <div class=\"form-group\" id=\"row-user_name\">\n" +
5229 5270 "\n" +
5230 5271 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5231 5272 " Username <span class=\"required\">*</span>\n" +
5232 5273 " </label>\n" +
5233 5274 " <div class=\"col-sm-8 col-lg-9\">\n" +
5234 5275 "\n" +
5235 5276 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.user_name\"></data-form-errors>\n" +
5236 5277 " <input class=\"form-control\" id=\"user_name\" name=\"user_name\" type=\"text\" ng-model=\"$ctrl.config.user_name\">\n" +
5237 5278 "\n" +
5238 5279 " <p>\n" +
5239 5280 " <small>user@email.com</small>\n" +
5240 5281 " </p>\n" +
5241 5282 "\n" +
5242 5283 " </div>\n" +
5243 5284 " </div>\n" +
5244 5285 " <div class=\"form-group\" id=\"row-password\">\n" +
5245 5286 "\n" +
5246 5287 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5247 5288 " Password <span class=\"required\">*</span>\n" +
5248 5289 " </label>\n" +
5249 5290 " <div class=\"col-sm-8 col-lg-9\">\n" +
5250 5291 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.password\"></data-form-errors>\n" +
5251 5292 " <input class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" ng-model=\"$ctrl.config.password\">\n" +
5252 5293 " </div>\n" +
5253 5294 " </div>\n" +
5254 5295 " <div class=\"form-group\" id=\"row-project\">\n" +
5255 5296 "\n" +
5256 5297 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5257 5298 " Project key <span class=\"required\">*</span>\n" +
5258 5299 " </label>\n" +
5259 5300 " <div class=\"col-sm-8 col-lg-9\">\n" +
5260 5301 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.project\"></data-form-errors>\n" +
5261 5302 " <input class=\"form-control\" id=\"project\" name=\"project\" type=\"text\" ng-model=\"$ctrl.config.project\">\n" +
5262 5303 " </div>\n" +
5263 5304 " </div>\n" +
5264 5305 " <div class=\"form-group\" id=\"row-submit\">\n" +
5265 5306 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5266 5307 " <div class=\"col-sm-8 col-lg-9\">\n" +
5267 5308 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup Jira\">\n" +
5268 5309 "\n" +
5269 5310 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5270 5311 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5271 5312 " <ul class=\"dropdown-menu\">\n" +
5272 5313 " <li><a>No</a></li>\n" +
5273 5314 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5274 5315 " </ul>\n" +
5275 5316 " </span>\n" +
5276 5317 " </div>\n" +
5277 5318 " </div>\n" +
5278 5319 "\n" +
5279 5320 " </form>\n" +
5280 5321 "\n" +
5281 5322 "\n" +
5282 5323 " </div>\n" +
5283 5324 "</div>\n"
5284 5325 );
5285 5326
5286 5327
5287 5328 $templateCache.put('components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
5288 5329 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5289 5330 "\n" +
5290 5331 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5291 5332 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5292 5333 " <div class=\"panel-body\">\n" +
5293 5334 "\n" +
5294 5335 " <h1>Slack Integration</h1>\n" +
5295 5336 "\n" +
5296 5337 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5297 5338 "\n" +
5298 5339 " <div class=\"form-group\">\n" +
5299 5340 "\n" +
5300 5341 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5301 5342 " API Token <span class=\"required\">*</span>\n" +
5302 5343 " </label>\n" +
5303 5344 " <div class=\"col-sm-8 col-lg-9\">\n" +
5304 5345 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.webhook_url\"></data-form-errors>\n" +
5305 5346 " <input class=\"form-control\" ng-model=\"$ctrl.config.webhook_url\" placeholder=\"Webhook URL\" type=\"webhook_url\">\n" +
5306 5347 " </div>\n" +
5307 5348 " </div>\n" +
5308 5349 "\n" +
5309 5350 " <div class=\"form-group\">\n" +
5310 5351 "\n" +
5311 5352 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5312 5353 " <div class=\"col-sm-8 col-lg-9\">\n" +
5313 5354 " <input type=\"submit\" class=\"btn btn-primary\"\n" +
5314 5355 " value=\"Connect to Slack\">\n" +
5315 5356 "\n" +
5316 5357 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5317 5358 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5318 5359 " <ul class=\"dropdown-menu\">\n" +
5319 5360 " <li><a>No</a></li>\n" +
5320 5361 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5321 5362 " </ul>\n" +
5322 5363 " </span>\n" +
5323 5364 "\n" +
5324 5365 " <div class=\"btn-group\" uib-dropdown>\n" +
5325 5366 " <button type=\"button\" class=\"btn btn-info\" uib-dropdown-toggle>\n" +
5326 5367 " Test integration <span class=\"caret\"></span>\n" +
5327 5368 " </button>\n" +
5328 5369 " <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"single-button\">\n" +
5329 5370 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('report_notification')\">Test report notification</a></li>\n" +
5330 5371 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('error_alert')\">Test error alert</a></li>\n" +
5331 5372 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('uptime_alert')\">Test uptime alert</a></li>\n" +
5332 5373 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('chart_alert')\">Test chart alert</a></li>\n" +
5333 5374 " <li role=\"menuitem\"><a ng-click=\"$ctrl.testIntegration('daily_digest')\">Test daily digest</a></li>\n" +
5334 5375 " </ul>\n" +
5335 5376 " </div>\n" +
5336 5377 " </div>\n" +
5337 5378 " </div>\n" +
5338 5379 " </form>\n" +
5339 5380 "\n" +
5340 5381 " </div>\n" +
5341 5382 "</div>\n"
5342 5383 );
5343 5384
5344 5385
5345 5386 $templateCache.put('components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
5346 5387 "<ng-include src=\"'templates/loader.html'\" ng-if=\"integrations.loading.application || $ctrl.loading.integration\"></ng-include>\n" +
5347 5388 "\n" +
5348 5389 "<div class=\"panel panel-default\" ng-show=\"!integrations.loading.application && !$ctrl.loading.integration\">\n" +
5349 5390 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
5350 5391 " <div class=\"panel-body\">\n" +
5351 5392 "\n" +
5352 5393 " <h1>Webhooks Integration</h1>\n" +
5353 5394 "\n" +
5354 5395 " <form name=\"$ctrl.integrationForm\" ng-submit=\"$ctrl.configureIntegration()\" class=\"form-horizontal\">\n" +
5355 5396 " <div class=\"form-group\" id=\"row-reports_webhook\">\n" +
5356 5397 "\n" +
5357 5398 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5358 5399 " Reports webhook <span class=\"required\">*</span>\n" +
5359 5400 " </label>\n" +
5360 5401 " <div class=\"col-sm-8 col-lg-9\">\n" +
5361 5402 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.reports_webhook\"></data-form-errors>\n" +
5362 5403 " <input class=\"form-control\" id=\"reports_webhook\" name=\"reports_webhook\" type=\"text\" ng-model=\"$ctrl.config.reports_webhook\">\n" +
5363 5404 " </div>\n" +
5364 5405 " </div>\n" +
5365 5406 " <div class=\"form-group\" id=\"row-alerts_webhook\">\n" +
5366 5407 "\n" +
5367 5408 " <label class=\"control-label col-sm-3 col-lg-2\">\n" +
5368 5409 " Alerts webhook <span class=\"required\">*</span>\n" +
5369 5410 " </label>\n" +
5370 5411 " <div class=\"col-sm-8 col-lg-9\">\n" +
5371 5412 " <data-form-errors errors=\"$ctrl.integrationForm.ae_validation.alerts_webhook\"></data-form-errors>\n" +
5372 5413 " <input class=\"form-control StringField None\" id=\"alerts_webhook\" name=\"alerts_webhook\" type=\"text\" ng-model=\"$ctrl.config.alerts_webhook\">\n" +
5373 5414 " </div>\n" +
5374 5415 "\n" +
5375 5416 "\n" +
5376 5417 " </div>\n" +
5377 5418 " <div class=\"form-group\" id=\"row-submit\">\n" +
5378 5419 "\n" +
5379 5420 " <label class=\"control-label col-sm-3 col-lg-2\"></label>\n" +
5380 5421 " <div class=\"col-sm-8 col-lg-9\">\n" +
5381 5422 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Setup webhooks\">\n" +
5382 5423 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5383 5424 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove Integration</a>\n" +
5384 5425 " <ul class=\"dropdown-menu\">\n" +
5385 5426 " <li><a>No</a></li>\n" +
5386 5427 " <li><a ng-click=\"$ctrl.removeIntegration()\">Yes</a></li>\n" +
5387 5428 " </ul>\n" +
5388 5429 " </span>\n" +
5389 5430 " </div>\n" +
5390 5431 " </div>\n" +
5391 5432 " </form>\n" +
5392 5433 " </div>\n" +
5393 5434 "</div>\n"
5394 5435 );
5395 5436
5396 5437
5397 5438 $templateCache.put('components/views/logs-browser/logs-browser.html',
5398 5439 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.isLoading.logs\"></ng-include>\n" +
5399 5440 "\n" +
5400 5441 "<div ng-if=\"$ctrl.isLoading.logs === false\">\n" +
5401 5442 "\n" +
5402 5443 " <p class=\"search-params\">\n" +
5403 5444 " <strong>Search params:</strong>\n" +
5404 5445 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
5405 5446 " <strong>{{tag.type}}</strong>\n" +
5406 5447 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
5407 5448 "\n" +
5408 5449 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
5409 5450 " </span>\n" +
5410 5451 " </p>\n" +
5411 5452 "\n" +
5412 5453 " <p>\n" +
5413 5454 "\n" +
5414 5455 " <script type=\"text/ng-template\" id=\"SearchTypeAheadUrl.html\">\n" +
5415 5456 "\n" +
5416 5457 " </script>\n" +
5417 5458 "\n" +
5418 5459 " <form class=\"form\">\n" +
5419 5460 " <div class=\"typeahead-tags\">\n" +
5420 5461 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter logs for events, filter by servers, namespaces, levels.\"\n" +
5421 5462 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
5422 5463 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:$ctrl.aheadFilter\"\n" +
5423 5464 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
5424 5465 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
5425 5466 " </div>\n" +
5426 5467 " </form>\n" +
5427 5468 "\n" +
5428 5469 " <div class=\"well animate-show position-absolute increse-zindex\" ng-if=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\">\n" +
5429 5470 " <uib-datepicker></uib-datepicker>\n" +
5430 5471 " </div>\n" +
5431 5472 "\n" +
5432 5473 " </p>\n" +
5433 5474 "\n" +
5434 5475 " <div class=\"panel\">\n" +
5435 5476 "\n" +
5436 5477 " <div class=\"panel-body\">\n" +
5437 5478 " <c3chart data-domid=\"log_events_chart\" data-data=\"$ctrl.logEventsChartData\" data-config=\"$ctrl.logEventsChartConfig\">\n" +
5438 5479 " </c3chart>\n" +
5439 5480 " </div>\n" +
5440 5481 " </div>\n" +
5441 5482 "\n" +
5442 5483 "\n" +
5443 5484 " <div class=\"text-center\">\n" +
5444 5485 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
5445 5486 " ng-change=\"$ctrl.paginationChange()\"\n" +
5446 5487 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
5447 5488 " </div>\n" +
5448 5489 "\n" +
5449 5490 " <div class=\"panel panel-default\">\n" +
5450 5491 "\n" +
5451 5492 " <table class=\"table table-striped log-list\">\n" +
5452 5493 " <caption>Logs</caption>\n" +
5453 5494 " <thead>\n" +
5454 5495 " <tr>\n" +
5455 5496 " <th class=\"c1 resource\">Application</th>\n" +
5456 5497 " <th class=\"c2 message\">Message</th>\n" +
5457 5498 " <th class=\"c3 when\">When</th>\n" +
5458 5499 " </tr>\n" +
5459 5500 " </thead>\n" +
5460 5501 " <tbody>\n" +
5461 5502 " <tr ng-repeat=\"log in $ctrl.logsPage track by log.log_id\" class=\"{{$odd ? 'odd' : 'even'}}\">\n" +
5462 5503 " <td class=\"c1\">\n" +
5463 5504 " <a class=\"tag application\" ng-click=\"$ctrl.addSearchTag({type:'resource', value:log.resource_id})\">\n" +
5464 5505 " <span class=\"name\">{{log.resource_name}}</span></a>\n" +
5465 5506 " </td>\n" +
5466 5507 " <td class=\"c2\">\n" +
5467 5508 " <a class=\"tag {{log.log_level|lowercase}}\" ng-click=\"$ctrl.addSearchTag({type:'level', value:log.log_level})\">\n" +
5468 5509 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
5469 5510 " <a class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:'namespace', value:log.namespace})\">\n" +
5470 5511 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
5471 5512 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\" ng-click=\"$ctrl.addSearchTag({type:tag, value:value})\">\n" +
5472 5513 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
5473 5514 " <div class=\"log\">{{log.message}}</div>\n" +
5474 5515 " </td>\n" +
5475 5516 " <td class=\"c3 when\">\n" +
5476 5517 " <a ng-click=\"$ctrl.filterId(log)\" data-uib-tooltip=\"{{log.timestamp}}\">\n" +
5477 5518 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
5478 5519 " </a>\n" +
5479 5520 " </td>\n" +
5480 5521 " </tr>\n" +
5481 5522 "\n" +
5482 5523 " </tbody>\n" +
5483 5524 " </table>\n" +
5484 5525 "\n" +
5485 5526 " </div>\n" +
5486 5527 "\n" +
5487 5528 " <div class=\"text-center\">\n" +
5488 5529 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
5489 5530 " ng-change=\"$ctrl.paginationChange()\"\n" +
5490 5531 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"></uib-pagination>\n" +
5491 5532 " </div>\n" +
5492 5533 "\n" +
5493 5534 "</div>\n"
5494 5535 );
5495 5536
5496 5537
5497 5538 $templateCache.put('components/views/report-view/report-view.html',
5498 5539 "<script type=\"text/ng-template\" id=\"slow_call.html\">\n" +
5499 5540 " <table class=\"report-table\">\n" +
5500 5541 " <tr>\n" +
5501 5542 " <td class=\"table-label\">Type</td>\n" +
5502 5543 " <td class=\"data\"><strong>{{call.type}}\n" +
5503 5544 " ({{call.subtype}})\n" +
5504 5545 " </strong></td>\n" +
5505 5546 " </tr>\n" +
5506 5547 " <tr>\n" +
5507 5548 " <td class=\"table-label\">Duration</td>\n" +
5508 5549 " <td class=\"data\"><strong class=\"textColor_1\">{{call.duration}}</strong></td>\n" +
5509 5550 " </tr>\n" +
5510 5551 " <tr>\n" +
5511 5552 " <td class=\"table-label\">Start Time</td>\n" +
5512 5553 " <td class=\"data\">{{call.timestamp}}</td>\n" +
5513 5554 " </tr>\n" +
5514 5555 " <tr>\n" +
5515 5556 " <td class=\"table-label\">Statement</td>\n" +
5516 5557 " <td class=\"data\">\n" +
5517 5558 " <pre class=\"word-wrap\">{{call.statement}}</pre>\n" +
5518 5559 " </td>\n" +
5519 5560 " </tr>\n" +
5520 5561 " <tr ng-if=\"call.location\">\n" +
5521 5562 " <td class=\"table-label\">Location</td>\n" +
5522 5563 " <td class=\"data\">{{call.location}}</td>\n" +
5523 5564 " </tr>\n" +
5524 5565 " <tr>\n" +
5525 5566 " <td class=\"table-label\">Parameters</td>\n" +
5526 5567 " <td class=\"\">\n" +
5527 5568 " <div class=\"var-listing\" human-format vars=\"call.parameters\"></div>\n" +
5528 5569 " </td>\n" +
5529 5570 " </tr>\n" +
5530 5571 " </table>\n" +
5531 5572 "\n" +
5532 5573 " <div ng-if=\"call.children.length > 0\" class=\"subcalls p-l-8\">\n" +
5533 5574 "\n" +
5534 5575 " <p><strong>\n" +
5535 5576 " <small>Sub-calls</small>\n" +
5536 5577 " </strong></p>\n" +
5537 5578 "\n" +
5538 5579 " <div class=\"panel panel-default\">\n" +
5539 5580 " <div ng-repeat=\"call in call.children\" ng-include=\"'slow_call.html'\" class=\"panel-body\"/>\n" +
5540 5581 " </div>\n" +
5541 5582 " </div>\n" +
5542 5583 " </div>\n" +
5543 5584 "\n" +
5544 5585 "</script>\n" +
5545 5586 "\n" +
5546 5587 "<script type=\"text/ng-template\" id=\"AssignReportCtrl.html\">\n" +
5547 5588 "\n" +
5548 5589 " <div class=\"modal-header\">\n" +
5549 5590 " <h3>Assign users to report</h3>\n" +
5550 5591 " </div>\n" +
5551 5592 " <div class=\"modal-body\">\n" +
5552 5593 "\n" +
5553 5594 " <ng-include src=\"'templates/loader.html'\" ng-if=\"ctrl.loading\"></ng-include>\n" +
5554 5595 "\n" +
5555 5596 " <div class=\"row\" ng-if=\"!ctrl.loading\">\n" +
5556 5597 " <div class=\"col-sm-6\">\n" +
5557 5598 " <strong>Unassigned</strong>\n" +
5558 5599 "\n" +
5559 5600 " <div class=\"user-assignment\" ng-repeat=\"user in ctrl.unAssignedUsers\"\n" +
5560 5601 " ng-click=\"ctrl.reassignUser(user)\">\n" +
5561 5602 " <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
5562 5603 " <strong>{{user.user_name}}</strong><br/>\n" +
5563 5604 " {{user.name}}\n" +
5564 5605 " <div class=\"clear\"></div>\n" +
5565 5606 " </div>\n" +
5566 5607 " </div>\n" +
5567 5608 "\n" +
5568 5609 " <div class=\"col-sm-6\">\n" +
5569 5610 " <strong>Assigned</strong>\n" +
5570 5611 "\n" +
5571 5612 " <div class=\"user-assignment\" ng-repeat=\"user in ctrl.assignedUsers\" ng-click=\"ctrl.reassignUser(user)\">\n" +
5572 5613 " <img ng-src=\"{{user.gravatar_url}}\"/>\n" +
5573 5614 " {{user.user_name}}<br/>\n" +
5574 5615 " {{user.name}}\n" +
5575 5616 " <div class=\"clear\"></div>\n" +
5576 5617 " </div>\n" +
5577 5618 " </div>\n" +
5578 5619 " </div>\n" +
5579 5620 " </div>\n" +
5580 5621 " <div class=\"modal-footer\">\n" +
5581 5622 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">OK</button>\n" +
5582 5623 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
5583 5624 " </div>\n" +
5584 5625 "</script>\n" +
5585 5626 "\n" +
5586 5627 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading.report\"></ng-include>\n" +
5587 5628 "\n" +
5588 5629 "<div ng-if=\"!$ctrl.is_loading.report && $ctrl.report === null\">\n" +
5589 5630 " <strong>OOPS something went wrong :(</strong>\n" +
5590 5631 "</div>\n" +
5591 5632 "\n" +
5592 5633 "<div ng-if=\"$ctrl.report !== null && !$ctrl.is_loading.report\">\n" +
5593 5634 "\n" +
5594 5635 " <div ng-if=\"$ctrl.stateHolder.AeUser.id\" class=\"row\">\n" +
5595 5636 " <div class=\"col-lg-12\">\n" +
5596 5637 " <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" +
5597 5638 " Go back</a>\n" +
5598 5639 " <a class=\"btn btn-default\" ng-click=\"$ctrl.assignUsersModal()\" ng-if=\"$ctrl.reportType == 'report'\"><span\n" +
5599 5640 " class=\"fa fa-flag\"></span> Assign report\n" +
5600 5641 " to user</a>\n" +
5601 5642 "\n" +
5602 5643 " <a class=\"btn {{ $ctrl.report.group.fixed ? 'btn-success' : 'btn-default'}}\" ng-click=\"$ctrl.markFixed()\"\n" +
5603 5644 " ng-if=\"$ctrl.reportType == 'report'\">\n" +
5604 5645 " <span class=\"fa fa-check\"></span> Mark fixed</a>\n" +
5605 5646 "\n" +
5606 5647 " <span class=\"dropdown\" ng-if=\"$ctrl.report.application.integrations.length\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5607 5648 " <a class=\"dropdown-toggle btn btn-default\" data-uib-dropdown-toggle>\n" +
5608 5649 " <span class=\"fa fa-send\"></span> Integrations\n" +
5609 5650 " </a>\n" +
5610 5651 " <ul class=\"dropdown-menu\">\n" +
5611 5652 " <li ng-repeat=\"choice in $ctrl.report.application.integrations\">\n" +
5612 5653 " <a ng-click=\"$ctrl.runIntegration(choice.name)\">{{choice.action}}</a>\n" +
5613 5654 " </li>\n" +
5614 5655 " </ul>\n" +
5615 5656 " </span>\n" +
5616 5657 "\n" +
5617 5658 " <a class=\"btn btn-default\" ng-click=\"$ctrl.markPublic()\">Make {{$ctrl.group.public ? 'private' : 'public'}}</a>\n" +
5618 5659 "\n" +
5619 5660 "<span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
5620 5661 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Delete</a>\n" +
5621 5662 " <ul class=\"dropdown-menu\">\n" +
5622 5663 " <li><a>No</a></li>\n" +
5623 5664 " <li><a ng-click=\"$ctrl.delete()\">Yes</a></li>\n" +
5624 5665 " </ul>\n" +
5625 5666 "</span>\n" +
5626 5667 " </div>\n" +
5627 5668 " </div>\n" +
5628 5669 "\n" +
5629 5670 " <div class=\"row\">\n" +
5630 5671 " <div class=\"col-lg-4\">\n" +
5631 5672 "\n" +
5632 5673 " <div class=\"panel panel-default m-t-1\">\n" +
5633 5674 " <div class=\"panel-body\">\n" +
5634 5675 "\n" +
5635 5676 " <h3 class=\"m-t-0\">Report Information</h3>\n" +
5636 5677 "\n" +
5637 5678 " <table class=\"report-table with-ellipsis\">\n" +
5638 5679 " <tr>\n" +
5639 5680 " <td class=\"table-label\">Occurences</td>\n" +
5640 5681 " <td class=\"data\">{{$ctrl.report.group.occurences}}</td>\n" +
5641 5682 " </tr>\n" +
5642 5683 " <tr ng-if=\"$ctrl.report.http_status\">\n" +
5643 5684 " <td class=\"table-label\">HTTP status</td>\n" +
5644 5685 " <td class=\"data\">{{$ctrl.report.http_status}}</td>\n" +
5645 5686 " </tr>\n" +
5646 5687 " <tr ng-if=\"$ctrl.report.group.priority\">\n" +
5647 5688 " <td class=\"table-label\">Priority</td>\n" +
5648 5689 " <td class=\"data\">{{$ctrl.report.group.priority}}</td>\n" +
5649 5690 " </tr>\n" +
5650 5691 " <tr ng-if=\"$ctrl.report.group.public\">\n" +
5651 5692 " <td class=\"table-label\">Public URL</td>\n" +
5652 5693 " <td class=\"data\">\n" +
5653 5694 " <form>\n" +
5654 5695 " <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" +
5655 5696 " </form>\n" +
5656 5697 " </td>\n" +
5657 5698 " </tr>\n" +
5658 5699 " <tr data-uib-tooltip=\"{{$ctrl.report.url}}\">\n" +
5659 5700 " <td class=\"table-label\">URL</td>\n" +
5660 5701 " <td class=\"data ellipsis\"><a href=\"{{$ctrl.report.url}}\">{{$ctrl.report.url}}</a></td>\n" +
5661 5702 " </tr>\n" +
5662 5703 "\n" +
5663 5704 " <tr ng-if=\"$ctrl.report.ip\">\n" +
5664 5705 " <td class=\"table-label\">Remote IP</td>\n" +
5665 5706 " <td class=\"data\">{{$ctrl.report.ip}}</td>\n" +
5666 5707 " </tr>\n" +
5667 5708 " <tr ng-if=\"$ctrl.report.user_agent\" data-uib-tooltip=\"{{$ctrl.report.user_agent}}\">\n" +
5668 5709 " <td class=\"table-label\">User Agent</td>\n" +
5669 5710 " <td class=\"data ellipsis\">{{$ctrl.report.user_agent}}</td>\n" +
5670 5711 " </tr>\n" +
5671 5712 " <tr ng-if=\"$ctrl.report.message\">\n" +
5672 5713 " <td class=\"table-label\">Message</td>\n" +
5673 5714 " <td class=\"data\">{{$ctrl.report.message}}</td>\n" +
5674 5715 " </tr>\n" +
5675 5716 " <tr ng-if=\"$ctrl.report.duration > 0\">\n" +
5676 5717 " <td class=\"table-label\">Duration</td>\n" +
5677 5718 " <td class=\"data\">\n" +
5678 5719 " <span>{{$ctrl.report.duration}}s</span>\n" +
5679 5720 " </td>\n" +
5680 5721 " </tr>\n" +
5681 5722 " <tr>\n" +
5682 5723 " <td class=\"table-label\">First occured</td>\n" +
5683 5724 " <td class=\"data\">\n" +
5684 5725 " <span uib-tooltip=\"{{$ctrl.report.group.first_timestamp}}\"><iso-to-relative-time\n" +
5685 5726 " time=\"{{$ctrl.report.group.first_timestamp}}\"/></span>\n" +
5686 5727 " </td>\n" +
5687 5728 " </tr>\n" +
5688 5729 " <tr>\n" +
5689 5730 " <td class=\"table-label\">Last occured</td>\n" +
5690 5731 " <td class=\"data\">\n" +
5691 5732 " <span uib-tooltip=\"{{$ctrl.report.group.last_timestamp}}\"><iso-to-relative-time\n" +
5692 5733 " time=\"{{$ctrl.report.group.last_timestamp}}\"/></span>\n" +
5693 5734 " </td>\n" +
5694 5735 " </tr>\n" +
5695 5736 " </table>\n" +
5696 5737 "\n" +
5697 5738 " <div ng-if=\"$ctrl.requestStats\">\n" +
5698 5739 " <h3>Performance stats</h3>\n" +
5699 5740 "\n" +
5700 5741 " <div class=\"perf_stats\">\n" +
5701 5742 " <span class=\"stat\" ng-repeat=\"stat in $ctrl.requestStats\"\n" +
5702 5743 " ng-if=\"stat.calls > 0 || stat.value > 0\"><strong>\n" +
5703 5744 " <span class=\"{{stat.name}} bar\" style=\"width:10px\"></span> {{stat.calls}}\n" +
5704 5745 " <span ng-if=\"stat.name!='main'\"><small>{{stat.name}} calls</small></span>\n" +
5705 5746 " <span ng-if=\"stat.name=='main'\">\n" +
5706 5747 " <span class=\"fa fa-question-circle\"\n" +
5707 5748 " data-uib-tooltip=\"Execution time that didnt get assigned to other layers\"></span> Other</span>\n" +
5708 5749 " </strong>\n" +
5709 5750 " </span>\n" +
5710 5751 "\n" +
5711 5752 " <div style=\"width: 100%; overflow:hidden\">\n" +
5712 5753 " <div class=\"{{stat.name}} bar\" style=\"width:{{stat.percent}}%; height: 25px\"\n" +
5713 5754 " ng-repeat=\"stat in $ctrl.requestStats\"\n" +
5714 5755 " data-uib-tooltip=\"{{stat.value}}s - Cumulative time spent in this request on all {{ stat.name }} calls\"></div>\n" +
5715 5756 " <div class=\"row\">\n" +
5716 5757 " <div class=\"col-xs-6 text-left\">\n" +
5717 5758 " <small>0s</small>\n" +
5718 5759 " </div>\n" +
5719 5760 " <div class=\"col-xs-6 text-right\">\n" +
5720 5761 " <small>{{$ctrl.report.duration.toFixed(3)}}s</small>\n" +
5721 5762 " </div>\n" +
5722 5763 " </div>\n" +
5723 5764 " </div>\n" +
5724 5765 " </div>\n" +
5725 5766 " </div>\n" +
5726 5767 "\n" +
5727 5768 " <h3>Tags</h3>\n" +
5728 5769 "\n" +
5729 5770 " <table class=\"report-table with-tags\">\n" +
5730 5771 " <tr ng-repeat=\"(tag, value) in $ctrl.report.tags\">\n" +
5731 5772 " <td class=\"table-label\" ng-switch=\"tag\"><!--\n" +
5732 5773 " --><span ng-switch-when=\"user_name\">Username/UID</span><!--\n" +
5733 5774 " --><span ng-switch-when=\"view_name\">View Name</span><!--\n" +
5734 5775 " --><span ng-switch-when=\"server_name\">Server Name</span><!--\n" +
5735 5776 " --><span ng-switch-default>{{ tag }}</span>\n" +
5736 5777 " </td>\n" +
5737 5778 " <td class=\"data\"><a ng-click=\"$ctrl.searchTag(tag, value)\">{{ value }}</td>\n" +
5738 5779 " </tr>\n" +
5739 5780 " </table>\n" +
5740 5781 "\n" +
5741 5782 " </div>\n" +
5742 5783 " </div>\n" +
5743 5784 "\n" +
5744 5785 "\n" +
5745 5786 " </div>\n" +
5746 5787 " <div class=\"col-lg-8\">\n" +
5747 5788 " <div class=\"frames\">\n" +
5748 5789 " <p class=\"text-center\">Report history</p>\n" +
5749 5790 "\n" +
5750 5791 " <div class=\"panel\" ng-if=\"!$ctrl.is_loading.history\">\n" +
5751 5792 " <div class=\"panel-body\">\n" +
5752 5793 " <c3chart data-domid=\"report_history_chart\" data-data=\"$ctrl.reportHistoryData\" data-config=\"$ctrl.reportHistoryConfig\">\n" +
5753 5794 " </c3chart>\n" +
5754 5795 " </div>\n" +
5755 5796 " </div>\n" +
5756 5797 "\n" +
5757 5798 " <div class=\"row m-b-1\">\n" +
5758 5799 " <div class=\"col-sm-2 text-left\">\n" +
5759 5800 " <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.previous_report ? '' : 'disabled'}}\"\n" +
5760 5801 " ng-click=\"$ctrl.previousDetail()\">\n" +
5761 5802 " <span class=\"fa fa-arrow-left\"></span>\n" +
5762 5803 " Prev. detail</a>\n" +
5763 5804 "\n" +
5764 5805 " </div>\n" +
5765 5806 " <div class=\"col-sm-8 text-center\">\n" +
5766 5807 " <small>\n" +
5767 5808 " <span uib-tooltip=\"{{$ctrl.report.start_time|isoToRelativeTime}}\" class=\"m-r-1\">\n" +
5768 5809 " {{$ctrl.report.start_time.replace('T', ' ')}} UTC</span>\n" +
5769 5810 " <span class=\"text-muted\">ID: {{$ctrl.report.request_id}}</span>\n" +
5770 5811 " </small>\n" +
5771 5812 " </div>\n" +
5772 5813 " <div class=\"col-sm-2 text-right\">\n" +
5773 5814 " <a class=\"switch_detail btn btn-sm btn-default {{$ctrl.report.group.next_report ? '' : 'disabled'}}\"\n" +
5774 5815 " ng-click=\"$ctrl.nextDetail()\">\n" +
5775 5816 " Next detail <span class=\"fa fa-arrow-right\"></span></a>\n" +
5776 5817 " </div>\n" +
5777 5818 " </div>\n" +
5778 5819 "\n" +
5779 5820 " <h3 class=\"word-wrap\">{{$ctrl.report.error}}</h3>\n" +
5780 5821 "\n" +
5781 5822 " <div ng-if=\"$ctrl.report.traceback\">\n" +
5782 5823 "\n" +
5783 5824 " <h3><strong>Traceback</strong></h3>\n" +
5784 5825 "\n" +
5785 5826 " <div class=\"btn-group\">\n" +
5786 5827 " <a ng-if=\"$ctrl.traceback.length-10 > 0 \" ng-click=\"$ctrl.showLong = !$ctrl.showLong\"\n" +
5787 5828 " class=\"btn btn-default {{$ctrl.showLong ? 'active' : ''}}\">\n" +
5788 5829 " <span class=\"fa fa-align-left\"></span>\n" +
5789 5830 " <small>Show {{$ctrl.traceback.length-10}} remaining frames</small>\n" +
5790 5831 " </a>\n" +
5791 5832 "\n" +
5792 5833 " <a class=\"btn btn-default {{$ctrl.showRaw ? 'active' : ''}}\" ng-click=\"$ctrl.showRaw = !$ctrl.showRaw\">\n" +
5793 5834 " <span class=\"fa fa-list\"></span>\n" +
5794 5835 " <small>Raw version</small>\n" +
5795 5836 " </a>\n" +
5796 5837 " </div>\n" +
5797 5838 "\n" +
5798 5839 " <div ng-if=\"$ctrl.showRaw\" class=\"m-t-1\">\n" +
5799 5840 " <pre>{{$ctrl.rawTraceback}}</pre>\n" +
5800 5841 " </div>\n" +
5801 5842 " <div ng-if=\"!$ctrl.showRaw\" class=\"m-t-1\">\n" +
5802 5843 "\n" +
5803 5844 " <div ng-repeat=\"frame in $ctrl.traceback\" class=\"frame {{$odd ? 'odd' : 'even'}}\"\n" +
5804 5845 " ng-if=\"$index >= $ctrl.traceback.length-10 || $ctrl.traceback.length <= 10 || $ctrl.showLong\">\n" +
5805 5846 " <div class=\"frameline\" ng-if=\"frame.line\">\n" +
5806 5847 " <a class=\"inspect_vars\" ng-click=\"frame.showVars = !frame.showVars\" ng-if=\"frame.vars\">\n" +
5807 5848 " <span class=\"fa fa-search dim btn btn-default\"\n" +
5808 5849 " uib-tooltip=\"Show local vars\"> </span>\n" +
5809 5850 " </a>\n" +
5810 5851 "\n" +
5811 5852 " <span class=\"no-vars\" ng-if=\"frame.vars.length == 0\"></span>\n" +
5812 5853 "\n" +
5813 5854 " <span ng-if=\"frame.file\">\n" +
5814 5855 " <span class=\"mono\">File</span> <span class=\"file mono\">{{frame.file || 'Unknown file'}}</span>,\n" +
5815 5856 " </span>\n" +
5816 5857 " <span ng-if=\"frame.module && !frame.file\">\n" +
5817 5858 " <span class=\"mono\">Module</span> <span class=\"file mono\">{{frame.module || 'Unknown module'}}</span>,\n" +
5818 5859 " </span>\n" +
5819 5860 " <span class=\"mono\">line</span> <span class=\"line mono\">{{frame.line || 'Unknown line'}}</span>\n" +
5820 5861 "\n" +
5821 5862 " <span ng-if=\"frame.fn\"><span class=\"mono\">in</span> <strong\n" +
5822 5863 " class=\"fn mono\">{{frame.fn || 'Unknown function'}}</strong></span>\n" +
5823 5864 "\n" +
5824 5865 " </div>\n" +
5825 5866 " <div class=\"cline mono\" ng-if=\"frame.cline\">{{frame.cline || 'Unknown context'}}</div>\n" +
5826 5867 "\n" +
5827 5868 " <div class=\"vars\" ng-if=\"frame.showVars\">\n" +
5828 5869 " <table class=\"var-listing small\">\n" +
5829 5870 " <tr ng-repeat=\"fvar in frame.vars track by $index\" class=\"frame {{$odd ? 'odd' : 'even'}}\">\n" +
5830 5871 " <td class=\"var-label\">{{ fvar[0] }}</td>\n" +
5831 5872 " <td>\n" +
5832 5873 " <span human-format vars=\"fvar[1]\"></span>\n" +
5833 5874 " </td>\n" +
5834 5875 " </tr>\n" +
5835 5876 " </table>\n" +
5836 5877 "\n" +
5837 5878 " </div>\n" +
5838 5879 " </div>\n" +
5839 5880 " </div>\n" +
5840 5881 "\n" +
5841 5882 "\n" +
5842 5883 " </div>\n" +
5843 5884 "\n" +
5844 5885 "\n" +
5845 5886 " <uib-tabset>\n" +
5846 5887 " <uib-tab select=\"$ctrl.selectedTab('slow_calls')\" active=\"$ctrl.tabs.slow_calls\">\n" +
5847 5888 " <uib-tab-heading>\n" +
5848 5889 " Slow Calls\n" +
5849 5890 " </uib-tab-heading>\n" +
5850 5891 "\n" +
5851 5892 " <h3><strong>Slow Calls</strong></h3>\n" +
5852 5893 "\n" +
5853 5894 " <div ng-if=\"$ctrl.report.slow_calls.length > 0\">\n" +
5854 5895 " <div ng-repeat=\"call in $ctrl.report.slow_calls\" ng-include=\"'slow_call.html'\"></div>\n" +
5855 5896 " </div>\n" +
5856 5897 "\n" +
5857 5898 " <div ng-if=\"$ctrl.report.slow_calls.length == 0\">\n" +
5858 5899 " No slow calls reported\n" +
5859 5900 " </div>\n" +
5860 5901 "\n" +
5861 5902 " </uib-tab>\n" +
5862 5903 "\n" +
5863 5904 "\n" +
5864 5905 " <uib-tab select=\"$ctrl.selectedTab('request_details')\" active=\"$ctrl.tabs.request_details\">\n" +
5865 5906 " <uib-tab-heading>\n" +
5866 5907 " Request details\n" +
5867 5908 " </uib-tab-heading>\n" +
5868 5909 "\n" +
5869 5910 " <h3><strong>Extra</strong></h3>\n" +
5870 5911 " <div class=\"var-listing\" human-format vars=\"$ctrl.report.extra\"></div>\n" +
5871 5912 " <h3><strong>Request details</strong></h3>\n" +
5872 5913 " <div class=\"var-listing\" human-format vars=\"$ctrl.report.request\"></div>\n" +
5873 5914 "\n" +
5874 5915 " </uib-tab>\n" +
5875 5916 "\n" +
5876 5917 " <uib-tab select=\"$ctrl.selectedTab('logs')\" active=\"$ctrl.tabs.logs\">\n" +
5877 5918 " <uib-tab-heading>\n" +
5878 5919 " Logs\n" +
5879 5920 " </uib-tab-heading>\n" +
5880 5921 "\n" +
5881 5922 " <div ng-if=\"$ctrl.is_loading.logs!=false\" class=\"text-center\">\n" +
5882 5923 " <span class=\"fa fa-cog fa-spin fa-3x loader\"></span>\n" +
5883 5924 " </div>\n" +
5884 5925 " <p ng-if=\"$ctrl.reportLogs.length == 0\"> No logs found</p>\n" +
5885 5926 "\n" +
5886 5927 " <table class=\"table table-striped log-list\" ng-if=\"$ctrl.reportLogs.length > 0\">\n" +
5887 5928 "\n" +
5888 5929 " <caption>Logs</caption>\n" +
5889 5930 " <thead>\n" +
5890 5931 " <tr>\n" +
5891 5932 " <th class=\"message\">Message</th>\n" +
5892 5933 " <th class=\"when\">When</th>\n" +
5893 5934 " </tr>\n" +
5894 5935 " </thead>\n" +
5895 5936 " <tbody>\n" +
5896 5937 " <tr ng-repeat=\"log in $ctrl.reportLogs track by log.log_id\">\n" +
5897 5938 " <td>\n" +
5898 5939 " <a class=\"tag {{log.log_level|lowercase}}\">\n" +
5899 5940 " <span class=\"name\">level:</span> {{log.log_level}}</a>\n" +
5900 5941 " <a class=\"tag\">\n" +
5901 5942 " <span class=\"name\">namespace:</span> {{log.namespace}}</a>\n" +
5902 5943 " <a ng-repeat=\"(tag, value) in log.tags\" class=\"tag\">\n" +
5903 5944 " <span class=\"name\">{{tag}}:</span> {{value}}</a>\n" +
5904 5945 " <div class=\"log\">\n" +
5905 5946 " {{log.message}}\n" +
5906 5947 " </div>\n" +
5907 5948 " </td>\n" +
5908 5949 " <td class=\"when\">\n" +
5909 5950 " <a data-uib-tooltip=\"{{log.timestamp}}\">\n" +
5910 5951 " <iso-to-relative-time time=\"{{log.timestamp}}\"/>\n" +
5911 5952 " </a>\n" +
5912 5953 " </td>\n" +
5913 5954 " </tr>\n" +
5914 5955 "\n" +
5915 5956 " </tbody>\n" +
5916 5957 " </table>\n" +
5917 5958 "\n" +
5918 5959 " </uib-tab>\n" +
5919 5960 "\n" +
5920 5961 "\n" +
5921 5962 " <uib-tab select=\"$ctrl.selectedTab('comments')\" active=\"$ctrl.tabs.comments\">\n" +
5922 5963 " <uib-tab-heading>\n" +
5923 5964 " Comments\n" +
5924 5965 " <span class=\"label label-info\">{{$ctrl.report.comments.length}}</span>\n" +
5925 5966 "\n" +
5926 5967 " </uib-tab-heading>\n" +
5927 5968 "\n" +
5928 5969 " <h3><strong>Comments</strong></h3>\n" +
5929 5970 "\n" +
5930 5971 " <p ng-if=\"$ctrl.report.comments.length == 0\">No comments yet - be first to add one!</p>\n" +
5931 5972 "\n" +
5932 5973 " <div class=\"comment\" ng-repeat=\"comment in $ctrl.report.comments\">\n" +
5933 5974 " <p name=\"comment-{{comment.comment_id}}\"><span class=\"fa fa-comment\"></span>\n" +
5934 5975 " <strong>{{comment.user_name}}</strong>\n" +
5935 5976 " <iso-to-relative-time time=\"{{comment.created_timestamp}}\"/>\n" +
5936 5977 " </p>\n" +
5937 5978 " <p class=\"well\">{{comment.body}}</p>\n" +
5938 5979 " </div>\n" +
5939 5980 "\n" +
5940 5981 " <form name=\"commentForm\" ng-submit=\"$ctrl.addComment()\">\n" +
5941 5982 " <div class=\"form-group\">\n" +
5942 5983 " <textarea type=\"text\" class=\"form-control\" id=\"$ctrl.commentForm\" ng-model=\"$ctrl.comment\" required\n" +
5943 5984 " mentio mentio-search=\"$ctrl.searchMentionedPeople(term)\" mentio-items=\"$ctrl.mentionedPeople| filter:label:typedTerm\" class=\"form-control\"></textarea>\n" +
5944 5985 "\n" +
5945 5986 " </div>\n" +
5946 5987 " <div class=\"form-group\">\n" +
5947 5988 " <button class=\"btn btn-info\" ng-disabled=\"$ctrl.commentForm.$invalid\">Comment</button>\n" +
5948 5989 " </div>\n" +
5949 5990 " </form>\n" +
5950 5991 "\n" +
5951 5992 " <div ng-repeat=\"comment in $ctrl.report.comments\" class=\"{{$odd ? 'odd' : 'even'}}\" class=\"repeat-animate\">\n" +
5952 5993 " </div>\n" +
5953 5994 "\n" +
5954 5995 " </uib-tab>\n" +
5955 5996 "\n" +
5956 5997 " <uib-tab select=\"$ctrl.selectedTab('affected_users')\" active=\"$ctrl.tabs.affected_users\">\n" +
5957 5998 " <uib-tab-heading>\n" +
5958 5999 " Affected users\n" +
5959 6000 " <span class=\"label label-warning\">{{$ctrl.report.affected_users_count}}</span>\n" +
5960 6001 "\n" +
5961 6002 " </uib-tab-heading>\n" +
5962 6003 "\n" +
5963 6004 " <h3><strong>50 most affected users ID's by this issue:</strong></h3>\n" +
5964 6005 " <ul class=\"affected-user-list\">\n" +
5965 6006 " <li ng-repeat=\"user in $ctrl.report.top_affected_users\">\n" +
5966 6007 " <strong>{{user.username}}</strong> <span class=\"badge\" uib-tooltip=\"occurences\">{{user.count}}</span>\n" +
5967 6008 " </li>\n" +
5968 6009 " </ul>\n" +
5969 6010 "\n" +
5970 6011 " </uib-tab>\n" +
5971 6012 "\n" +
5972 6013 " </uib-tabset>\n" +
5973 6014 "\n" +
5974 6015 "\n" +
5975 6016 " </div>\n" +
5976 6017 "\n" +
5977 6018 " </div>\n" +
5978 6019 " </div>\n" +
5979 6020 "</div>\n"
5980 6021 );
5981 6022
5982 6023
5983 6024 $templateCache.put('components/views/reports-browser-view/reports-browser-view.html',
5984 6025 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
5985 6026 "\n" +
5986 6027 "<div ng-if=\"$ctrl.is_loading === false\">\n" +
5987 6028 "\n" +
5988 6029 " <p class=\"search-params\">\n" +
5989 6030 " <strong>Search params:</strong>\n" +
5990 6031 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
5991 6032 " <strong>{{tag.type}}</strong>\n" +
5992 6033 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
5993 6034 "\n" +
5994 6035 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
5995 6036 " </span>\n" +
5996 6037 " </p>\n" +
5997 6038 "\n" +
5998 6039 " <form class=\"form\">\n" +
5999 6040 " <div class=\"typeahead-tags\">\n" +
6000 6041 " <input type=\"text\" id=\"typeAhead\" ng-model=\"$ctrl.filterTypeAhead\" placeholder=\"Start typing to filter reports - filter by tags, exception, priority or other properties.\"\n" +
6001 6042 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
6002 6043 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
6003 6044 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
6004 6045 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
6005 6046 " </div>\n" +
6006 6047 " </form>\n" +
6007 6048 "\n" +
6008 6049 "\n" +
6009 6050 " <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
6010 6051 " class=\"animate-show\">\n" +
6011 6052 " <uib-datepicker></uib-datepicker>\n" +
6012 6053 " </div>\n" +
6013 6054 "\n" +
6014 6055 " </p>\n" +
6015 6056 "\n" +
6016 6057 "\n" +
6017 6058 " <div class=\"text-center\">\n" +
6018 6059 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6019 6060 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6020 6061 " ng-change=\"$ctrl.paginationChange()\"\n" +
6021 6062 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6022 6063 " </div>\n" +
6023 6064 "\n" +
6024 6065 " <div class=\"panel panel-default\">\n" +
6025 6066 " <!-- Default panel contents -->\n" +
6026 6067 "\n" +
6027 6068 " <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
6028 6069 " <caption>Reports</caption>\n" +
6029 6070 " <thead>\n" +
6030 6071 " <tr>\n" +
6031 6072 " <th class=\"c1 ordering occurences\">#</th>\n" +
6032 6073 " <th class=\"c2 application\">Application</th>\n" +
6033 6074 " <th class=\"c4 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
6034 6075 " ng-change=\"$ctrl.changeRelativeTime()\"\n" +
6035 6076 " title=\"Tick to see UTC time instead relative\"></th>\n" +
6036 6077 " <th class=\"c5 error_type\">Error</th>\n" +
6037 6078 " </tr>\n" +
6038 6079 " </thead>\n" +
6039 6080 " <tbody>\n" +
6040 6081 " <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
6041 6082 " <td class=\"c1 occurences\">\n" +
6042 6083 " <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
6043 6084 " <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
6044 6085 " {{report.group.occurences|numberToThousands}}\n" +
6045 6086 " </span>\n" +
6046 6087 " </td>\n" +
6047 6088 " <td class=\"c2 application\">\n" +
6048 6089 " <div class=\"app_name\">{{report.resource_name}}</div>\n" +
6049 6090 " <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
6050 6091 " <td class=\"c3 when\">\n" +
6051 6092 " <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
6052 6093 " time=\"{{report.group.last_timestamp}}\"/></span>\n" +
6053 6094 " </span>\n" +
6054 6095 " <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
6055 6096 " </td>\n" +
6056 6097 " <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" +
6057 6098 " <span class=\"url\">{{ report.tags.view_name || report.url_path}}</td>\n" +
6058 6099 " </tr>\n" +
6059 6100 "\n" +
6060 6101 " </tbody>\n" +
6061 6102 " </table>\n" +
6062 6103 " </div>\n" +
6063 6104 "\n" +
6064 6105 "\n" +
6065 6106 " <div class=\"text-center\">\n" +
6066 6107 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6067 6108 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6068 6109 " ng-change=\"$ctrl.paginationChange()\"\n" +
6069 6110 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6070 6111 " </div>\n" +
6071 6112 "\n" +
6072 6113 "</div>\n"
6073 6114 );
6074 6115
6075 6116
6076 6117 $templateCache.put('components/views/reports-slow-browser-view/reports-slow-browser-view.html',
6077 6118 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.is_loading\"></ng-include>\n" +
6078 6119 "\n" +
6079 6120 "<div ng-if=\"$ctrl.is_loading === false\">\n" +
6080 6121 "\n" +
6081 6122 " <p class=\"search-params\">\n" +
6082 6123 " <strong>Search params:</strong>\n" +
6083 6124 " <span ng-repeat=\"tag in $ctrl.searchParams.tags\" class=\"tag\">\n" +
6084 6125 " <strong>{{tag.type}}</strong>\n" +
6085 6126 " {{ tag.type == 'resource' ? $ctrl.applications[tag.value].resource_name : tag.value }}\n" +
6086 6127 "\n" +
6087 6128 " <a ng-click=\"$ctrl.removeSearchTag(tag)\"><span class=\"fa fa-times\"></span></a>\n" +
6088 6129 " </span>\n" +
6089 6130 " </p>\n" +
6090 6131 "\n" +
6091 6132 " <p>\n" +
6092 6133 "\n" +
6093 6134 " <form class=\"form\">\n" +
6094 6135 " <div class=\"typeahead-tags\">\n" +
6095 6136 " <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" +
6096 6137 " ng-keydown=\"$ctrl.typeAheadTag($event)\"\n" +
6097 6138 " uib-typeahead=\"tag as tag.text for tag in $ctrl.filterTypeAheadOptions | filter:$viewValue:aheadFilter\"\n" +
6098 6139 " typeahead-min-length=\"1\" class=\"form-control\"\n" +
6099 6140 " typeahead-template-url=\"templates/directives/search_type_ahead.html\">\n" +
6100 6141 " </div>\n" +
6101 6142 " </form>\n" +
6102 6143 "\n" +
6103 6144 "\n" +
6104 6145 " <div class=\"well position-absolute increse-zindex\" ng-show=\"$ctrl.showDatePicker\" ng-model=\"$ctrl.pickerDate\" ng-change=\"$ctrl.pickerDateChanged()\"\n" +
6105 6146 " class=\"animate-show\">\n" +
6106 6147 " <uib-datepicker></uib-datepicker>\n" +
6107 6148 " </div>\n" +
6108 6149 "\n" +
6109 6150 " </p>\n" +
6110 6151 "\n" +
6111 6152 "\n" +
6112 6153 " <div class=\"text-center\">\n" +
6113 6154 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6114 6155 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6115 6156 " ng-change=\"$ctrl.paginationChange()\"\n" +
6116 6157 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6117 6158 " </div>\n" +
6118 6159 "\n" +
6119 6160 "\n" +
6120 6161 " <div class=\"panel panel-default\">\n" +
6121 6162 " <!-- Default panel contents -->\n" +
6122 6163 "\n" +
6123 6164 " <table class=\"table table-striped report-list\" ng-show=\"!$ctrl.is_loading\">\n" +
6124 6165 " <caption>Slow Request Reports</caption>\n" +
6125 6166 " <thead>\n" +
6126 6167 " <tr>\n" +
6127 6168 " <td class=\"c1 ordering occurences\">#</td>\n" +
6128 6169 " <td class=\"c2 average_duration\">Avg. duration</td>\n" +
6129 6170 " <td class=\"c3 application\">Application</td>\n" +
6130 6171 " <td class=\"c5 when\">When <input type=\"checkbox\" ng-model=\"$ctrl.notRelativeTime\"\n" +
6131 6172 " ng-change=\"$ctrl.changeRelativeTime()\"\n" +
6132 6173 " title=\"Tick to see UTC time instead relative\"></td>\n" +
6133 6174 " <td class=\"c6 error_type\">Location</td>\n" +
6134 6175 " </tr>\n" +
6135 6176 " </thead>\n" +
6136 6177 " <tbody>\n" +
6137 6178 " <tr ng-repeat=\"report in $ctrl.reportsPage track by report.id\">\n" +
6138 6179 " <td class=\"c1 occurences\">\n" +
6139 6180 " <span class=\"priority-{{report.group.priority}}\" data-uib-tooltip=\"Report priority\">{{report.group.priority}}</span>\n" +
6140 6181 " <span class=\"count {{report.presentation.className}}\" data-uib-tooltip=\"{{report.presentation.tooltip}}\">\n" +
6141 6182 " {{report.group.occurences|numberToThousands}}\n" +
6142 6183 " </span>\n" +
6143 6184 " </td>\n" +
6144 6185 " <td class=\"c2 average_duration\">{{report.group.average_duration.toFixed(3)}}s</td>\n" +
6145 6186 " <td class=\"c3 application\">\n" +
6146 6187 " <div class=\"app_name\">{{report.resource_name}}</div>\n" +
6147 6188 " <span class=\"server\">@{{report.tags.server_name}}</span></td>\n" +
6148 6189 " <td class=\"c4 when\">\n" +
6149 6190 " <span ng-show=\"!$ctrl.notRelativeTime\"><span data-uib-tooltip=\"{{report.group.last_timestamp}}\"><iso-to-relative-time\n" +
6150 6191 " time=\"{{report.group.last_timestamp}}\"/></span>\n" +
6151 6192 " </span>\n" +
6152 6193 " <span ng-show=\"$ctrl.notRelativeTime\">{{report.group.last_timestamp.replace('T', ' ').slice(0,16)}}</span>\n" +
6153 6194 " </td>\n" +
6154 6195 " <td class=\"c5 report ellipsis\">\n" +
6155 6196 " <a ui-sref=\"report.view_detail({groupId:report.group.id, reportId:report.id})\">{{ report.tags.view_name || report.url_path}} </span></a></td>\n" +
6156 6197 " </td>\n" +
6157 6198 " </tr>\n" +
6158 6199 "\n" +
6159 6200 " </tbody>\n" +
6160 6201 " </table>\n" +
6161 6202 "\n" +
6162 6203 " </div>\n" +
6163 6204 "\n" +
6164 6205 " <div class=\"text-center\">\n" +
6165 6206 " <uib-pagination total-items=\"$ctrl.itemCount\" items-per-page=\"$ctrl.itemsPerPage\" ng-model=\"$ctrl.page\" max-size=\"10\"\n" +
6166 6207 " class=\"pagination pagination-sm\" boundary-links=\"true\" direction-links=\"false\"\n" +
6167 6208 " ng-change=\"$ctrl.paginationChange()\"\n" +
6168 6209 " ng-show=\"!$ctrl.is_loading\"></uib-pagination>\n" +
6169 6210 " </div>\n" +
6170 6211 "\n" +
6171 6212 "</div>\n"
6172 6213 );
6173 6214
6174 6215
6175 6216 $templateCache.put('components/views/settings-view/settings-view.html',
6176 6217 "<div class=\"row\">\n" +
6177 6218 " <div class=\"col-sm-3\" id=\"menu\">\n" +
6178 6219 " <div class=\"panel panel-default\">\n" +
6179 6220 " <div class=\"panel-heading\">Applications</div>\n" +
6180 6221 " <ul class=\"list-group\">\n" +
6181 6222 " <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" +
6182 6223 " <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" +
6183 6224 " <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" +
6184 6225 " </ul>\n" +
6185 6226 "\n" +
6186 6227 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuApplicationsItems.length\">\n" +
6187 6228 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuApplicationsItems\">\n" +
6188 6229 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6189 6230 " </li>\n" +
6190 6231 " </ul>\n" +
6191 6232 "\n" +
6192 6233 " </div>\n" +
6193 6234 "\n" +
6194 6235 "\n" +
6195 6236 " <div class=\"panel panel-default\">\n" +
6196 6237 " <div class=\"panel-heading\">Settings</div>\n" +
6197 6238 " <ul class=\"list-group\">\n" +
6198 6239 " <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" +
6199 6240 " <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" +
6200 6241 " <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" +
6201 6242 " <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" +
6202 6243 " </ul>\n" +
6203 6244 "\n" +
6204 6245 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuUserSettingsItems.length\">\n" +
6205 6246 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuUserSettingsItems\">\n" +
6206 6247 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6207 6248 " </li>\n" +
6208 6249 " </ul>\n" +
6209 6250 "\n" +
6210 6251 " </div>\n" +
6211 6252 "\n" +
6212 6253 " <div class=\"panel panel-default\">\n" +
6213 6254 " <div class=\"panel-heading\">Notifications</div>\n" +
6214 6255 " <ul class=\"list-group\">\n" +
6215 6256 " <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" +
6216 6257 " <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" +
6217 6258 " </ul>\n" +
6218 6259 "\n" +
6219 6260 " <ul class=\"list-group\" data-ng-if=\"$ctrl.AeConfig.settingsNav.menuNotificationsItems.length\">\n" +
6220 6261 " <li class=\"list-group-item\" ng-repeat=\"item in $ctrl.AeConfig.settingsNav.menuNotificationsItems\">\n" +
6221 6262 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
6222 6263 " </li>\n" +
6223 6264 " </ul>\n" +
6224 6265 "\n" +
6225 6266 " </div>\n" +
6226 6267 "\n" +
6227 6268 " </div>\n" +
6228 6269 "\n" +
6229 6270 " <div class=\"col-sm-9\" ui-view></div>\n" +
6230 6271 "</div>\n"
6231 6272 );
6232 6273
6233 6274
6234 6275 $templateCache.put('components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
6235 6276 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.email\"></ng-include>\n" +
6236 6277 "\n" +
6237 6278 "<div ng-show=\"!$ctrl.loading.email\">\n" +
6238 6279 "\n" +
6239 6280 " <div class=\"panel panel-default\">\n" +
6240 6281 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6241 6282 " <div class=\"panel-body\">\n" +
6242 6283 " <p>Adding email alert channel - after you authorize your email in the system we can send alerts directly to this mailbox.</p>\n" +
6243 6284 " <form class=\"form-horizontal\" name=\"$ctrl.channelForm\" ng-submit=\"$ctrl.createChannel()\">\n" +
6244 6285 " <div class=\"form-group\" id=\"row-email\">\n" +
6245 6286 " <data-form-errors errors=\"$ctrl.channelForm.ae_validation.email\"></data-form-errors>\n" +
6246 6287 " <label id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6247 6288 " Email Address\n" +
6248 6289 " <span class=\"required\">*</span>\n" +
6249 6290 " </label>\n" +
6250 6291 " <div class=\"col-sm-8 col-lg-9\">\n" +
6251 6292 " <input class=\"form-control\" type=\"text\" ng-model=\"$ctrl.form.email\">\n" +
6252 6293 " </div>\n" +
6253 6294 " </div>\n" +
6254 6295 " <div class=\"form-group\">\n" +
6255 6296 " <label for=\"submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6256 6297 " </label>\n" +
6257 6298 " <div class=\"col-sm-8 col-lg-9\">\n" +
6258 6299 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Add email channel\">\n" +
6259 6300 " </div>\n" +
6260 6301 " </div>\n" +
6261 6302 " </form>\n" +
6262 6303 " </div>\n" +
6263 6304 " </div>\n" +
6264 6305 "</div>\n"
6265 6306 );
6266 6307
6267 6308
6268 6309 $templateCache.put('components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
6269 6310 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.channels || $ctrl.loading.applications\"></ng-include>\n" +
6270 6311 "\n" +
6271 6312 "<div ng-if=\"!$ctrl.loading.channels && !$ctrl.loading.applications && !$ctrl.loading.actions\">\n" +
6272 6313 "\n" +
6273 6314 " <div class=\"panel panel-default\">\n" +
6274 6315 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6275 6316 " <div class=\"panel-body\">\n" +
6276 6317 " <h1>Report alert rules</h1>\n" +
6277 6318 " <p>\n" +
6278 6319 " <a class=\"btn btn-info\" ng-click=\"$ctrl.addAction()\"><span class=\"fa fa-plus-circle\"></span> Add top-level rule</a>\n" +
6279 6320 " </p>\n" +
6280 6321 "\n" +
6281 6322 " <report-alert-action action=\"action\" rule-definitions=\"$ctrl.ruleDefinitions\"\n" +
6282 6323 " possible-channels=\"$ctrl.alertChannels\"\n" +
6283 6324 " actions=\"$ctrl.alertActions\" applications=\"$ctrl.applications\"\n" +
6284 6325 " ng-repeat=\"action in $ctrl.alertActions | filter: {type:'report'}\"></report-alert-action>\n" +
6285 6326 "\n" +
6286 6327 " </div>\n" +
6287 6328 " </div>\n" +
6288 6329 "\n" +
6289 6330 " <div class=\"panel panel-default\">\n" +
6290 6331 " <div class=\"panel-body\">\n" +
6291 6332 " <h1>Alert channels</h1>\n" +
6292 6333 "\n" +
6293 6334 " <p>Here you can configure your <em>alert channels</em>.</p>\n" +
6294 6335 "\n" +
6295 6336 " <p>An alert channel serves as means of delivery of notifications about important events that happen in your applications.</p>\n" +
6296 6337 "\n" +
6297 6338 " <div class=\"alert alert-success\">You can add more integrations that support different alert channels via application management panel.</div>\n" +
6298 6339 "\n" +
6299 6340 " <table class=\"table table-striped\">\n" +
6300 6341 " <tr ng-repeat=\"channel in $ctrl.alertChannels\" class=\"animate-repeat\">\n" +
6301 6342 " <td><strong>{{ channel.channel_visible_value }}</strong></td>\n" +
6302 6343 " <td class=\"text-right\">\n" +
6303 6344 " <span class=\"btn btn-default\" data-uib-tooltip=\"Channel is {{ channel.channel_validated? '' :'NOT' }} validated\" tooltip-append-to-body=\"true\"\n" +
6304 6345 " ng-class=\"{dim:!channel.channel_validated}\">\n" +
6305 6346 " <span class=\"fa\" ng-class=\"{'fa-check-circle':channel.channel_validated, 'fa-times-circle':!channel.channel_validated}\"></span>\n" +
6306 6347 " </span>\n" +
6307 6348 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.send_alerts ? 'OFF' : 'ON' }} alerting on this chanel\"\n" +
6308 6349 " ng-click=\"$ctrl.updateChannel(channel,'send_alerts')\" ng-class=\"{dim:!channel.send_alerts}\" tooltip-append-to-body=\"true\">\n" +
6309 6350 " <span class=\"fa fa-rss\"></span> Alerts\n" +
6310 6351 " </a>\n" +
6311 6352 " <a class=\"btn btn-default\" data-uib-tooltip=\"Press to turn {{ channel.daily_digest ? 'OFF' : 'ON' }} daily digests on this channel\"\n" +
6312 6353 " ng-click=\"$ctrl.updateChannel(channel,'daily_digest')\" ng-class=\"{dim:!channel.daily_digest}\" tooltip-append-to-body=\"true\">\n" +
6313 6354 " <span class=\"fa fa-envelope\"></span> Daily digests\n" +
6314 6355 " </a>\n" +
6315 6356 "\n" +
6316 6357 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6317 6358 " <a class=\"btn btn-default\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> Remove</a>\n" +
6318 6359 " <ul class=\"dropdown-menu\">\n" +
6319 6360 " <li><a>No</a></li>\n" +
6320 6361 " <li><a ng-click=\"$ctrl.removeChannel(channel)\">Yes</a></li>\n" +
6321 6362 " </ul>\n" +
6322 6363 " </span>\n" +
6323 6364 "\n" +
6324 6365 " </td>\n" +
6325 6366 " </tr>\n" +
6326 6367 " </table>\n" +
6327 6368 "\n" +
6328 6369 " </div>\n" +
6329 6370 " </div>\n" +
6330 6371 "\n" +
6331 6372 "</div>\n"
6332 6373 );
6333 6374
6334 6375
6335 6376 $templateCache.put('components/views/user-auth-tokens-view/user-auth-tokens-view.html',
6336 6377 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.tokens\"></ng-include>\n" +
6337 6378 "\n" +
6338 6379 "<div ng-show=\"!$ctrl.loading.tokens\">\n" +
6339 6380 "\n" +
6340 6381 " <div class=\"panel panel-default\">\n" +
6341 6382 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6342 6383 "\n" +
6343 6384 " <div class=\"panel-body\">\n" +
6344 6385 "\n" +
6345 6386 " <div class=\"alert alert-success\">You can use those tokens to authenticate yourself when performing various API calls</div>\n" +
6346 6387 "\n" +
6347 6388 " <hr/>\n" +
6348 6389 "\n" +
6349 6390 " <form method=\"post\" class=\"form-inline\" name=\"$ctrl.TokenForm\" ng-submit=\"$ctrl.addToken()\" novalidate>\n" +
6350 6391 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.description\"></data-form-errors>\n" +
6351 6392 " <data-form-errors errors=\"$ctrl.TokenForm.ae_validation.expires\"></data-form-errors>\n" +
6352 6393 " <div class=\"form-group\">\n" +
6353 6394 " <label>\n" +
6354 6395 " Description\n" +
6355 6396 " </label>\n" +
6356 6397 " <input class=\"form-control\" name=\"description\" placeholder=\"Token description\" type=\"text\" ng-model=\"$ctrl.form.description\">\n" +
6357 6398 " </div>\n" +
6358 6399 " <div class=\"form-group\">\n" +
6359 6400 " <label>\n" +
6360 6401 " Expires\n" +
6361 6402 " </label>\n" +
6362 6403 " <select class=\"form-control\" ng-model=\"$ctrl.form.expires\" ng-options=\"i.key as i.label for i in $ctrl.expireOptions | objectToOrderedArray:'minutes'\">\n" +
6363 6404 " <option value=\"\">Never</option>\n" +
6364 6405 " </select>\n" +
6365 6406 " </div>\n" +
6366 6407 " <div class=\"form-group\">\n" +
6367 6408 " <label class=\"control-label col-sm-4 col-lg-3\">\n" +
6368 6409 " </label>\n" +
6369 6410 " <input class=\"form-control btn btn-primary\" name=\"submit\" type=\"submit\" value=\"Create Token\">\n" +
6370 6411 " </div>\n" +
6371 6412 " </form>\n" +
6372 6413 "\n" +
6373 6414 " </div>\n" +
6374 6415 "\n" +
6375 6416 "\n" +
6376 6417 " </div>\n" +
6377 6418 "\n" +
6378 6419 " <div class=\"panel panel-default\">\n" +
6379 6420 " <table st-table=\"displayedCollection\" st-safe-src=\"$ctrl.tokens\" class=\"table table-striped\">\n" +
6380 6421 " <caption>Your current tokens</caption>\n" +
6381 6422 " <thead>\n" +
6382 6423 " <tr>\n" +
6383 6424 " <th st-sort=\"description\"><a>Description</a></th>\n" +
6384 6425 " <th class=\"created\"><a>Created</a></th>\n" +
6385 6426 " <th class=\"expires\"><a>Expires</a></th>\n" +
6386 6427 " <th class=\"options\"></th>\n" +
6387 6428 " </tr>\n" +
6388 6429 " <tr>\n" +
6389 6430 " <th><input st-search=\"description\" placeholder=\"search for description\" class=\"form-control\" type=\"search\" st-delay=\"1\"/></th>\n" +
6390 6431 " <th></th>\n" +
6391 6432 " <th></th>\n" +
6392 6433 " <th></th>\n" +
6393 6434 " </tr>\n" +
6394 6435 " </thead>\n" +
6395 6436 " <tbody>\n" +
6396 6437 "\n" +
6397 6438 " <tr ng-repeat=\"token in displayedCollection\">\n" +
6398 6439 " <td><p>{{token.description}}</p>\n" +
6399 6440 " <pre ng-init=\"token.limit = 8\" ng-mouseover=\"token.limit = 99\" ng-mouseleave=\"token.limit = 8\">{{token.token| limitTo:token.limit}}...</pre>\n" +
6400 6441 " </td>\n" +
6401 6442 " <td><span data-uib-tooltip=\"{{token.creation_date}}\">{{token.creation_date | isoToRelativeTime}}</span></td>\n" +
6402 6443 " <td><span ng-if=\"token.expires\" data-uib-tooltip=\"{{token.expires}}\">{{token.expires | isoToRelativeTime}}</span>\n" +
6403 6444 " <span ng-if=\"!token.expires\">Never</span></td>\n" +
6404 6445 " <td>\n" +
6405 6446 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6406 6447 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6407 6448 " <ul class=\"dropdown-menu\">\n" +
6408 6449 " <li><a>No</a></li>\n" +
6409 6450 " <li><a ng-click=\"$ctrl.removeToken(token)\">Yes</a></li>\n" +
6410 6451 " </ul>\n" +
6411 6452 " </span>\n" +
6412 6453 " </td>\n" +
6413 6454 " </tr>\n" +
6414 6455 " </tbody>\n" +
6415 6456 " </table>\n" +
6416 6457 " </div>\n" +
6417 6458 "\n" +
6418 6459 "</div>\n"
6419 6460 );
6420 6461
6421 6462
6422 6463 $templateCache.put('components/views/user-identities-view/user-identities-view.html',
6423 6464 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.identities\"></ng-include>\n" +
6424 6465 "\n" +
6425 6466 "<div ng-show=\"!$ctrl.loading.identities\">\n" +
6426 6467 "\n" +
6427 6468 " <div class=\"panel panel-default\">\n" +
6428 6469 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6429 6470 " <div class=\"panel-body\">\n" +
6430 6471 "\n" +
6431 6472 " <div class=\"col-sm-6\">\n" +
6432 6473 " <p ng-show=\"$ctrl.identities.length === 0\">No external providers linked yet</p>\n" +
6433 6474 " <ul class=\"list-group\">\n" +
6434 6475 " <li ng-repeat=\"provider in $ctrl.identities\" class=\"animate-repeat list-group-item\">\n" +
6435 6476 " <div class=\"pull-right\">\n" +
6436 6477 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\">\n" +
6437 6478 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6438 6479 " <ul class=\"dropdown-menu\">\n" +
6439 6480 " <li><a>No</a></li>\n" +
6440 6481 " <li><a ng-click=\"$ctrl.removeProvider(provider)\">Yes</a></li>\n" +
6441 6482 " </ul>\n" +
6442 6483 " </span>\n" +
6443 6484 " </div>\n" +
6444 6485 " <em>@{{ provider.provider }}</em>: <strong>{{ provider.id }}</strong>\n" +
6445 6486 " </li>\n" +
6446 6487 " </ul>\n" +
6447 6488 " </div>\n" +
6448 6489 " <div class=\"col-sm-6\">\n" +
6449 6490 " <ul class=\"list-group\">\n" +
6450 6491 " <li class=\"list-group-item\">\n" +
6451 6492 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.google}}\" target=\"_self\">\n" +
6452 6493 " <span class=\"fa fa-google-plus-square fa-2x\"></span> Connect with Google</a>\n" +
6453 6494 " </li>\n" +
6454 6495 " <li class=\"list-group-item\">\n" +
6455 6496 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.twitter}}\" target=\"_self\">\n" +
6456 6497 " <span class=\"fa fa-twitter fa-2x\"></span> Connect with Twitter</a>\n" +
6457 6498 " </li>\n" +
6458 6499 " <li class=\"list-group-item\">\n" +
6459 6500 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.bitbucket}}\" target=\"_self\">\n" +
6460 6501 " <span class=\"fa fa-bitbucket fa-2x\"></span> Connect with Bitbucket</a>\n" +
6461 6502 " </li>\n" +
6462 6503 " <li class=\"list-group-item\">\n" +
6463 6504 " <a href=\"{{$ctrl.AeConfig.urls.social_auth.github}}\" target=\"_self\">\n" +
6464 6505 " <span class=\"fa fa-github fa-2x\"></span> Connect with Github including private repo access</a>\n" +
6465 6506 " </li>\n" +
6466 6507 " </ul>\n" +
6467 6508 " </div>\n" +
6468 6509 " </div>\n" +
6469 6510 " </div>\n" +
6470 6511 "</div>\n"
6471 6512 );
6472 6513
6473 6514
6474 6515 $templateCache.put('components/views/user-password-view/user-password-view.html',
6475 6516 "<ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.password\"></ng-include>\n" +
6476 6517 "\n" +
6477 6518 "<div ng-show=\"!$ctrl.loading.password\">\n" +
6478 6519 "\n" +
6479 6520 " <div class=\"panel panel-default\">\n" +
6480 6521 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6481 6522 " <div class=\"panel-body\">\n" +
6482 6523 "\n" +
6483 6524 " <form class=\"form-horizontal\" name=\"$ctrl.passwordForm\" ng-submit=\"$ctrl.updatePassword()\">\n" +
6484 6525 " <div class=\"form-group\" id=\"row-old_password\">\n" +
6485 6526 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.old_password\"></data-form-errors>\n" +
6486 6527 " <label for=\"old_password\" id=\"label-old_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6487 6528 " Old Password\n" +
6488 6529 " <span class=\"required\">*</span>\n" +
6489 6530 " </label>\n" +
6490 6531 " <div class=\"col-sm-8 col-lg-9\">\n" +
6491 6532 " <input class=\"form-control\" id=\"old_password\" name=\"old_password\" type=\"password\" ng-model=\"$ctrl.form.old_password\">\n" +
6492 6533 " </div>\n" +
6493 6534 " </div>\n" +
6494 6535 " <div class=\"form-group\" id=\"row-new_password\">\n" +
6495 6536 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password\"></data-form-errors>\n" +
6496 6537 " <label for=\"new_password\" id=\"label-new_password\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6497 6538 " New Password\n" +
6498 6539 " <span class=\"required\">*</span>\n" +
6499 6540 " </label>\n" +
6500 6541 " <div class=\"col-sm-8 col-lg-9\">\n" +
6501 6542 " <input class=\"form-control\" id=\"new_password\" name=\"new_password\" type=\"password\" ng-model=\"$ctrl.form.new_password\">\n" +
6502 6543 " </div>\n" +
6503 6544 " </div>\n" +
6504 6545 " <div class=\"form-group\" id=\"row-new_password_confirm\">\n" +
6505 6546 " <data-form-errors errors=\"$ctrl.passwordForm.ae_validation.new_password_confirm\"></data-form-errors>\n" +
6506 6547 " <label for=\"new_password_confirm\" id=\"label-new_password_confirm\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6507 6548 " Confirm Password\n" +
6508 6549 " <span class=\"required\">*</span>\n" +
6509 6550 " </label>\n" +
6510 6551 " <div class=\"col-sm-8 col-lg-9\">\n" +
6511 6552 " <input class=\"form-control\" id=\"new_password_confirm\" name=\"new_password_confirm\" type=\"password\" ng-model=\"$ctrl.form.new_password_confirm\">\n" +
6512 6553 " </div>\n" +
6513 6554 " </div>\n" +
6514 6555 " <div class=\"form-group\" id=\"row-submit\">\n" +
6515 6556 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\"></label>\n" +
6516 6557 " <div class=\"col-sm-8 col-lg-9\">\n" +
6517 6558 " <input class=\"form-control SubmitField btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Change Password\">\n" +
6518 6559 " </div>\n" +
6519 6560 " </div>\n" +
6520 6561 " </form>\n" +
6521 6562 "\n" +
6522 6563 " </div>\n" +
6523 6564 " </div>\n" +
6524 6565 "</div>\n"
6525 6566 );
6526 6567
6527 6568
6528 6569 $templateCache.put('components/views/user-profile-view/user-profile-view.html',
6529 6570 "<ui-view></ui-view><ng-include src=\"'templates/loader.html'\" ng-if=\"$ctrl.loading.profile\"></ng-include>\n" +
6530 6571 "\n" +
6531 6572 "<div ng-show=\"!$ctrl.loading.profile\">\n" +
6532 6573 " <div class=\"panel panel-default\">\n" +
6533 6574 " <div class=\"panel-heading\" ng-include=\"'templates/settings_breadcrumbs.html'\"></div>\n" +
6534 6575 " <div class=\"panel-body\">\n" +
6535 6576 " <form name=\"$ctrl.profileForm\" class=\"form-horizontal\" ng-submit=\"$ctrl.updateProfile()\">\n" +
6536 6577 " <div class=\"form-group\" id=\"row-email\">\n" +
6537 6578 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.email\"></data-form-errors>\n" +
6538 6579 " <label for=\"email\" id=\"label-email\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6539 6580 " Email Address\n" +
6540 6581 " <span class=\"required\">*</span>\n" +
6541 6582 " </label>\n" +
6542 6583 " <div class=\"col-sm-8 col-lg-9\">\n" +
6543 6584 " <input class=\"form-control\" id=\"email\" name=\"email\" type=\"text\" ng-model=\"$ctrl.user.email\">\n" +
6544 6585 " </div>\n" +
6545 6586 " </div>\n" +
6546 6587 "\n" +
6547 6588 " <div class=\"form-group\" id=\"row-first_name\">\n" +
6548 6589 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.first_name\"></data-form-errors>\n" +
6549 6590 " <label for=\"first_name\" id=\"label-first_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6550 6591 " First Name\n" +
6551 6592 " </label>\n" +
6552 6593 " <div class=\"col-sm-8 col-lg-9\">\n" +
6553 6594 " <input class=\"form-control\" id=\"first_name\" name=\"first_name\" type=\"text\" ng-model=\"$ctrl.user.first_name\">\n" +
6554 6595 " </div>\n" +
6555 6596 " </div>\n" +
6556 6597 " <div class=\"form-group\" id=\"row-last_name\">\n" +
6557 6598 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.last_name\"></data-form-errors>\n" +
6558 6599 " <label for=\"last_name\" id=\"label-last_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6559 6600 " Last Name\n" +
6560 6601 " </label>\n" +
6561 6602 " <div class=\"col-sm-8 col-lg-9\">\n" +
6562 6603 " <input class=\"form-control\" id=\"last_name\" name=\"last_name\" type=\"text\" ng-model=\"$ctrl.user.last_name\">\n" +
6563 6604 " </div>\n" +
6564 6605 " </div>\n" +
6565 6606 " <div class=\"form-group\" id=\"row-company_name\">\n" +
6566 6607 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_name\"></data-form-errors>\n" +
6567 6608 " <label for=\"company_name\" id=\"label-company_name\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6568 6609 " Company Name\n" +
6569 6610 " </label>\n" +
6570 6611 " <div class=\"col-sm-8 col-lg-9\">\n" +
6571 6612 " <input class=\"form-control\" id=\"company_name\" name=\"company_name\" type=\"text\" ng-model=\"$ctrl.user.company_name\">\n" +
6572 6613 " </div>\n" +
6573 6614 " </div>\n" +
6574 6615 " <div class=\"form-group\" id=\"row-company_address\">\n" +
6575 6616 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.company_address\"></data-form-errors>\n" +
6576 6617 " <label for=\"company_address\" id=\"label-company_address\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6577 6618 " Company Address\n" +
6578 6619 " </label>\n" +
6579 6620 " <div class=\"col-sm-8 col-lg-9\">\n" +
6580 6621 " <textarea class=\"form-control\" id=\"company_address\" name=\"company_address\" ng-model=\"$ctrl.user.company_address\"></textarea>\n" +
6581 6622 " </div>\n" +
6582 6623 " </div>\n" +
6583 6624 " <div class=\"form-group\" id=\"row-zip_code\">\n" +
6584 6625 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.zip_code\"></data-form-errors>\n" +
6585 6626 " <label for=\"zip_code\" id=\"label-zip_code\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6586 6627 " ZIP code\n" +
6587 6628 " </label>\n" +
6588 6629 " <div class=\"col-sm-8 col-lg-9\">\n" +
6589 6630 " <input class=\"form-control\" id=\"zip_code\" name=\"zip_code\" type=\"text\" ng-model=\"$ctrl.user.zip_code\">\n" +
6590 6631 " </div>\n" +
6591 6632 " </div>\n" +
6592 6633 " <div class=\"form-group\" id=\"row-city\">\n" +
6593 6634 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.city\"></data-form-errors>\n" +
6594 6635 " <label for=\"city\" id=\"label-city\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6595 6636 " City\n" +
6596 6637 " </label>\n" +
6597 6638 " <div class=\"col-sm-8 col-lg-9\">\n" +
6598 6639 " <input class=\"form-control\" id=\"city\" name=\"city\" type=\"text\" ng-model=\"$ctrl.user.city\">\n" +
6599 6640 " </div>\n" +
6600 6641 " </div>\n" +
6601 6642 " <div class=\"form-group\" id=\"row-notifications\">\n" +
6602 6643 " <data-form-errors errors=\"$ctrl.profileForm.ae_validation.notifications\"></data-form-errors>\n" +
6603 6644 " <label for=\"notifications\" id=\"label-notifications\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6604 6645 " Account notifications\n" +
6605 6646 " </label>\n" +
6606 6647 " <div class=\"col-sm-8 col-lg-9\">\n" +
6607 6648 " <input checked class=\"form-control\" id=\"notifications\" name=\"notifications\" type=\"checkbox\" ng-model=\"$ctrl.user.notifications\">\n" +
6608 6649 " </div>\n" +
6609 6650 " </div>\n" +
6610 6651 " <div class=\"form-group\" id=\"row-submit\">\n" +
6611 6652 " <label for=\"submit\" id=\"label-submit\" class=\"control-label col-sm-4 col-lg-3\">\n" +
6612 6653 " </label>\n" +
6613 6654 " <div class=\"col-sm-8 col-lg-9\">\n" +
6614 6655 " <input class=\"form-control btn btn-primary\" id=\"submit\" name=\"submit\" type=\"submit\" value=\"Update Account\">\n" +
6615 6656 " </div>\n" +
6616 6657 " </div>\n" +
6617 6658 " </form>\n" +
6618 6659 " </div>\n" +
6619 6660 " </div>\n" +
6620 6661 "</div>\n"
6621 6662 );
6622 6663
6623 6664
6624 6665 $templateCache.put('directives/permissions/permissions.html',
6625 6666 "<div class=\"panel panel-default\">\n" +
6626 6667 " <div class=\"panel-heading\">\n" +
6627 6668 " <h3 class=\"panel-title\">Permissions</h3>\n" +
6628 6669 " </div>\n" +
6629 6670 " <div class=\"panel-body\">\n" +
6630 6671 " <p>Here you can <strong>set permissions</strong> for others to access your app data.</p>\n" +
6631 6672 "\n" +
6632 6673 " <p>For example you can let other staff member view or alter error reports.</p>\n" +
6633 6674 "\n" +
6634 6675 " <div ng-if=\"permissions.possibleGroups.length > 0\">\n" +
6635 6676 " <h3>Group permissions</h3>\n" +
6636 6677 "\n" +
6637 6678 " <ul class=\"list-group\">\n" +
6638 6679 " <li ng-repeat=\"perm in permissions.currentPermissions.group\" class=\"animate-repeat list-group-item\">\n" +
6639 6680 " <strong>{{ perm.self.group_name }}</strong>\n" +
6640 6681 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
6641 6682 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
6642 6683 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
6643 6684 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
6644 6685 " <ul class=\"dropdown-menu\">\n" +
6645 6686 " <li><a>No</a></li>\n" +
6646 6687 " <li><a ng-click=\"permissions.removeGroupPermission(perm_name, perm)\">Yes</a></li>\n" +
6647 6688 " </ul>\n" +
6648 6689 " </span>\n" +
6649 6690 " </div>\n" +
6650 6691 " </li>\n" +
6651 6692 " </ul>\n" +
6652 6693 "\n" +
6653 6694 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setGroupPermission()\">\n" +
6654 6695 " <div class=\"form-group\">\n" +
6655 6696 " <select class=\"form-control\" ng-model=\"permissions.form.selectedGroup\" ng-options=\"g.id as g.group_name for g in permissions.possibleGroups\"></select>\n" +
6656 6697 " </div>\n" +
6657 6698 " <div class=\"form-group\">\n" +
6658 6699 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
6659 6700 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedGroupPermissions[permission]\"> {{ permission }}\n" +
6660 6701 " </span>\n" +
6661 6702 " </div>\n" +
6662 6703 " <div class=\"form-group\">\n" +
6663 6704 " <button class=\"btn btn-info\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
6664 6705 " </div>\n" +
6665 6706 " </form>\n" +
6666 6707 "\n" +
6667 6708 " </div>\n" +
6668 6709 "\n" +
6669 6710 " <h3>User permissions</h3>\n" +
6670 6711 " <div>\n" +
6671 6712 " <ul class=\"list-group\">\n" +
6672 6713 " <li ng-repeat=\"perm in permissions.currentPermissions.user\" class=\"animate-repeat list-group-item\">\n" +
6673 6714 " <strong>{{ perm.self.user_name }}</strong>\n" +
6674 6715 " <div ng-repeat=\"perm_name in perm.permissions\" class=\"pull-right animate-repeat m-l-1\">\n" +
6675 6716 " <span ng-if=\"perm_name == '__all_permissions__'\">Resource owner</span>\n" +
6676 6717 " <span class=\"dropdown\" data-uib-dropdown on-toggle=\"toggled(open)\" ng-if=\"perm_name != '__all_permissions__'\">\n" +
6677 6718 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span> {{ perm_name }}</a>\n" +
6678 6719 " <ul class=\"dropdown-menu\">\n" +
6679 6720 " <li><a>No</a></li>\n" +
6680 6721 " <li><a ng-click=\"permissions.removeUserPermission(perm_name,perm)\">Yes</a></li>\n" +
6681 6722 " </ul>\n" +
6682 6723 " </span>\n" +
6683 6724 " </div>\n" +
6684 6725 " </li>\n" +
6685 6726 " </ul>\n" +
6686 6727 " </div>\n" +
6687 6728 " <div>\n" +
6688 6729 " <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" +
6689 6730 "\n" +
6690 6731 " <form name=\"add_permission\" class=\"form-inline\" ng-submit=\"permissions.setUserPermission()\">\n" +
6691 6732 " <div class=\"form-group\">\n" +
6692 6733 " <input type=\"text\" class=\"autocomplete form-control\" placeholder=\"Search for user/email\" ng-model=\"permissions.form.autocompleteUser\"\n" +
6693 6734 " uib-typeahead=\"u.user for u in permissions.searchUsers($viewValue) | limitTo:8\" typeahead-loading=\"permissions.searchingUsers\" typeahead-wait-ms=\"250\"\n" +
6694 6735 " typeahead-template-url=\"templates/directives/user_search_type_ahead.html\"\n" +
6695 6736 " />\n" +
6696 6737 " </div>\n" +
6697 6738 " <div class=\"form-group\">\n" +
6698 6739 " <span ng-repeat=\"permission in permissions.possiblePermissions\">\n" +
6699 6740 " <input type=\"checkbox\" ng-model=\"permissions.form.selectedUserPermissions[permission]\"> {{ permission }}\n" +
6700 6741 " </span>\n" +
6701 6742 " </div>\n" +
6702 6743 " <div class=\"form-group\">\n" +
6703 6744 " <button class=\"btn btn-info\" ng-disabled=\"!permissions.form.autocompleteUser\"><span class=\"fa fa-user\"></span> Give permission</button>\n" +
6704 6745 " </div>\n" +
6705 6746 " </form>\n" +
6706 6747 " </div>\n" +
6707 6748 " </div>\n" +
6708 6749 "</div>\n"
6709 6750 );
6710 6751
6711 6752
6712 6753 $templateCache.put('directives/plugin_config/plugin_config.html',
6713 6754 "<div ng-repeat=\"tmpl in plugin_ctrlr.inclusions track by $index\">\n" +
6714 6755 " <div><strong>Plugin: {{tmpl.name}}</strong></div>\n" +
6715 6756 " <ng-include src=\"tmpl.template\"></ng-include>\n" +
6716 6757 " <hr/>\n" +
6717 6758 "</div>\n"
6718 6759 );
6719 6760
6720 6761
6721 6762 $templateCache.put('directives/postprocess_action/postprocess_action.html',
6722 6763 "<div class=\"panel panel-default action\">\n" +
6723 6764 " <div class=\"panel-body form-inline\">\n" +
6724 6765 " <div class=\"pull-right\">\n" +
6725 6766 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6726 6767 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6727 6768 " <ul class=\"dropdown-menu\">\n" +
6728 6769 " <li><a>No</a></li>\n" +
6729 6770 " <li><a ng-click=\"ctrl.deleteAction(ctrl.action)\">Yes</a></li>\n" +
6730 6771 " </ul>\n" +
6731 6772 " </span>\n" +
6732 6773 " </div>\n" +
6733 6774 "\n" +
6734 6775 " <div class=\"form-group\">\n" +
6735 6776 " <label>Action</label>\n" +
6736 6777 "\n" +
6737 6778 " <div class=\"form-group\">\n" +
6738 6779 " <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" +
6739 6780 " </div>\n" +
6740 6781 "\n" +
6741 6782 " <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" +
6742 6783 "\n" +
6743 6784 " </div>\n" +
6744 6785 " <hr/>\n" +
6745 6786 " <p>Meeting following criteria:</p>\n" +
6746 6787 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
6747 6788 " {{ctrl.rule}}\n" +
6748 6789 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
6749 6790 " </div>\n" +
6750 6791 "</div>\n"
6751 6792 );
6752 6793
6753 6794
6754 6795 $templateCache.put('directives/report_alert_action/report_alert_action.html',
6755 6796 "<div class=\"panel panel-default action\">\n" +
6756 6797 " <div class=\"panel-body form-inline\">\n" +
6757 6798 " <div class=\"pull-right\">\n" +
6758 6799 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6759 6800 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6760 6801 " <ul class=\"dropdown-menu\">\n" +
6761 6802 " <li><a>No</a></li>\n" +
6762 6803 " <li><a ng-click=\"ctrl.deleteAction(ctrl.actions, ctrl.action)\">Yes</a></li>\n" +
6763 6804 " </ul>\n" +
6764 6805 " </span>\n" +
6765 6806 " </div>\n" +
6766 6807 "\n" +
6767 6808 " <div class=\"form-group\">\n" +
6768 6809 " <label>Applies to</label>\n" +
6769 6810 " <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" +
6770 6811 " <option value=\"\">All Resources</option>\n" +
6771 6812 " </select>\n" +
6772 6813 " </div>\n" +
6773 6814 " <div class=\"form-group\">\n" +
6774 6815 " <label>Notify</label>\n" +
6775 6816 " <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" +
6776 6817 "\n" +
6777 6818 " <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" +
6778 6819 "\n" +
6779 6820 " </div>\n" +
6780 6821 " <div>\n" +
6781 6822 " <p><strong>Channels:</strong></p>\n" +
6782 6823 " <ul class=\"list-group\">\n" +
6783 6824 " <li class=\"list-group-item\" ng-repeat=\"channel in ctrl.action.channels\">\n" +
6784 6825 " <strong>{{channel.channel_visible_value}}</strong>\n" +
6785 6826 " <div class=\"pull-right\">\n" +
6786 6827 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6787 6828 " <a class=\"btn btn-danger btn-xs\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6788 6829 " <ul class=\"dropdown-menu\">\n" +
6789 6830 " <li><a>No</a></li>\n" +
6790 6831 " <li><a ng-click=\"ctrl.unBindChannel(channel)\">Yes</a></li>\n" +
6791 6832 " </ul>\n" +
6792 6833 " </span>\n" +
6793 6834 " </div>\n" +
6794 6835 " </li>\n" +
6795 6836 " </ul>\n" +
6796 6837 " <div class=\"form-group\" ng-if=\"ctrl.possibleChannels.length\">\n" +
6797 6838 " <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" +
6798 6839 " <a class=\"btn btn-info\" ng-click=\"ctrl.bindChannel(channel, ctrl.action)\"><span class=\"fa fa-plus-circle\"></span> Add Channel</a>\n" +
6799 6840 " </div>\n" +
6800 6841 " <div class=\"alert alert-danger\" ng-if=\"!ctrl.possibleChannels.length\">\n" +
6801 6842 " <span class=\"fa fa-exclamation-triangle \"></span>You need to create an alert channel before you can assign it to your rule.\n" +
6802 6843 " </div>\n" +
6803 6844 "\n" +
6804 6845 " </div>\n" +
6805 6846 " <hr/>\n" +
6806 6847 " <p>Meeting following criteria:</p>\n" +
6807 6848 " <form-errors errors=\"ctrl.errors\"></form-errors>\n" +
6808 6849 " <rule rule=\"ctrl.action.rule\" rule-definitions=\"ctrl.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"ctrl.action\"></rule>\n" +
6809 6850 " </div>\n" +
6810 6851 "</div>\n"
6811 6852 );
6812 6853
6813 6854
6814 6855 $templateCache.put('directives/rule_read_only/rule_read_only.html',
6815 6856 "<div class=\"rule-read-only\">\n" +
6816 6857 "\n" +
6817 6858 " <span class=\"form-group\">\n" +
6818 6859 " {{rule_ctrlr.readOnlyPossibleFields[rule_ctrlr.rule.field]}}\n" +
6819 6860 " </span>\n" +
6820 6861 "\n" +
6821 6862 " <span ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\">\n" +
6822 6863 " is {{rule_ctrlr.ruleDefinitions.allOps[rule_ctrlr.rule.op]}} {{rule_ctrlr.rule.value}}\n" +
6823 6864 " </span>\n" +
6824 6865 "\n" +
6825 6866 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
6826 6867 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
6827 6868 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
6828 6869 "\n" +
6829 6870 " <div class=\"panel panel-default\">\n" +
6830 6871 " <div class=\"panel-body form-inline\">\n" +
6831 6872 " <recursive>\n" +
6832 6873 " <rule-read-only rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"null\" parent-obj=\"rule_ctrlr.parentObj\"></rule-read-only>\n" +
6833 6874 " </recursive>\n" +
6834 6875 " </div>\n" +
6835 6876 " </div>\n" +
6836 6877 " </div>\n" +
6837 6878 "\n" +
6838 6879 " </span>\n" +
6839 6880 "</div>\n"
6840 6881 );
6841 6882
6842 6883
6843 6884 $templateCache.put('directives/rule/rule.html',
6844 6885 "<div class=\"rule form-inline\">\n" +
6845 6886 "\n" +
6846 6887 " <div class=\"form-group\">\n" +
6847 6888 " <select class=\"form-control\"\n" +
6848 6889 " ng-model=\"rule_ctrlr.rule.field\"\n" +
6849 6890 " ng-change=\"rule_ctrlr.fieldChange()\"\n" +
6850 6891 " ng-options=\"key as label for (key, label) in rule_ctrlr.ruleDefinitions.possibleFields\"></select>\n" +
6851 6892 " </div>\n" +
6852 6893 "\n" +
6853 6894 " <div ng-if=\"rule_ctrlr.rule.field != '__AND__' && rule_ctrlr.rule.field !='__OR__' && rule_ctrlr.rule.field !='__NOT__'\" class=\"form-group\">\n" +
6854 6895 "\n" +
6855 6896 " <select ng-model=\"rule_ctrlr.rule.op\" class=\"form-control\"\n" +
6856 6897 " ng-change=\"rule_ctrlr.setDirty()\"\n" +
6857 6898 " ng-options=\"op as rule_ctrlr.ruleDefinitions.allOps[op] for op in rule_ctrlr.ruleDefinitions.fieldOps[rule_ctrlr.rule.field]\">\n" +
6858 6899 " </select>\n" +
6859 6900 "\n" +
6860 6901 " <input type=\"text\" placeholder=\"Value\" ng-model=\"rule_ctrlr.rule.value\" ng-change=\"rule_ctrlr.setDirty()\" class=\"form-control\">\n" +
6861 6902 "\n" +
6862 6903 " </div>\n" +
6863 6904 "\n" +
6864 6905 " <span ng-if=\"rule_ctrlr.rule.field == '__AND__' || rule_ctrlr.rule.field =='__OR__' || rule_ctrlr.rule.field =='__NOT__'\">\n" +
6865 6906 " <p ng-if=\"parent\"><strong>Subrules</strong></p>\n" +
6866 6907 " <div ng-repeat=\"subrule in rule_ctrlr.rule.rules\" class=\"m-l-2\">\n" +
6867 6908 " <div class=\"panel panel-default\">\n" +
6868 6909 " <div class=\"panel-body form-inline\">\n" +
6869 6910 " <recursive>\n" +
6870 6911 " <rule rule=\"subrule\" rule-definitions=\"rule_ctrlr.ruleDefinitions\" parent-rule=\"rule_ctrlr.rule\" parent-obj=\"rule_ctrlr.parentObj\"></rule>\n" +
6871 6912 " </recursive>\n" +
6872 6913 " </div>\n" +
6873 6914 " </div>\n" +
6874 6915 " </div>\n" +
6875 6916 "\n" +
6876 6917 " <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" +
6877 6918 "\n" +
6878 6919 " </span>\n" +
6879 6920 " <div class=\"pull-right\" ng-if=\"rule_ctrlr.parentRule\">\n" +
6880 6921 " <span class=\"dropdown\" data-uib-dropdown>\n" +
6881 6922 " <a class=\"btn btn-danger\" data-uib-dropdown-toggle><span class=\"fa fa-trash-o\"></span></a>\n" +
6882 6923 " <ul class=\"dropdown-menu\">\n" +
6883 6924 " <li><a>No</a></li>\n" +
6884 6925 " <li><a ng-click=\"rule_ctrlr.deleteRule(rule_ctrlr.parentRule, rule_ctrlr.rule)\">Yes</a></li>\n" +
6885 6926 " </ul>\n" +
6886 6927 " </span>\n" +
6887 6928 " </div>\n" +
6888 6929 "</div>\n"
6889 6930 );
6890 6931
6891 6932
6892 6933 $templateCache.put('templates/admin/groups/parent_view.html',
6893 6934 "<div ui-view></div>"
6894 6935 );
6895 6936
6896 6937
6897 6938 $templateCache.put('templates/directives/search_type_ahead.html',
6898 6939 "<a>\n" +
6899 6940 " <span class=\"tag\" ng-show=\"match.model.tag\">{{match.model.tag}}</span>\n" +
6900 6941 " <span class=\"tag\" ng-show=\"!match.model.tag\">{{match.label}}</span>\n" +
6901 6942 " <span ng-show=\"match.model.example\">-</span> <span class=\"example\">{{match.model.example}}</span>\n" +
6902 6943 " <div class=\"description\">{{match.model.description}}</div>\n" +
6903 6944 "\n" +
6904 6945 "</a>\n"
6905 6946 );
6906 6947
6907 6948
6908 6949 $templateCache.put('templates/directives/user_search_type_ahead.html',
6909 6950 "<a>\n" +
6910 6951 " <span>{{match.label}}</span> -\n" +
6911 6952 " <span class=\"color-secondary\">{{match.model.name}}</span>\n" +
6912 6953 "</a>\n"
6913 6954 );
6914 6955
6915 6956
6916 6957 $templateCache.put('templates/integrations/bitbucket.html',
6917 6958 " <div class=\"modal-header\">\n" +
6918 6959 " <h3 class=\"m-t-0\">Add issue to Bitbucket</h3>\n" +
6919 6960 " </div>\n" +
6920 6961 " <div class=\"modal-body\">\n" +
6921 6962 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
6922 6963 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
6923 6964 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
6924 6965 " </div>\n" +
6925 6966 "\n" +
6926 6967 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
6927 6968 " <div class=\"form-group\">\n" +
6928 6969 " <label for=\"issue_title\">Issue Title</label>\n" +
6929 6970 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
6930 6971 " </div>\n" +
6931 6972 " <div class=\"form-group row\">\n" +
6932 6973 " <div class=\"col-sm-6\">\n" +
6933 6974 " <label for=\"issue_priority\">Priority</label>\n" +
6934 6975 " <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
6935 6976 " </div>\n" +
6936 6977 "\n" +
6937 6978 " <div class=\"col-sm-6\">\n" +
6938 6979 " <label for=\"issue_responsible\">Assignee</label>\n" +
6939 6980 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
6940 6981 " </div>\n" +
6941 6982 " </div>\n" +
6942 6983 " <div class=\"form-group\">\n" +
6943 6984 " <label for=\"issue_content\">Description</label>\n" +
6944 6985 " <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
6945 6986 " </div>\n" +
6946 6987 " </form>\n" +
6947 6988 "\n" +
6948 6989 " </div>\n" +
6949 6990 " <div class=\"modal-footer\">\n" +
6950 6991 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
6951 6992 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
6952 6993 " </div>\n"
6953 6994 );
6954 6995
6955 6996
6956 6997 $templateCache.put('templates/integrations/github.html',
6957 6998 " <div class=\"modal-header\">\n" +
6958 6999 " <h3 class=\"m-t-0\">Add issue to Github</h3>\n" +
6959 7000 " </div>\n" +
6960 7001 " <div class=\"modal-body\">\n" +
6961 7002 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
6962 7003 "\n" +
6963 7004 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
6964 7005 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
6965 7006 " </div>\n" +
6966 7007 "\n" +
6967 7008 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
6968 7009 " <div class=\"form-group\">\n" +
6969 7010 " <label for=\"issue_title\">Issue Title</label>\n" +
6970 7011 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
6971 7012 " </div>\n" +
6972 7013 " <div class=\"form-group row\">\n" +
6973 7014 " <div class=\"col-sm-6\">\n" +
6974 7015 " <label for=\"issue_status\">Tag</label>\n" +
6975 7016 " <select class=\"form-control\" id=\"issue_status\" ng-options=\"s for s in ctrl.statuses\" ng-model=\"ctrl.form.status\"></select>\n" +
6976 7017 " </div>\n" +
6977 7018 "\n" +
6978 7019 " <div class=\"col-sm-6\">\n" +
6979 7020 " <label for=\"issue_responsible\">Assignee</label>\n" +
6980 7021 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.user for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
6981 7022 " </div>\n" +
6982 7023 " </div>\n" +
6983 7024 " <div class=\"form-group\">\n" +
6984 7025 " <label for=\"issue_description\">Description</label>\n" +
6985 7026 " <textarea id=\"issue_description\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
6986 7027 " </div>\n" +
6987 7028 " </form>\n" +
6988 7029 "\n" +
6989 7030 " </div>\n" +
6990 7031 " <div class=\"modal-footer\">\n" +
6991 7032 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
6992 7033 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
6993 7034 " </div>\n"
6994 7035 );
6995 7036
6996 7037
6997 7038 $templateCache.put('templates/integrations/jira.html',
6998 7039 " <div class=\"modal-header\">\n" +
6999 7040 " <h3 class=\"m-t-0\">Add issue to Jira</h3>\n" +
7000 7041 " </div>\n" +
7001 7042 " <div class=\"modal-body\">\n" +
7002 7043 " <div class=\"alert alert-danger\" ng-repeat=\"msg in ctrl.error_messages\">{{msg}}</div>\n" +
7003 7044 " <div class=\"text-center\" ng-show=\"ctrl.loading\">\n" +
7004 7045 " <span class=\"fa fa-cog fa-spin fa-5x loader m-a-4\"></span>\n" +
7005 7046 " </div>\n" +
7006 7047 "\n" +
7007 7048 " <form role=\"form\" ng-show=\"!ctrl.loading\">\n" +
7008 7049 " <div class=\"form-group\">\n" +
7009 7050 " <label for=\"issue_title\">Issue Title</label>\n" +
7010 7051 " <input type=\"text\" class=\"form-control\" id=\"issue_title\" placeholder=\"Issue title\" ng-model=\"ctrl.form.title\">\n" +
7011 7052 " </div>\n" +
7012 7053 "\n" +
7013 7054 " <div class=\"form-group\">\n" +
7014 7055 " <label for=\"issue_type\">Issue Type</label>\n" +
7015 7056 " <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" +
7016 7057 " </div>\n" +
7017 7058 " <div class=\"form-group row\">\n" +
7018 7059 " <div class=\"col-sm-6\">\n" +
7019 7060 " <label for=\"issue_priority\">Priority</label>\n" +
7020 7061 " <select class=\"form-control\" id=\"issue_priority\" ng-options=\"s.name for s in ctrl.priorities\" ng-model=\"ctrl.form.priority\"></select>\n" +
7021 7062 " </div>\n" +
7022 7063 "\n" +
7023 7064 " <div class=\"col-sm-6\">\n" +
7024 7065 " <label for=\"issue_responsible\">Assignee</label>\n" +
7025 7066 " <select class=\"form-control\" id=\"issue_responsible\" ng-options=\"a.name for a in ctrl.assignees\" ng-model=\"ctrl.form.responsible\"></select>\n" +
7026 7067 " </div>\n" +
7027 7068 " </div>\n" +
7028 7069 " <div class=\"form-group\">\n" +
7029 7070 " <label for=\"issue_content\">Description</label>\n" +
7030 7071 " <textarea id=\"issue_content\" class=\"form-control\" ng-model=\"ctrl.form.content\" style=\"min-height: 100px\"></textarea>\n" +
7031 7072 " </div>\n" +
7032 7073 " </form>\n" +
7033 7074 "\n" +
7034 7075 " </div>\n" +
7035 7076 " <div class=\"modal-footer\">\n" +
7036 7077 " <button class=\"btn btn-primary\" ng-click=\"ctrl.ok()\">Add issue</button>\n" +
7037 7078 " <button class=\"btn btn-warning\" ng-click=\"ctrl.cancel()\">Cancel</button>\n" +
7038 7079 " </div>\n"
7039 7080 );
7040 7081
7041 7082
7042 7083 $templateCache.put('templates/loader.html',
7043 7084 "<div class=\"text-center\">\n" +
7044 7085 " <span class=\"fa fa-cog fa-spin fa-5x m-a-4\"></span>\n" +
7045 7086 "</div>\n"
7046 7087 );
7047 7088
7048 7089
7049 7090 $templateCache.put('templates/quickstart.html',
7050 7091 "<h2>AppEnlight quickstart</h2>\n" +
7051 7092 "\n" +
7052 7093 "<p>\n" +
7053 7094 " <span class=\"point\">1</span>\n" +
7054 7095 " For AppEnlight to operate, you need to\n" +
7055 7096 " <a data-ui-sref=\"applications.update({resourceId:'new'})\" target=\"_blank\"><strong>create an app profile</strong></a> that allows\n" +
7056 7097 " you to\n" +
7057 7098 " obtain an <strong>API key</strong> that one of the clients can use.\n" +
7058 7099 "</p>\n" +
7059 7100 "\n" +
7060 7101 "<div class=\"clear\"></div>\n" +
7061 7102 "<hr/>\n" +
7062 7103 "\n" +
7063 7104 "<p>\n" +
7064 7105 " <span class=\"point\">2</span>\n" +
7065 7106 " It is a good idea to configure an\n" +
7066 7107 " <a data-ui-sref=\"user.alert_channels.email\" target=\"_blank\">\n" +
7067 7108 " <strong>email alert channel</strong></a> that you can use to receive\n" +
7068 7109 " notifications about events that happen in your application.\n" +
7069 7110 "</p>\n" +
7070 7111 "\n" +
7071 7112 "<p>\n" +
7072 7113 " It can be the same email account you used to register withing AppEnlight -\n" +
7073 7114 " although we often recommend using a separate <em>errors@...</em> account\n" +
7074 7115 " designated for alert notifications.\n" +
7075 7116 "</p>\n" +
7076 7117 "\n" +
7077 7118 "<div class=\"clear\"></div>\n" +
7078 7119 "<hr/>\n" +
7079 7120 "\n" +
7080 7121 "<p>\n" +
7081 7122 " <span class=\"point\">3</span>\n" +
7082 7123 " In order for your application to stream meaningful information, you will need to\n" +
7083 7124 " integrate a compatible client for your language of choice.\n" +
7084 7125 "</p>\n" +
7085 7126 "\n" +
7086 7127 "<p>Head over to the <a href=\"{{AeConfig.urls.docs}}\" target=\"_blank\">\n" +
7087 7128 " <strong>developers section</strong></a> for information on currently available\n" +
7088 7129 " clients that you can plug into your software</p>\n"
7089 7130 );
7090 7131
7091 7132
7092 7133 $templateCache.put('templates/register.html',
7093 7134 ""
7094 7135 );
7095 7136
7096 7137
7097 7138 $templateCache.put('templates/reports/small_report_group_list.html',
7098 7139 "<table class=\"errors-small-list\">\n" +
7099 7140 " <tr ng-repeat=\"report_group in groups track by report_group.id\" class=\"animate-repeat\">\n" +
7100 7141 " <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report_group.occurences|numberToThousands }}</span></td>\n" +
7101 7142 " <td class=\"ellipsis c2 report_group\">\n" +
7102 7143 " <a ui-sref=\"report.view_detail({groupId:report_group.id, reportId:report_group.last_report})\" title=\"{{report_group.error}}\" class=\"error-type\">\n" +
7103 7144 " {{ report_group.error || \"Slow Report\"}}</a>\n" +
7104 7145 " <br/>\n" +
7105 7146 " <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" +
7106 7147 " <span class=\"url\">{{ report_group.view_name || report_group.url_path}}</span>\n" +
7107 7148 " </td>\n" +
7108 7149 " <td class=\"info\">\n" +
7109 7150 " <strong ng-show=\"report_group.resource_id\">@{{applications[report_group.resource_id].resource_name}}</strong><br/>\n" +
7110 7151 " <span class=\"date\">{{report_group.last_timestamp | isoToRelativeTime}}</span>\n" +
7111 7152 " </td>\n" +
7112 7153 " </tr>\n" +
7113 7154 "</table>\n"
7114 7155 );
7115 7156
7116 7157
7117 7158 $templateCache.put('templates/reports/small_report_list.html',
7118 7159 "<table class=\"errors-small-list\">\n" +
7119 7160 " <tr ng-repeat=\"report in reports track by $index\" ng-show=\"reports.length > 0\" class=\"animate-repeat\">\n" +
7120 7161 " <td class=\"c1 occurences\"><span class=\"occurences\" data-uib-tooltip=\"occurences\">{{ report.group.occurences|numberToThousands }}</span></td>\n" +
7121 7162 " <td class=\"ellipsis c2 report\">\n" +
7122 7163 " <a ui-sref=\"report.view_detail({groupId:report.group_id, reportId:report.report_id})\" title=\"{{report.error}}\" class=\"error-type\">\n" +
7123 7164 " {{ report.error || \"Slow Report\"}}</a>\n" +
7124 7165 " <br/>\n" +
7125 7166 " <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" +
7126 7167 " <span class=\"url\">{{ report.view_name || report.url_path}}</span>\n" +
7127 7168 " </td>\n" +
7128 7169 " <td class=\"info\">\n" +
7129 7170 " <strong ng-show=\"report.resource_id\">@{{applications[report.resource_id].resource_name}}</strong><br/>\n" +
7130 7171 " <span class=\"date\">{{report.last_timestamp | isoToRelativeTime}}</span>\n" +
7131 7172 " </td>\n" +
7132 7173 " </tr>\n" +
7133 7174 "</table>\n"
7134 7175 );
7135 7176
7136 7177
7137 7178 $templateCache.put('templates/settings_breadcrumbs.html',
7138 7179 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('applications')\">\n" +
7139 7180 " <li>Applications</li>\n" +
7140 7181 " <li ng-show=\"$ctrl.$state.includes('applications.list')\" ng-class=\"{bold:$ctrl.$state.is('applications.list')}\">Owned applications</li>\n" +
7141 7182 " <li ng-show=\"$ctrl.$state.includes('applications.update')\" ng-class=\"{bold:$ctrl.$state.is('applications.update')}\">Modify application</li>\n" +
7142 7183 " <li ng-show=\"$ctrl.$state.includes('applications.integrations')\" ng-class=\"{bold:$ctrl.$state.includes('applications.integrations')}\">Integrations</li>\n" +
7143 7184 " <li ng-show=\"$ctrl.$state.includes('applications.purge_logs')\" ng-class=\"{bold:$ctrl.$state.includes('applications.purge_logs')}\">Log Purging</li>\n" +
7144 7185 "</ol>\n" +
7145 7186 "\n" +
7146 7187 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.profile')\">\n" +
7147 7188 " <li>Settings</li>\n" +
7148 7189 " <li ng-show=\"$ctrl.$state.includes('user.profile.edit')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.edit')}\">User Profile</li>\n" +
7149 7190 " <li ng-show=\"$ctrl.$state.includes('user.profile.password')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.password')}\">Password</li>\n" +
7150 7191 " <li ng-show=\"$ctrl.$state.includes('user.profile.identities')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.identities')}\">Identities</li>\n" +
7151 7192 " <li ng-show=\"$ctrl.$state.includes('user.profile.auth_tokens')\" ng-class=\"{bold:$ctrl.$state.is('user.profile.auth_tokens')}\">Auth Tokens</li>\n" +
7152 7193 "</ol>\n" +
7153 7194 "<ol class=\"breadcrumb\" ng-show=\"$ctrl.$state.includes('user.alert_channels')\">\n" +
7154 7195 "<li>Notifications</li>\n" +
7155 7196 "<li ng-show=\"$ctrl.$state.includes('user.alert_channels.list')\" ng-class=\"{bold:$ctrl.$state.is('user.alert_channels.list')}\">Alert Channels</li>\n" +
7156 7197 "<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" +
7157 7198 "</ol>\n"
7158 7199 );
7159 7200
7160 7201 }]);
7161 7202
7162 7203 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7163 7204 //
7164 7205 // Licensed under the Apache License, Version 2.0 (the "License");
7165 7206 // you may not use this file except in compliance with the License.
7166 7207 // You may obtain a copy of the License at
7167 7208 //
7168 7209 // http://www.apache.org/licenses/LICENSE-2.0
7169 7210 //
7170 7211 // Unless required by applicable law or agreed to in writing, software
7171 7212 // distributed under the License is distributed on an "AS IS" BASIS,
7172 7213 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7173 7214 // See the License for the specific language governing permissions and
7174 7215 // limitations under the License.
7175 7216
7176 7217 angular.module('appenlight.components.appenlightApp', [])
7177 7218 .component('appenlightApp', {
7178 7219 templateUrl: 'components/appenlight-app/appenlight-app.html',
7179 7220 controller: AppEnlightAppController
7180 7221 });
7181 7222
7182 7223 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
7183 7224
7184 7225 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
7185 7226
7186 7227 // to keep bw compatibility
7187 7228 $scope.$state = $state;
7188 7229 $scope.stateHolder = stateHolder;
7189 7230 $scope.flash = stateHolder.flashMessages.list;
7190 7231 $scope.closeAlert = stateHolder.flashMessages.closeAlert;
7191 7232 $scope.AeConfig = AeConfig;
7192 7233 }
7193 7234
7194 7235 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7195 7236 //
7196 7237 // Licensed under the Apache License, Version 2.0 (the "License");
7197 7238 // you may not use this file except in compliance with the License.
7198 7239 // You may obtain a copy of the License at
7199 7240 //
7200 7241 // http://www.apache.org/licenses/LICENSE-2.0
7201 7242 //
7202 7243 // Unless required by applicable law or agreed to in writing, software
7203 7244 // distributed under the License is distributed on an "AS IS" BASIS,
7204 7245 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7205 7246 // See the License for the specific language governing permissions and
7206 7247 // limitations under the License.
7207 7248
7208 7249 angular.module('appenlight.components.appenlightHeader', [])
7209 7250 .component('appenlightFooter', {
7210 7251 templateUrl: 'templates/components/appenlight-footer.html',
7211 7252 controller: AppEnlightFooterController
7212 7253 });
7213 7254
7214 7255 ChannelstreamController.$inject = ['stateHolder', 'AeConfig'];
7215 7256
7216 function AppEnlightFooterController(stateHolder, AeConfig){
7257 function AppEnlightFooterController(stateHolder, AeConfig) {
7217 7258 var vm = this;
7218 vm.AeConfig = AeConfig;
7219 vm.stateHolder = stateHolder;
7259
7260 vm.$onInit = function () {
7261 vm.AeConfig = AeConfig;
7262 vm.stateHolder = stateHolder;
7263 }
7220 7264 }
7221 7265
7222 7266 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7223 7267 //
7224 7268 // Licensed under the Apache License, Version 2.0 (the "License");
7225 7269 // you may not use this file except in compliance with the License.
7226 7270 // You may obtain a copy of the License at
7227 7271 //
7228 7272 // http://www.apache.org/licenses/LICENSE-2.0
7229 7273 //
7230 7274 // Unless required by applicable law or agreed to in writing, software
7231 7275 // distributed under the License is distributed on an "AS IS" BASIS,
7232 7276 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7233 7277 // See the License for the specific language governing permissions and
7234 7278 // limitations under the License.
7235 7279
7236 7280 angular.module('appenlight.components.appenlightHeader', [])
7237 7281 .component('appenlightHeader', {
7238 7282 templateUrl: 'components/appenlight-header/appenlight-header.html',
7239 7283 controller: AppEnlightHeaderController
7240 7284 });
7241 7285
7242 7286 ChannelstreamController.$inject = ['$state', 'stateHolder', 'AeConfig'];
7243 7287
7244 function AppEnlightHeaderController($state, stateHolder, AeConfig){
7288 function AppEnlightHeaderController($state, stateHolder, AeConfig) {
7245 7289 var vm = this;
7246 vm.AeConfig = AeConfig;
7247 vm.stateHolder = stateHolder;
7248 vm.assignedReports = stateHolder.AeUser.assigned_reports;
7249 vm.latestEvents = stateHolder.AeUser.latest_events;
7250 vm.activeEvents = 0;
7251 _.each(vm.latestEvents, function (event) {
7252 if (event.status === 1 && event.end_date === null) {
7253 vm.activeEvents += 1;
7254 }
7255 });
7256 7290
7257 vm.clickedEvent = function(event){
7291 vm.$onInit = function () {
7292
7293 vm.AeConfig = AeConfig;
7294 vm.stateHolder = stateHolder;
7295 vm.assignedReports = stateHolder.AeUser.assigned_reports;
7296 vm.latestEvents = stateHolder.AeUser.latest_events;
7297 vm.activeEvents = 0;
7298 _.each(vm.latestEvents, function (event) {
7299 if (event.status === 1 && event.end_date === null) {
7300 vm.activeEvents += 1;
7301 }
7302 });
7303 }
7304
7305 vm.clickedEvent = function (event) {
7258 7306 // exception reports
7259 if (_.contains([1,2], event.event_type)){
7260 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
7307 if (_.contains([1, 2], event.event_type)) {
7308 $state.go('report.list', {resource: event.resource_id, start_date: event.start_date});
7261 7309 }
7262 7310 // slowness reports
7263 else if (_.contains([3,4], event.event_type)){
7264 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
7311 else if (_.contains([3, 4], event.event_type)) {
7312 $state.go('report.list_slow', {resource: event.resource_id, start_date: event.start_date});
7265 7313 }
7266 7314 // uptime reports
7267 else if (_.contains([7,8], event.event_type)){
7268 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
7269 }
7270 else{
7315 else if (_.contains([7, 8], event.event_type)) {
7316 $state.go('uptime', {resource: event.resource_id, start_date: event.start_date});
7317 } else {
7271 7318
7272 7319 }
7273 7320 }
7274 7321 }
7275 7322
7276 7323 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7277 7324 //
7278 7325 // Licensed under the Apache License, Version 2.0 (the "License");
7279 7326 // you may not use this file except in compliance with the License.
7280 7327 // You may obtain a copy of the License at
7281 7328 //
7282 7329 // http://www.apache.org/licenses/LICENSE-2.0
7283 7330 //
7284 7331 // Unless required by applicable law or agreed to in writing, software
7285 7332 // distributed under the License is distributed on an "AS IS" BASIS,
7286 7333 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7287 7334 // See the License for the specific language governing permissions and
7288 7335 // limitations under the License.
7289 7336
7290 7337 angular.module('appenlight.components.channelstream', [])
7291 7338 .component('channelstream', {
7292 7339 controller: ChannelstreamController,
7293 7340 bindings: {
7294 7341 config: '='
7295 7342 }
7296 7343 });
7297 7344
7298 7345 ChannelstreamController.$inject = ['$rootScope', 'stateHolder', 'userSelfPropertyResource'];
7299 7346
7300 7347 function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResource){
7301 7348 if (stateHolder.AeUser.id === null){
7302 7349 return
7303 7350 }
7304 7351 userSelfPropertyResource.get({key: 'websocket'}, function (data) {
7305 7352 stateHolder.websocket = new ReconnectingWebSocket(this.config.ws_url + '/ws?conn_id=' + data.conn_id);
7306 7353 stateHolder.websocket.onopen = function (event) {
7307 7354
7308 7355 };
7309 7356 stateHolder.websocket.onmessage = function (event) {
7310 7357 var data = JSON.parse(event.data);
7311 7358 $rootScope.$apply(function (scope) {
7312 7359 _.each(data, function (message) {
7313 7360
7314 7361 if(typeof message.message.topic !== 'undefined'){
7315 7362 $rootScope.$emit(
7316 7363 'channelstream-message.'+message.message.topic, message);
7317 7364 }
7318 7365 else{
7319 7366 $rootScope.$emit('channelstream-message', message);
7320 7367 }
7321 7368 });
7322 7369 });
7323 7370 };
7324 7371 stateHolder.websocket.onclose = function (event) {
7325 7372
7326 7373 };
7327 7374
7328 7375 stateHolder.websocket.onerror = function (event) {
7329 7376
7330 7377 };
7331 7378 }.bind(this));
7332 7379 }
7333 7380
7334 7381 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7335 7382 //
7336 7383 // Licensed under the Apache License, Version 2.0 (the "License");
7337 7384 // you may not use this file except in compliance with the License.
7338 7385 // You may obtain a copy of the License at
7339 7386 //
7340 7387 // http://www.apache.org/licenses/LICENSE-2.0
7341 7388 //
7342 7389 // Unless required by applicable law or agreed to in writing, software
7343 7390 // distributed under the License is distributed on an "AS IS" BASIS,
7344 7391 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7345 7392 // See the License for the specific language governing permissions and
7346 7393 // limitations under the License.
7347 7394
7348 7395 angular.module('appenlight.components.adminApplicationsListView', [])
7349 7396 .component('adminApplicationsListView', {
7350 7397 templateUrl: 'components/views/admin-applications-list-view/admin-applications-list-view.html',
7351 7398 controller: AdminApplicationsListController
7352 7399 });
7353 7400
7354 7401 AdminApplicationsListController.$inject = ['applicationsResource'];
7355 7402
7356 7403 function AdminApplicationsListController(applicationsResource) {
7357 7404
7358 7405 var vm = this;
7359 vm.loading = {applications: true};
7406 vm.$onInit = function () {
7407 vm.loading = {applications: true};
7360 7408
7361 vm.applications = applicationsResource.query({
7362 root_list: true,
7363 resource_type: 'application'
7364 }, function (data) {
7365 vm.loading = {applications: false};
7366 });
7409 vm.applications = applicationsResource.query({
7410 root_list: true,
7411 resource_type: 'application'
7412 }, function (data) {
7413 vm.loading = {applications: false};
7414 });
7415 }
7367 7416 };
7368 7417
7369 7418 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7370 7419 //
7371 7420 // Licensed under the Apache License, Version 2.0 (the "License");
7372 7421 // you may not use this file except in compliance with the License.
7373 7422 // You may obtain a copy of the License at
7374 7423 //
7375 7424 // http://www.apache.org/licenses/LICENSE-2.0
7376 7425 //
7377 7426 // Unless required by applicable law or agreed to in writing, software
7378 7427 // distributed under the License is distributed on an "AS IS" BASIS,
7379 7428 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7380 7429 // See the License for the specific language governing permissions and
7381 7430 // limitations under the License.
7382 7431
7383 7432 angular.module('appenlight.components.adminConfigurationView', [])
7384 7433 .component('adminConfigurationView', {
7385 7434 templateUrl: 'components/views/admin-configuration-view/admin-configuration-view.html',
7386 7435 controller: AdminConfigurationViewController
7387 7436 });
7388 7437
7389 7438 AdminConfigurationViewController.$inject = ['configsResource', 'configsNoIdResource'];
7390 7439
7391 7440 function AdminConfigurationViewController(configsResource, configsNoIdResource) {
7392 7441 var vm = this;
7393 vm.loading = {config: true};
7394
7395 var filters = [
7396 'template_footer_html:global',
7397 'list_groups_to_non_admins:global',
7398 'per_application_reports_rate_limit:global',
7399 'per_application_logs_rate_limit:global',
7400 'per_application_metrics_rate_limit:global',
7401 ];
7402
7403 vm.configs = {};
7404
7405 vm.configList = configsResource.query({filter: filters},
7406 function (data) {
7407 vm.loading = {config: false};
7408 _.each(data, function (item) {
7409 if (vm.configs[item.section] === undefined) {
7410 vm.configs[item.section] = {};
7411 }
7412 vm.configs[item.section][item.key] = item;
7413 });
7414 });
7442 vm.$onInit = function () {
7443 vm.loading = {config: true};
7444
7445 var filters = [
7446 'template_footer_html:global',
7447 'list_groups_to_non_admins:global',
7448 'per_application_reports_rate_limit:global',
7449 'per_application_logs_rate_limit:global',
7450 'per_application_metrics_rate_limit:global',
7451 ];
7452
7453 vm.configs = {};
7415 7454
7455 vm.configList = configsResource.query({filter: filters},
7456 function (data) {
7457 vm.loading = {config: false};
7458 _.each(data, function (item) {
7459 if (vm.configs[item.section] === undefined) {
7460 vm.configs[item.section] = {};
7461 }
7462 vm.configs[item.section][item.key] = item;
7463 });
7464 });
7465 }
7416 7466 vm.save = function () {
7417 7467 vm.loading.config = true;
7418 7468 _.each(vm.configList, function (item) {
7419 7469 item.$save();
7420 7470 });
7421 7471 vm.loading.config = false;
7422 7472 };
7423 7473
7424 7474 };
7425 7475
7426 7476 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7427 7477 //
7428 7478 // Licensed under the Apache License, Version 2.0 (the "License");
7429 7479 // you may not use this file except in compliance with the License.
7430 7480 // You may obtain a copy of the License at
7431 7481 //
7432 7482 // http://www.apache.org/licenses/LICENSE-2.0
7433 7483 //
7434 7484 // Unless required by applicable law or agreed to in writing, software
7435 7485 // distributed under the License is distributed on an "AS IS" BASIS,
7436 7486 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7437 7487 // See the License for the specific language governing permissions and
7438 7488 // limitations under the License.
7439 7489
7440 7490 angular.module('appenlight.components.adminGroupsCreateView', [])
7441 7491 .component('adminGroupsCreateView', {
7442 7492 templateUrl: 'components/views/admin-groups-create-view/admin-groups-create-view.html',
7443 7493 controller: AdminGroupsCreateViewController
7444 7494 });
7445 7495
7446 7496 AdminGroupsCreateViewController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource'];
7447 7497
7448 7498 function AdminGroupsCreateViewController($state, groupsResource, groupsPropertyResource, sectionViewResource) {
7449 7499
7450 7500 var vm = this;
7451 vm.$state = $state;
7452 vm.loading = {
7453 group: false,
7454 resource_permissions: false,
7455 users: false
7456 };
7501 vm.$onInit = function () {
7502 vm.$state = $state;
7503 vm.loading = {
7504 group: false,
7505 resource_permissions: false,
7506 users: false
7507 };
7457 7508
7458 vm.form = {
7459 autocompleteUser: '',
7460 }
7509 vm.form = {
7510 autocompleteUser: '',
7511 }
7461 7512
7462 7513
7463 if (typeof $state.params.groupId !== 'undefined') {
7464 vm.loading.group = true;
7465 var groupId = $state.params.groupId;
7466 vm.group = groupsResource.get({groupId: groupId}, function (data) {
7467 vm.loading.group = false;
7468 });
7514 if (typeof $state.params.groupId !== 'undefined') {
7515 vm.loading.group = true;
7516 var groupId = $state.params.groupId;
7517 vm.group = groupsResource.get({groupId: groupId}, function (data) {
7518 vm.loading.group = false;
7519 });
7469 7520
7470 vm.resource_permissions = groupsPropertyResource.query(
7471 {groupId: groupId, key: 'resource_permissions'}, function (data) {
7472 vm.loading.resource_permissions = false;
7473 var tmpObj = {
7474 'group': {
7475 'application': {},
7476 'dashboard': {}
7477 }
7478 };
7479 _.each(data, function (item) {
7480
7481 var section = tmpObj[item.type][item.resource_type];
7482 if (typeof section[item.resource_id] == 'undefined') {
7483 section[item.resource_id] = {
7484 self: item,
7485 permissions: []
7521 vm.resource_permissions = groupsPropertyResource.query(
7522 {groupId: groupId, key: 'resource_permissions'}, function (data) {
7523 vm.loading.resource_permissions = false;
7524 var tmpObj = {
7525 'group': {
7526 'application': {},
7527 'dashboard': {}
7486 7528 }
7487 }
7488 section[item.resource_id].permissions.push(item.perm_name);
7529 };
7530 _.each(data, function (item) {
7531
7532 var section = tmpObj[item.type][item.resource_type];
7533 if (typeof section[item.resource_id] == 'undefined') {
7534 section[item.resource_id] = {
7535 self: item,
7536 permissions: []
7537 }
7538 }
7539 section[item.resource_id].permissions.push(item.perm_name);
7489 7540
7541 });
7542 vm.resourcePermissions = tmpObj;
7490 7543 });
7491 vm.resourcePermissions = tmpObj;
7492 });
7493 7544
7494 vm.users = groupsPropertyResource.query(
7495 {groupId: groupId, key: 'users'}, function (data) {
7496 vm.loading.users = false;
7497 }, function () {
7498 vm.loading.users = false;
7499 });
7545 vm.users = groupsPropertyResource.query(
7546 {groupId: groupId, key: 'users'}, function (data) {
7547 vm.loading.users = false;
7548 }, function () {
7549 vm.loading.users = false;
7550 });
7551
7552 } else {
7553 var groupId = null;
7554 }
7500 7555
7501 }
7502 else {
7503 var groupId = null;
7504 7556 }
7505 7557
7506 7558 var formResponse = function (response) {
7507 7559 if (response.status === 422) {
7508 7560 setServerValidation(vm.groupForm, response.data);
7509 7561 }
7510 7562 vm.loading.group = false;
7511 7563 };
7512 7564
7513 7565 vm.createGroup = function () {
7514 7566 vm.loading.group = true;
7515 7567 if (groupId) {
7516 7568 groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
7517 7569 setServerValidation(vm.groupForm);
7518 7570 vm.loading.group = false;
7519 7571 }, formResponse);
7520 }
7521 else {
7572 } else {
7522 7573 groupsResource.save(vm.group, function (data) {
7523 7574 $state.go('admin.group.update', {groupId: data.id});
7524 7575 }, formResponse);
7525 7576 }
7526 7577 };
7527 7578
7528 7579 vm.removeUser = function (user) {
7529 7580 groupsPropertyResource.delete(
7530 7581 {groupId: groupId, key: 'users', user_name: user.user_name},
7531 7582 function (data) {
7532 7583 vm.loading.users = false;
7533 7584 vm.users = _.filter(vm.users, function (item) {
7534 7585 return item != user;
7535 7586 });
7536 7587 }, function () {
7537 7588 vm.loading.users = false;
7538 7589 });
7539 7590 };
7540 7591
7541 7592 vm.addUser = function () {
7542 7593 groupsPropertyResource.save(
7543 7594 {groupId: groupId, key: 'users'},
7544 7595 {user_name: vm.form.autocompleteUser},
7545 7596 function (data) {
7546 7597 vm.loading.users = false;
7547 7598 vm.users.push(data);
7548 7599 vm.form.autocompleteUser = '';
7549 7600 }, function () {
7550 7601 vm.loading.users = false;
7551 7602 });
7552 7603 }
7553 7604
7554 7605 vm.searchUsers = function (searchPhrase) {
7555 7606
7556 7607 return sectionViewResource.query({
7557 7608 section: 'users_section',
7558 7609 view: 'search_users',
7559 7610 'user_name': searchPhrase
7560 7611 }).$promise.then(function (data) {
7561 return _.map(data, function (item) {
7562 return item.user;
7563 });
7612 return _.map(data, function (item) {
7613 return item.user;
7564 7614 });
7615 });
7565 7616 }
7566 7617 };
7567 7618
7568 7619 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7569 7620 //
7570 7621 // Licensed under the Apache License, Version 2.0 (the "License");
7571 7622 // you may not use this file except in compliance with the License.
7572 7623 // You may obtain a copy of the License at
7573 7624 //
7574 7625 // http://www.apache.org/licenses/LICENSE-2.0
7575 7626 //
7576 7627 // Unless required by applicable law or agreed to in writing, software
7577 7628 // distributed under the License is distributed on an "AS IS" BASIS,
7578 7629 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7579 7630 // See the License for the specific language governing permissions and
7580 7631 // limitations under the License.
7581 7632
7582 7633 angular.module('appenlight.components.adminGroupsListView', [])
7583 7634 .component('adminGroupsListView', {
7584 7635 templateUrl: 'components/views/admin-groups-list-view/admin-groups-list-view.html',
7585 7636 controller: AdminGroupsListViewController
7586 7637 });
7587 7638
7588 7639 AdminGroupsListViewController.$inject = ['$state', 'groupsResource'];
7589 7640
7590 7641 function AdminGroupsListViewController($state, groupsResource) {
7591 7642
7592 7643 var vm = this;
7593 vm.$state = $state;
7594 vm.loading = {groups: true};
7595
7596 vm.groups = groupsResource.query({}, function (data) {
7597 vm.loading = {groups: false};
7598 vm.activeUsers = _.reduce(vm.groups, function(memo, val){
7599 if (val.status == 1){
7600 return memo + 1;
7601 }
7602 return memo;
7603 }, 0);
7604
7605 });
7606
7644 this.$onInit = function () {
7645 vm.$state = $state;
7646 vm.loading = {groups: true};
7647
7648 vm.groups = groupsResource.query({}, function (data) {
7649 vm.loading = {groups: false};
7650 vm.activeUsers = _.reduce(vm.groups, function (memo, val) {
7651 if (val.status == 1) {
7652 return memo + 1;
7653 }
7654 return memo;
7655 }, 0);
7656
7657 });
7658 }
7607 7659
7608 7660 vm.removeGroup = function (group) {
7609 7661 groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
7610 7662
7611 7663 if (data) {
7612 7664 var index = vm.groups.indexOf(group);
7613 7665 if (index !== -1) {
7614 7666 vm.groups.splice(index, 1);
7615 7667 vm.activeGroups -= 1;
7616 7668 }
7617 7669 }
7618 7670 });
7619 7671 }
7620 7672 };
7621 7673
7622 7674 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7623 7675 //
7624 7676 // Licensed under the Apache License, Version 2.0 (the "License");
7625 7677 // you may not use this file except in compliance with the License.
7626 7678 // You may obtain a copy of the License at
7627 7679 //
7628 7680 // http://www.apache.org/licenses/LICENSE-2.0
7629 7681 //
7630 7682 // Unless required by applicable law or agreed to in writing, software
7631 7683 // distributed under the License is distributed on an "AS IS" BASIS,
7632 7684 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7633 7685 // See the License for the specific language governing permissions and
7634 7686 // limitations under the License.
7635 7687
7636 7688 angular.module('appenlight.components.adminPartitionsView', [])
7637 7689 .component('adminPartitionsView', {
7638 7690 templateUrl: 'components/views/admin-partitions-view/admin-partitions-view.html',
7639 7691 controller: AdminPartitionsViewController
7640 7692 });
7641 7693
7642 7694 AdminPartitionsViewController.$inject = ['sectionViewResource'];
7643 7695
7644 7696 function AdminPartitionsViewController(sectionViewResource) {
7645 7697 var vm = this;
7646 vm.permanentPartitions = [];
7647 vm.dailyPartitions = [];
7648 vm.loading = {partitions: true};
7649 vm.dailyChecked = false;
7650 vm.permChecked = false;
7651 vm.dailyConfirm = '';
7652 vm.permConfirm = '';
7698 this.$onInit = function () {
7699 vm.permanentPartitions = [];
7700 vm.dailyPartitions = [];
7701 vm.loading = {partitions: true};
7702 vm.dailyChecked = false;
7703 vm.permChecked = false;
7704 vm.dailyConfirm = '';
7705 vm.permConfirm = '';
7653 7706
7707 sectionViewResource.get({section: 'admin_section', view: 'partitions'},
7708 vm.loadPartitions);
7709 }
7654 7710
7655 7711 vm.loadPartitions = function (data) {
7656 7712 var permanentPartitions = vm.transformPartitionList(
7657 7713 data.permanent_partitions);
7658 7714 var dailyPartitions = vm.transformPartitionList(
7659 7715 data.daily_partitions);
7660 7716 vm.permanentPartitions = permanentPartitions;
7661 7717 vm.dailyPartitions = dailyPartitions;
7662 7718 vm.loading = {partitions: false};
7663 7719 };
7664 7720
7665 7721 vm.setCheckedList = function (scope) {
7666 7722 var toTest = null;
7667 if (scope === 'dailyPartitions'){
7723 if (scope === 'dailyPartitions') {
7668 7724 toTest = 'dailyChecked';
7669 }
7670 else{
7725 } else {
7671 7726 toTest = 'permChecked';
7672 7727 }
7673 7728
7674 7729 if (vm[toTest]) {
7675 7730 var val = true;
7676 }
7677 else {
7731 } else {
7678 7732 var val = false;
7679 7733 }
7680 7734
7681 7735 _.each(vm[scope], function (item) {
7682 7736 _.each(item[1].pg, function (index) {
7683 7737 index.checked = val;
7684 7738 });
7685 7739 _.each(item[1].elasticsearch, function (index) {
7686 7740 index.checked = val;
7687 7741 });
7688 7742 });
7689 7743 }
7690 7744
7691 7745
7692 7746 vm.transformPartitionList = function (inputList) {
7693 7747 var outputList = [];
7694 7748
7695 7749 _.each(inputList, function (item) {
7696 7750 var time = [item[0], {
7697 7751 elasticsearch: [],
7698 7752 pg: []
7699 7753 }]
7700 7754 _.each(item[1].pg, function (index) {
7701 7755 time[1].pg.push({name: index, checked: false})
7702 7756 });
7703 7757 _.each(item[1].elasticsearch, function (index) {
7704 7758 time[1].elasticsearch.push({
7705 7759 name: index,
7706 7760 checked: false
7707 7761 })
7708 7762 });
7709 7763 outputList.push(time);
7710 7764 });
7711 7765 return outputList;
7712 7766 };
7713 7767
7714 sectionViewResource.get({section:'admin_section', view: 'partitions'},
7715 vm.loadPartitions);
7716
7717 7768 vm.partitionsDelete = function (partitionType) {
7718 7769 var es_indices = [];
7719 7770 var pg_indices = [];
7720 7771 _.each(vm[partitionType], function (item) {
7721 7772 _.each(item[1].pg, function (index) {
7722 7773 if (index.checked) {
7723 7774 pg_indices.push(index.name)
7724 7775 }
7725 7776 });
7726 7777 _.each(item[1].elasticsearch, function (index) {
7727 7778 if (index.checked) {
7728 7779 es_indices.push(index.name)
7729 7780 }
7730 7781 });
7731 7782 });
7732 7783
7733 7784
7734 7785 vm.loading = {partitions: true};
7735 sectionViewResource.save({section:'admin_section',
7736 view: 'partitions_remove'}, {
7786 sectionViewResource.save({
7787 section: 'admin_section',
7788 view: 'partitions_remove'
7789 }, {
7737 7790 es_indices: es_indices,
7738 7791 pg_indices: pg_indices,
7739 7792 confirm: 'CONFIRM'
7740 7793 }, vm.loadPartitions);
7741 7794
7742 7795 }
7743 7796
7744 7797 }
7745 7798
7746 7799 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7747 7800 //
7748 7801 // Licensed under the Apache License, Version 2.0 (the "License");
7749 7802 // you may not use this file except in compliance with the License.
7750 7803 // You may obtain a copy of the License at
7751 7804 //
7752 7805 // http://www.apache.org/licenses/LICENSE-2.0
7753 7806 //
7754 7807 // Unless required by applicable law or agreed to in writing, software
7755 7808 // distributed under the License is distributed on an "AS IS" BASIS,
7756 7809 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7757 7810 // See the License for the specific language governing permissions and
7758 7811 // limitations under the License.
7759 7812
7760 7813 angular.module('appenlight.components.adminSystemView', [])
7761 7814 .component('adminSystemView', {
7762 7815 templateUrl: 'components/views/admin-system-view/admin-system-view.html',
7763 7816 controller: AdminSystemViewController
7764 7817 });
7765 7818
7766 7819 AdminSystemViewController.$inject = ['sectionViewResource'];
7767 7820
7768 7821 function AdminSystemViewController(sectionViewResource) {
7769 7822 var vm = this;
7770 vm.tables = [];
7771 vm.loading = {system: true};
7772 sectionViewResource.get({
7773 section: 'admin_section',
7774 view: 'system'
7775 }, null, function (data) {
7776 vm.DBtables = data.db_tables;
7777 vm.ESIndices = data.es_indices;
7778 vm.queueStats = data.queue_stats;
7779 vm.systemLoad = data.system_load;
7780 vm.packages = data.packages;
7781 vm.processInfo = data.process_info;
7782 vm.disks = data.disks;
7783 vm.memory = data.memory;
7784 vm.selfInfo = data.self_info;
7785
7786 vm.loading.system = false;
7787 });
7823 this.$onInit = function () {
7824 vm.tables = [];
7825 vm.loading = {system: true};
7826
7827 sectionViewResource.get({
7828 section: 'admin_section',
7829 view: 'system'
7830 }, null, function (data) {
7831 vm.DBtables = data.db_tables;
7832 vm.ESIndices = data.es_indices;
7833 vm.queueStats = data.queue_stats;
7834 vm.systemLoad = data.system_load;
7835 vm.packages = data.packages;
7836 vm.processInfo = data.process_info;
7837 vm.disks = data.disks;
7838 vm.memory = data.memory;
7839 vm.selfInfo = data.self_info;
7840 vm.loading.system = false;
7841 });
7842 }
7788 7843 };
7789 7844
7790 7845 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7791 7846 //
7792 7847 // Licensed under the Apache License, Version 2.0 (the "License");
7793 7848 // you may not use this file except in compliance with the License.
7794 7849 // You may obtain a copy of the License at
7795 7850 //
7796 7851 // http://www.apache.org/licenses/LICENSE-2.0
7797 7852 //
7798 7853 // Unless required by applicable law or agreed to in writing, software
7799 7854 // distributed under the License is distributed on an "AS IS" BASIS,
7800 7855 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7801 7856 // See the License for the specific language governing permissions and
7802 7857 // limitations under the License.
7803 7858
7804 7859 angular.module('appenlight.components.adminUsersCreateView', [])
7805 7860 .component('adminUsersCreateView', {
7806 7861 templateUrl: 'components/views/admin-users-create-view/admin-users-create-view.html',
7807 7862 controller: AdminUsersCreateViewController
7808 7863 });
7809 7864
7810 7865 AdminUsersCreateViewController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
7811 7866
7812 7867 function AdminUsersCreateViewController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
7813 7868
7814 7869 var vm = this;
7815 vm.$state = $state;
7816 vm.loading = {user: false};
7870 vm.$onInit = function () {
7871 vm.$state = $state;
7872 vm.loading = {user: false};
7817 7873
7818 7874
7819 if (typeof $state.params.userId !== 'undefined') {
7820 vm.loading.user = true;
7821 var userId = $state.params.userId;
7822 vm.user = usersResource.get({userId: userId}, function (data) {
7823 vm.loading.user = false;
7824 // cast to true for angular checkbox
7825 if (vm.user.status === 1) {
7826 vm.user.status = true;
7827 }
7828 });
7875 if (typeof $state.params.userId !== 'undefined') {
7876 vm.loading.user = true;
7877 var userId = $state.params.userId;
7878 vm.user = usersResource.get({userId: userId}, function (data) {
7879 vm.loading.user = false;
7880 // cast to true for angular checkbox
7881 if (vm.user.status === 1) {
7882 vm.user.status = true;
7883 }
7884 });
7829 7885
7830 vm.resource_permissions = usersPropertyResource.query(
7831 {userId: userId, key: 'resource_permissions'}, function (data) {
7832 vm.loading.resource_permissions = false;
7833 var tmpObj = {
7834 'user': {
7835 'application': {},
7836 'dashboard': {}
7837 },
7838 'group': {
7839 'application': {},
7840 'dashboard': {}
7841 }
7842 };
7843 _.each(data, function (item) {
7844
7845 var section = tmpObj[item.type][item.resource_type];
7846 if (typeof section[item.resource_id] == 'undefined'){
7847 section[item.resource_id] = {
7848 self:item,
7849 permissions: []
7886 vm.resource_permissions = usersPropertyResource.query(
7887 {userId: userId, key: 'resource_permissions'}, function (data) {
7888 vm.loading.resource_permissions = false;
7889 var tmpObj = {
7890 'user': {
7891 'application': {},
7892 'dashboard': {}
7893 },
7894 'group': {
7895 'application': {},
7896 'dashboard': {}
7850 7897 }
7851 }
7852 section[item.resource_id].permissions.push(item.perm_name);
7898 };
7899 _.each(data, function (item) {
7900
7901 var section = tmpObj[item.type][item.resource_type];
7902 if (typeof section[item.resource_id] == 'undefined') {
7903 section[item.resource_id] = {
7904 self: item,
7905 permissions: []
7906 }
7907 }
7908 section[item.resource_id].permissions.push(item.perm_name);
7853 7909
7910 });
7911 vm.resourcePermissions = tmpObj;
7854 7912 });
7855 vm.resourcePermissions = tmpObj;
7856 });
7857 7913
7858 }
7859 else {
7860 var userId = null;
7861 vm.user = {
7862 status: true
7914 } else {
7915 var userId = null;
7916 vm.user = {
7917 status: true
7918 }
7863 7919 }
7864 7920 }
7865 7921
7866 7922 var formResponse = function (response) {
7867 7923 if (response.status == 422) {
7868 7924 setServerValidation(vm.profileForm, response.data);
7869 7925 }
7870 7926 vm.loading.user = false;
7871 7927 }
7872 7928
7873 7929 vm.createUser = function () {
7874 7930 vm.loading.user = true;
7875 7931
7876 7932 if (userId) {
7877 7933 usersResource.update({userId: vm.user.id}, vm.user, function (data) {
7878 7934 setServerValidation(vm.profileForm);
7879 7935 vm.loading.user = false;
7880 7936 }, formResponse);
7881 7937 }
7882 7938 else {
7883 7939 usersResource.save(vm.user, function (data) {
7884 7940 $state.go('admin.user.update', {userId: data.id});
7885 7941 }, formResponse);
7886 7942 }
7887 7943 }
7888 7944
7889 7945 vm.generatePassword = function () {
7890 7946 var length = 8;
7891 7947 var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
7892 7948 vm.gen_pass = "";
7893 7949 for (var i = 0, n = charset.length; i < length; ++i) {
7894 7950 vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
7895 7951 }
7896 7952 vm.user.user_password = '' + vm.gen_pass;
7897 7953
7898 7954 }
7899 7955
7900 7956 vm.reloginUser = function () {
7901 7957 sectionViewResource.get({
7902 7958 section: 'admin_section', view: 'relogin_user',
7903 7959 user_id: vm.user.id
7904 7960 }, function () {
7905 7961 window.location = AeConfig.urls.baseUrl;
7906 7962 });
7907 7963
7908 7964 }
7909 7965 };
7910 7966
7911 7967 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7912 7968 //
7913 7969 // Licensed under the Apache License, Version 2.0 (the "License");
7914 7970 // you may not use this file except in compliance with the License.
7915 7971 // You may obtain a copy of the License at
7916 7972 //
7917 7973 // http://www.apache.org/licenses/LICENSE-2.0
7918 7974 //
7919 7975 // Unless required by applicable law or agreed to in writing, software
7920 7976 // distributed under the License is distributed on an "AS IS" BASIS,
7921 7977 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7922 7978 // See the License for the specific language governing permissions and
7923 7979 // limitations under the License.
7924 7980
7925 7981 angular.module('appenlight.components.adminUsersListView', [])
7926 7982 .component('adminUsersListView', {
7927 7983 templateUrl: 'components/views/admin-users-list-view/admin-users-list-view.html',
7928 7984 controller: AdminUserListViewController
7929 7985 });
7930 7986
7931 7987 AdminUserListViewController.$inject = ['usersResource'];
7932 7988
7933 7989 function AdminUserListViewController(usersResource) {
7934 7990
7935 7991 var vm = this;
7936 vm.loading = {users: true};
7937
7938 vm.users = usersResource.query({}, function (data) {
7939 vm.loading = {users: false};
7940 vm.activeUsers = _.reduce(vm.users, function(memo, val){
7941 if (val.status == 1){
7942 return memo + 1;
7943 }
7944 return memo;
7945 }, 0);
7946
7947 });
7948
7992 vm.$onInit = function () {
7993 vm.loading = {users: true};
7994
7995 vm.users = usersResource.query({}, function (data) {
7996 vm.loading = {users: false};
7997 vm.activeUsers = _.reduce(vm.users, function (memo, val) {
7998 if (val.status == 1) {
7999 return memo + 1;
8000 }
8001 return memo;
8002 }, 0);
8003
8004 });
8005 }
7949 8006
7950 8007 vm.removeUser = function (user) {
7951 8008 usersResource.remove({userId: user.id}, function (data, responseHeaders) {
7952 8009
7953 8010 if (data) {
7954 8011 var index = vm.users.indexOf(user);
7955 8012 if (index !== -1) {
7956 8013 vm.users.splice(index, 1);
7957 8014 vm.activeUsers -= 1;
7958 8015 }
7959 8016 }
7960 8017 });
7961 8018 }
7962 8019 };
7963 8020
7964 8021 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7965 8022 //
7966 8023 // Licensed under the Apache License, Version 2.0 (the "License");
7967 8024 // you may not use this file except in compliance with the License.
7968 8025 // You may obtain a copy of the License at
7969 8026 //
7970 8027 // http://www.apache.org/licenses/LICENSE-2.0
7971 8028 //
7972 8029 // Unless required by applicable law or agreed to in writing, software
7973 8030 // distributed under the License is distributed on an "AS IS" BASIS,
7974 8031 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7975 8032 // See the License for the specific language governing permissions and
7976 8033 // limitations under the License.
7977 8034
7978 8035 angular.module('appenlight.components.adminView', [])
7979 8036 .component('adminView', {
7980 8037 templateUrl: 'components/views/admin-view/admin-view.html',
7981 8038 controller: AdminViewController
7982 8039 });
7983 8040
7984 8041 AdminViewController.$inject = ['$state', 'AeConfig'];
7985 8042
7986 8043 function AdminViewController($state, AeConfig) {
7987 this.$state = $state;
7988 this.AeConfig = AeConfig;
7989 console.info('AdminViewController');
8044 this.$onInit = function () {
8045 this.$state = $state;
8046 this.AeConfig = AeConfig;
8047 console.info('AdminViewController');
8048 }
8049
7990 8050 }
7991 8051
7992 8052 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
7993 8053 //
7994 8054 // Licensed under the Apache License, Version 2.0 (the "License");
7995 8055 // you may not use this file except in compliance with the License.
7996 8056 // You may obtain a copy of the License at
7997 8057 //
7998 8058 // http://www.apache.org/licenses/LICENSE-2.0
7999 8059 //
8000 8060 // Unless required by applicable law or agreed to in writing, software
8001 8061 // distributed under the License is distributed on an "AS IS" BASIS,
8002 8062 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8003 8063 // See the License for the specific language governing permissions and
8004 8064 // limitations under the License.
8005 8065
8006 8066 angular.module('appenlight.components.integrationsListView', [])
8007 8067 .component('integrationsListView', {
8008 8068 templateUrl: 'components/views/applications-integrations-view/applications-integrations-view.html',
8009 8069 controller: IntegrationsListViewController
8010 8070 });
8011 8071
8012 8072 IntegrationsListViewController.$inject = ['$state', 'applicationsResource'];
8013 8073
8014 8074 function IntegrationsListViewController($state, applicationsResource) {
8015 8075
8016 8076 var vm = this;
8017 vm.loading = {application: true};
8018 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
8019 vm.loading.application = false;
8020 $state.current.data.resource = vm.resource;
8021 });
8077 vm.$onInit = function () {
8078 vm.loading = {application: true};
8079 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
8080 vm.loading.application = false;
8081 $state.current.data.resource = vm.resource;
8082 });
8083 }
8022 8084 }
8023 8085
8024 8086 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8025 8087 //
8026 8088 // Licensed under the Apache License, Version 2.0 (the "License");
8027 8089 // you may not use this file except in compliance with the License.
8028 8090 // You may obtain a copy of the License at
8029 8091 //
8030 8092 // http://www.apache.org/licenses/LICENSE-2.0
8031 8093 //
8032 8094 // Unless required by applicable law or agreed to in writing, software
8033 8095 // distributed under the License is distributed on an "AS IS" BASIS,
8034 8096 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8035 8097 // See the License for the specific language governing permissions and
8036 8098 // limitations under the License.
8037 8099
8038 8100 angular.module('appenlight.components.applicationsListView', [])
8039 8101 .component('applicationsListView', {
8040 8102 templateUrl: 'components/views/applications-list-view/applications-list-view.html',
8041 8103 controller: ApplicationsListViewController
8042 8104 });
8043 8105
8044 8106 ApplicationsListViewController.$inject = ['$state', 'applicationsResource'];
8045 8107
8046 8108 function ApplicationsListViewController($state, applicationsResource) {
8047 8109
8048 8110 var vm = this;
8049 vm.$state = $state;
8050 vm.loading = {applications: true};
8051 vm.applications = applicationsResource.query(null, function(){
8052 vm.loading.applications = false;
8053 });
8111 vm.$onInit = function () {
8112 vm.$state = $state;
8113 vm.loading = {applications: true};
8114 vm.applications = applicationsResource.query(null, function () {
8115 vm.loading.applications = false;
8116 });
8117 }
8054 8118 }
8055 8119
8056 8120 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8057 8121 //
8058 8122 // Licensed under the Apache License, Version 2.0 (the "License");
8059 8123 // you may not use this file except in compliance with the License.
8060 8124 // You may obtain a copy of the License at
8061 8125 //
8062 8126 // http://www.apache.org/licenses/LICENSE-2.0
8063 8127 //
8064 8128 // Unless required by applicable law or agreed to in writing, software
8065 8129 // distributed under the License is distributed on an "AS IS" BASIS,
8066 8130 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8067 8131 // See the License for the specific language governing permissions and
8068 8132 // limitations under the License.
8069 8133
8070 8134 angular.module('appenlight.components.applicationsPurgeLogsView', [])
8071 8135 .component('applicationsPurgeLogsView', {
8072 8136 templateUrl: 'components/views/applications-purge-logs-view/applications-purge-logs-view.html',
8073 8137 controller: applicationsPurgeLogsViewController
8074 8138 });
8075 8139
8076 applicationsPurgeLogsViewController.$inject = ['$state' ,'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
8140 applicationsPurgeLogsViewController.$inject = ['$state', 'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
8077 8141
8078 8142 function applicationsPurgeLogsViewController($state, applicationsResource, sectionViewResource, logsNoIdResource) {
8079 8143
8080 8144 var vm = this;
8081 vm.$state = $state;
8082 vm.loading = {applications: true};
8145 vm.$onInit = function () {
8146 vm.$state = $state;
8147 vm.loading = {applications: true};
8083 8148
8084 vm.namespace = null;
8085 vm.selectedResource = null;
8086 vm.commonNamespaces = [];
8149 vm.namespace = null;
8150 vm.selectedResource = null;
8151 vm.commonNamespaces = [];
8087 8152
8088 vm.applications = applicationsResource.query({'type':'update_reports'}, function () {
8089 vm.loading.applications = false;
8090 vm.selectedResource = vm.applications[0].resource_id;
8091 vm.getCommonKeys();
8092 });
8153 vm.applications = applicationsResource.query({'type': 'update_reports'}, function () {
8154 vm.loading.applications = false;
8155 vm.selectedResource = vm.applications[0].resource_id;
8156 vm.getCommonKeys();
8157 });
8158 }
8093 8159
8094 8160 /**
8095 8161 * Fetches most commonly used tags in logs
8096 8162 */
8097 8163 vm.getCommonKeys = function () {
8098 8164 sectionViewResource.get({
8099 8165 section: 'logs_section',
8100 8166 view: 'common_tags',
8101 8167 resource: vm.selectedResource
8102 8168 }, function (data) {
8103 8169 vm.commonNamespaces = data['namespaces']
8104 8170 });
8105 8171 };
8106 8172
8107 8173 vm.purgeLogs = function () {
8108 8174 vm.loading.applications = true;
8109 logsNoIdResource.delete({resource:vm.selectedResource,
8110 namespace: vm.namespace}, function(){
8175 logsNoIdResource.delete({
8176 resource: vm.selectedResource,
8177 namespace: vm.namespace
8178 }, function () {
8111 8179 vm.loading.applications = false;
8112 8180 });
8113 8181 }
8114 8182 }
8115 8183
8116 8184 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8117 8185 //
8118 8186 // Licensed under the Apache License, Version 2.0 (the "License");
8119 8187 // you may not use this file except in compliance with the License.
8120 8188 // You may obtain a copy of the License at
8121 8189 //
8122 8190 // http://www.apache.org/licenses/LICENSE-2.0
8123 8191 //
8124 8192 // Unless required by applicable law or agreed to in writing, software
8125 8193 // distributed under the License is distributed on an "AS IS" BASIS,
8126 8194 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8127 8195 // See the License for the specific language governing permissions and
8128 8196 // limitations under the License.
8129 8197
8130 8198 angular.module('appenlight.components.applicationsUpdateView', [])
8131 8199 .component('applicationsUpdateView', {
8132 8200 templateUrl: 'components/views/applications-update-view/applications-update-view.html',
8133 8201 controller: applicationsUpdateViewController
8134 8202 });
8135 8203
8136 8204 applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder', 'AeConfig'];
8137 8205
8138 8206 function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder, AeConfig) {
8139 8207 'use strict';
8140 8208
8141 8209 var vm = this;
8142 vm.AeConfig = AeConfig;
8143 vm.$state = $state;
8144 vm.loading = {application: false};
8145
8146 vm.groupingOptions = [
8147 ['url_type', 'Error Type + location'],
8148 ['url_traceback', 'Traceback + location'],
8149 ['traceback_server', 'Traceback + Server'],
8150 ];
8151 var resourceId = $state.params.resourceId;
8152 var options = {};
8153 vm.momentJs = moment;
8154 vm.formTransferModel = {password:''};
8155
8156 // set initial data
8157
8158 if (resourceId === 'new') {
8159 vm.resource = {
8160 resource_id: null,
8161 slow_report_threshold: 10,
8162 error_report_threshold: 10,
8163 allow_permanent_storage: true,
8164 default_grouping: vm.groupingOptions[1][0]
8165 };
8166 }
8167 else {
8168 vm.loading.application = true;
8169 vm.resource = applicationsResource.get({
8170 'resourceId': resourceId
8171 }, function (data) {
8172 vm.loading.application = false;
8173 });
8210 vm.$onInit = function () {
8211 vm.AeConfig = AeConfig;
8212 vm.$state = $state;
8213 vm.loading = {application: false};
8214
8215 vm.groupingOptions = [
8216 ['url_type', 'Error Type + location'],
8217 ['url_traceback', 'Traceback + location'],
8218 ['traceback_server', 'Traceback + Server'],
8219 ];
8220 var resourceId = $state.params.resourceId;
8221 var options = {};
8222 vm.momentJs = moment;
8223 vm.formTransferModel = {password: ''};
8224
8225 // set initial data
8226
8227 if (resourceId === 'new') {
8228 vm.resource = {
8229 resource_id: null,
8230 slow_report_threshold: 10,
8231 error_report_threshold: 10,
8232 allow_permanent_storage: true,
8233 default_grouping: vm.groupingOptions[1][0]
8234 };
8235 } else {
8236 vm.loading.application = true;
8237 vm.resource = applicationsResource.get({
8238 'resourceId': resourceId
8239 }, function (data) {
8240 vm.loading.application = false;
8241 });
8242 }
8174 8243 }
8175 8244
8176
8177 8245 vm.updateBasicForm = function () {
8178 8246 vm.loading.application = true;
8179 8247 if (vm.resource.resource_id === null) {
8180 8248 applicationsNoIdResource.save(null, vm.resource, function (data) {
8181 8249 stateHolder.AeUser.addApplication(data);
8182 8250 $state.go('applications.update', {resourceId: data.resource_id});
8183 8251 setServerValidation(vm.BasicForm);
8184 8252 }, function (response) {
8185 8253 if (response.status == 422) {
8186 8254 setServerValidation(vm.BasicForm, response.data);
8187 8255 }
8188 8256 vm.loading.application = false;
8189 8257
8190 8258 });
8191 8259 }
8192 8260 else {
8193 8261 applicationsResource.update({resourceId: vm.resource.resource_id},
8194 8262 vm.resource, function (data) {
8195 8263 vm.resource = data;
8196 8264 vm.loading.application = false;
8197 8265 setServerValidation(vm.BasicForm);
8198 8266 }, function (response) {
8199 8267 if (response.status == 422) {
8200 8268 setServerValidation(vm.BasicForm, response.data);
8201 8269 }
8202 8270 vm.loading.application = false;
8203 8271 });
8204 8272 }
8205 8273 };
8206 8274
8207 8275 vm.addRule = function () {
8208 8276
8209 8277 applicationsPropertyResource.save({
8210 8278 resourceId: vm.resource.resource_id,
8211 8279 key: 'postprocessing_rules'
8212 8280 }, null,
8213 8281 function (data) {
8214 8282 vm.resource.postprocessing_rules.push(data);
8215 8283 }
8216 8284 );
8217 8285 };
8218 8286
8219 8287 vm.regenerateAPIKeys = function(){
8220 8288 vm.loading.application = true;
8221 8289 applicationsPropertyResource.save({
8222 8290 resourceId: vm.resource.resource_id,
8223 8291 key: 'api_key'
8224 8292 }, {password: vm.regenerateAPIKeysPassword},
8225 8293 function (data) {
8226 8294 vm.resource = data;
8227 8295 vm.loading.application = false;
8228 8296 vm.regenerateAPIKeysPassword = '';
8229 8297 setServerValidation(vm.regenerateAPIKeysForm);
8230 8298 },
8231 8299 function (response) {
8232 8300 if (response.status == 422) {
8233 8301 setServerValidation(vm.regenerateAPIKeysForm, response.data);
8234 8302
8235 8303 }
8236 8304 vm.loading.application = false;
8237 8305 }
8238 8306 )
8239 8307 };
8240 8308
8241 8309 vm.deleteApplication = function(){
8242 8310 vm.loading.application = true;
8243 8311 applicationsPropertyResource.update({
8244 8312 resourceId: vm.resource.resource_id,
8245 8313 key: 'delete_resource'
8246 8314 }, vm.formDeleteModel,
8247 8315 function (data) {
8248 8316 stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
8249 8317 $state.go('applications.list');
8250 8318 },
8251 8319 function (response) {
8252 8320 if (response.status == 422) {
8253 8321 setServerValidation(vm.formDelete, response.data);
8254 8322
8255 8323 }
8256 8324 vm.loading.application = false;
8257 8325 }
8258 8326 );
8259 8327 };
8260 8328
8261 8329 vm.transferApplication = function(){
8262 8330 vm.loading.application = true;
8263 8331 applicationsPropertyResource.update({
8264 8332 resourceId: vm.resource.resource_id,
8265 8333 key: 'owner'
8266 8334 }, vm.formTransferModel,
8267 8335 function (data) {
8268 8336 $state.go('applications.list');
8269 8337 },
8270 8338 function (response) {
8271 8339 if (response.status == 422) {
8272 8340 setServerValidation(vm.formTransfer, response.data);
8273 8341
8274 8342 }
8275 8343 vm.loading.application = false;
8276 8344 }
8277 8345 )
8278 8346 }
8279 8347
8280 8348 }
8281 8349
8282 8350 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8283 8351 //
8284 8352 // Licensed under the Apache License, Version 2.0 (the "License");
8285 8353 // you may not use this file except in compliance with the License.
8286 8354 // You may obtain a copy of the License at
8287 8355 //
8288 8356 // http://www.apache.org/licenses/LICENSE-2.0
8289 8357 //
8290 8358 // Unless required by applicable law or agreed to in writing, software
8291 8359 // distributed under the License is distributed on an "AS IS" BASIS,
8292 8360 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8293 8361 // See the License for the specific language governing permissions and
8294 8362 // limitations under the License.
8295 8363
8296 8364 angular.module('appenlight.components.eventBrowserView', [])
8297 8365 .component('eventBrowserView', {
8298 8366 templateUrl: 'components/views/event-browser/event-browser.html',
8299 8367 controller: EventBrowserController
8300 8368 });
8301 8369
8302 8370 EventBrowserController.$inject = ['eventsNoIdResource', 'eventsResource'];
8303 8371
8304 8372 function EventBrowserController(eventsNoIdResource, eventsResource) {
8305 8373 console.info('EventBrowserController');
8306 8374 var vm = this;
8375 vm.$onInit = function () {
8307 8376
8308 vm.loading = {events: true};
8309
8310 vm.events = eventsNoIdResource.query(
8311 {key: 'events'},
8312 function (data) {
8313 vm.loading.events = false;
8314 });
8377 vm.loading = {events: true};
8315 8378
8379 vm.events = eventsNoIdResource.query(
8380 {key: 'events'},
8381 function (data) {
8382 vm.loading.events = false;
8383 });
8384 }
8316 8385
8317 8386 vm.closeEvent = function (event) {
8318 8387
8319 8388 eventsResource.update({eventId: event.id}, {status: 0}, function (data) {
8320 8389 event.status = 0;
8321 8390 });
8322 8391 }
8323 8392
8324 8393 }
8325 8394
8326 8395 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8327 8396 //
8328 8397 // Licensed under the Apache License, Version 2.0 (the "License");
8329 8398 // you may not use this file except in compliance with the License.
8330 8399 // You may obtain a copy of the License at
8331 8400 //
8332 8401 // http://www.apache.org/licenses/LICENSE-2.0
8333 8402 //
8334 8403 // Unless required by applicable law or agreed to in writing, software
8335 8404 // distributed under the License is distributed on an "AS IS" BASIS,
8336 8405 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8337 8406 // See the License for the specific language governing permissions and
8338 8407 // limitations under the License.
8339 8408
8340 8409 angular.module('appenlight.components.indexDashboardView', [])
8341 8410 .component('indexDashboardView', {
8342 8411 templateUrl: 'components/views/index-dashboard/index-dashboard.html',
8343 8412 controller: IndexDashboardController
8344 8413 });
8345 8414
8346 8415 IndexDashboardController.$inject = ['$rootScope', '$scope', '$location','$cookies', '$interval', 'stateHolder', 'applicationsPropertyResource', 'AeConfig'];
8347 8416
8348 8417 function IndexDashboardController($rootScope, $scope, $location, $cookies, $interval, stateHolder, applicationsPropertyResource, AeConfig) {
8349 8418 var vm = this;
8350 stateHolder.section = 'dashboard';
8351 vm.timeOptions = {};
8352 var allowed = ['1h', '4h', '12h', '24h', '1w', '2w', '1M'];
8353 _.each(allowed, function (key) {
8354 if (allowed.indexOf(key) !== -1) {
8355 vm.timeOptions[key] = AeConfig.timeOptions[key];
8356 }
8357 });
8358 vm.stateHolder = stateHolder;
8359 vm.urls = AeConfig.urls;
8360 vm.applications = stateHolder.AeUser.applications_map;
8361 vm.show_dashboard = false;
8362 vm.resource = null;
8363 vm.graphType = {selected: null};
8364 vm.timeSpan = vm.timeOptions['1h'];
8365 vm.trendingReports = [];
8366 vm.exceptions = 0;
8367 vm.satisfyingRequests = 0;
8368 vm.toleratedRequests = 0;
8369 vm.frustratingRequests = 0;
8370 vm.uptimeStats = 0;
8371 vm.apdexStats = [];
8372 vm.seriesRequestsData = [];
8373 vm.seriesMetricsData = [];
8374 vm.seriesSlowData = [];
8375 vm.slowCalls = [];
8376 vm.slowURIS = [];
8377
8378 vm.reportChartConfig = {
8379 data: {
8380 json: [],
8381 xFormat: '%Y-%m-%dT%H:%M:%S'
8382 },
8383 color: {
8384 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8385 },
8386 axis: {
8387 x: {
8388 type: 'timeseries',
8389 tick: {
8390 culling: {
8391 max: 6 // the number of tick texts will be adjusted to less than this value
8392 },
8393 format: '%Y-%m-%d %H:%M'
8419 vm.$onInit = function () {
8420 stateHolder.section = 'dashboard';
8421 vm.timeOptions = {};
8422 var allowed = ['1h', '4h', '12h', '24h', '1w', '2w', '1M'];
8423 _.each(allowed, function (key) {
8424 if (allowed.indexOf(key) !== -1) {
8425 vm.timeOptions[key] = AeConfig.timeOptions[key];
8426 }
8427 });
8428 vm.stateHolder = stateHolder;
8429 vm.urls = AeConfig.urls;
8430 vm.applications = stateHolder.AeUser.applications_map;
8431 vm.show_dashboard = false;
8432 vm.resource = null;
8433 vm.graphType = {selected: null};
8434 vm.timeSpan = vm.timeOptions['1h'];
8435 vm.trendingReports = [];
8436 vm.exceptions = 0;
8437 vm.satisfyingRequests = 0;
8438 vm.toleratedRequests = 0;
8439 vm.frustratingRequests = 0;
8440 vm.uptimeStats = 0;
8441 vm.apdexStats = [];
8442 vm.seriesRequestsData = [];
8443 vm.seriesMetricsData = [];
8444 vm.seriesSlowData = [];
8445 vm.slowCalls = [];
8446 vm.slowURIS = [];
8447
8448 vm.reportChartConfig = {
8449 data: {
8450 json: [],
8451 xFormat: '%Y-%m-%dT%H:%M:%S'
8452 },
8453 color: {
8454 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8455 },
8456 axis: {
8457 x: {
8458 type: 'timeseries',
8459 tick: {
8460 culling: {
8461 max: 6 // the number of tick texts will be adjusted to less than this value
8462 },
8463 format: '%Y-%m-%d %H:%M'
8464 }
8465 },
8466 y: {
8467 tick: {
8468 count: 5,
8469 format: d3.format('.2s')
8470 }
8394 8471 }
8395 8472 },
8396 y: {
8397 tick: {
8398 count: 5,
8399 format: d3.format('.2s')
8473 subchart: {
8474 show: true,
8475 size: {
8476 height: 20
8400 8477 }
8401 }
8402 },
8403 subchart: {
8404 show: true,
8478 },
8405 8479 size: {
8406 height: 20
8407 }
8408 },
8409 size: {
8410 height: 250
8411 },
8412 zoom: {
8413 rescale: true
8414 },
8415 grid: {
8416 x: {
8417 show: true
8480 height: 250
8418 8481 },
8419 y: {
8420 show: true
8421 }
8422 },
8423 tooltip: {
8424 format: {
8425 title: function (d) {
8426 return '' + d;
8482 zoom: {
8483 rescale: true
8484 },
8485 grid: {
8486 x: {
8487 show: true
8427 8488 },
8428 value: function (v) {
8429 return v
8489 y: {
8490 show: true
8491 }
8492 },
8493 tooltip: {
8494 format: {
8495 title: function (d) {
8496 return '' + d;
8497 },
8498 value: function (v) {
8499 return v
8500 }
8430 8501 }
8431 8502 }
8432 }
8433 };
8434 vm.reportChartData = {};
8503 };
8504 vm.reportChartData = {};
8435 8505
8436 vm.reportSlowChartConfig = {
8437 data: {
8438 json: [],
8439 xFormat: '%Y-%m-%dT%H:%M:%S'
8440 },
8441 color: {
8442 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8443 },
8444 axis: {
8445 x: {
8446 type: 'timeseries',
8447 tick: {
8448 culling: {
8449 max: 6 // the number of tick texts will be adjusted to less than this value
8450 },
8451 format: '%Y-%m-%d %H:%M'
8506 vm.reportSlowChartConfig = {
8507 data: {
8508 json: [],
8509 xFormat: '%Y-%m-%dT%H:%M:%S'
8510 },
8511 color: {
8512 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
8513 },
8514 axis: {
8515 x: {
8516 type: 'timeseries',
8517 tick: {
8518 culling: {
8519 max: 6 // the number of tick texts will be adjusted to less than this value
8520 },
8521 format: '%Y-%m-%d %H:%M'
8522 }
8523 },
8524 y: {
8525 tick: {
8526 count: 5,
8527 format: d3.format('.2s')
8528 }
8452 8529 }
8453 8530 },
8454 y: {
8455 tick: {
8456 count: 5,
8457 format: d3.format('.2s')
8531 subchart: {
8532 show: true,
8533 size: {
8534 height: 20
8458 8535 }
8459 }
8460 },
8461 subchart: {
8462 show: true,
8536 },
8463 8537 size: {
8464 height: 20
8465 }
8466 },
8467 size: {
8468 height: 250
8469 },
8470 zoom: {
8471 rescale: true
8472 },
8473 grid: {
8474 x: {
8475 show: true
8538 height: 250
8476 8539 },
8477 y: {
8478 show: true
8479 }
8480 },
8481 tooltip: {
8482 format: {
8483 title: function (d) {
8484 return '' + d;
8540 zoom: {
8541 rescale: true
8542 },
8543 grid: {
8544 x: {
8545 show: true
8485 8546 },
8486 value: function (v) {
8487 return v
8547 y: {
8548 show: true
8488 8549 }
8489 }
8490 }
8491 };
8492 vm.reportSlowChartData = {};
8550 },
8551 tooltip: {
8552 format: {
8553 title: function (d) {
8554 return '' + d;
8555 },
8556 value: function (v) {
8557 return v
8558 }
8559 }
8560 }
8561 };
8562 vm.reportSlowChartData = {};
8493 8563
8494 vm.metricsChartConfig = {
8495 data: {
8496 json: [],
8497 xFormat: '%Y-%m-%dT%H:%M:%S',
8498 keys: {
8499 x: 'x',
8500 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
8564 vm.metricsChartConfig = {
8565 data: {
8566 json: [],
8567 xFormat: '%Y-%m-%dT%H:%M:%S',
8568 keys: {
8569 x: 'x',
8570 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
8571 },
8572 names: {
8573 main: 'View/Application logic',
8574 sql: 'Relational database queries',
8575 nosql: 'NoSql datastore calls',
8576 tmpl: 'Template rendering',
8577 custom: 'Custom timed calls',
8578 remote: 'Requests to remote resources'
8579 },
8580 type: 'area',
8581 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
8582 order: null
8501 8583 },
8502 names: {
8503 main: 'View/Application logic',
8504 sql: 'Relational database queries',
8505 nosql: 'NoSql datastore calls',
8506 tmpl: 'Template rendering',
8507 custom: 'Custom timed calls',
8508 remote: 'Requests to remote resources'
8584 color: {
8585 pattern: ['#6baed6', '#c7e9c0', '#fd8d3c', '#d6616b', '#ffcc00', '#c6dbef']
8509 8586 },
8510 type: 'area',
8511 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
8512 order: null
8513 },
8514 color: {
8515 pattern: ['#6baed6', '#c7e9c0', '#fd8d3c', '#d6616b', '#ffcc00', '#c6dbef']
8516 },
8517 axis: {
8518 x: {
8519 type: 'timeseries',
8520 tick: {
8521 culling: {
8522 max: 6 // the number of tick texts will be adjusted to less than this value
8523 },
8524 format: '%Y-%m-%d %H:%M'
8587 axis: {
8588 x: {
8589 type: 'timeseries',
8590 tick: {
8591 culling: {
8592 max: 6 // the number of tick texts will be adjusted to less than this value
8593 },
8594 format: '%Y-%m-%d %H:%M'
8595 }
8596 },
8597 y: {
8598 tick: {
8599 count: 5,
8600 format: d3.format('.2f')
8601 }
8525 8602 }
8526 8603 },
8527 y: {
8528 tick: {
8529 count: 5,
8530 format: d3.format('.2f')
8604 point: {
8605 show: false
8606 },
8607 subchart: {
8608 show: true,
8609 size: {
8610 height: 20
8531 8611 }
8532 }
8533 },
8534 point: {
8535 show: false
8536 },
8537 subchart: {
8538 show: true,
8612 },
8539 8613 size: {
8540 height: 20
8541 }
8542 },
8543 size: {
8544 height: 350
8545 },
8546 zoom: {
8547 rescale: true
8548 },
8549 grid: {
8550 x: {
8551 show: true
8614 height: 350
8552 8615 },
8553 y: {
8554 show: true
8555 }
8556 },
8557 tooltip: {
8558 format: {
8559 title: function (d) {
8560 return '' + d;
8616 zoom: {
8617 rescale: true
8618 },
8619 grid: {
8620 x: {
8621 show: true
8561 8622 },
8562 value: function (v) {
8563 return v
8623 y: {
8624 show: true
8625 }
8626 },
8627 tooltip: {
8628 format: {
8629 title: function (d) {
8630 return '' + d;
8631 },
8632 value: function (v) {
8633 return v
8634 }
8564 8635 }
8565 8636 }
8566 }
8567 };
8568 vm.metricsChartData = {};
8637 };
8638 vm.metricsChartData = {};
8569 8639
8570 vm.responseChartConfig = {
8571 data: {
8572 json: [],
8573 xFormat: '%Y-%m-%dT%H:%M:%S'
8574 },
8575 color: {
8576 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8577 },
8578 axis: {
8579 x: {
8580 type: 'timeseries',
8581 tick: {
8582 culling: {
8583 max: 6 // the number of tick texts will be adjusted to less than this value
8584 },
8585 format: '%Y-%m-%d %H:%M'
8640 vm.responseChartConfig = {
8641 data: {
8642 json: [],
8643 xFormat: '%Y-%m-%dT%H:%M:%S'
8644 },
8645 color: {
8646 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8647 },
8648 axis: {
8649 x: {
8650 type: 'timeseries',
8651 tick: {
8652 culling: {
8653 max: 6 // the number of tick texts will be adjusted to less than this value
8654 },
8655 format: '%Y-%m-%d %H:%M'
8656 }
8657 },
8658 y: {
8659 tick: {
8660 count: 5,
8661 format: d3.format('.2f')
8662 }
8586 8663 }
8587 8664 },
8588 y: {
8589 tick: {
8590 count: 5,
8591 format: d3.format('.2f')
8665 point: {
8666 show: false
8667 },
8668 subchart: {
8669 show: true,
8670 size: {
8671 height: 20
8592 8672 }
8593 }
8594 },
8595 point: {
8596 show: false
8597 },
8598 subchart: {
8599 show: true,
8673 },
8600 8674 size: {
8601 height: 20
8602 }
8603 },
8604 size: {
8605 height: 350
8606 },
8607 zoom: {
8608 rescale: true
8609 },
8610 grid: {
8611 x: {
8612 show: true
8675 height: 350
8613 8676 },
8614 y: {
8615 show: true
8616 }
8617 },
8618 tooltip: {
8619 format: {
8620 title: function (d) {
8621 return '' + d;
8677 zoom: {
8678 rescale: true
8679 },
8680 grid: {
8681 x: {
8682 show: true
8622 8683 },
8623 value: function (v) {
8624 return v
8684 y: {
8685 show: true
8686 }
8687 },
8688 tooltip: {
8689 format: {
8690 title: function (d) {
8691 return '' + d;
8692 },
8693 value: function (v) {
8694 return v
8695 }
8625 8696 }
8626 8697 }
8627 }
8628 };
8629 vm.responseChartData = {};
8698 };
8699 vm.responseChartData = {};
8630 8700
8631 vm.requestsChartConfig = {
8632 data: {
8633 json: [],
8634 xFormat: '%Y-%m-%dT%H:%M:%S'
8635 },
8636 color: {
8637 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8638 },
8639 axis: {
8640 x: {
8641 type: 'timeseries',
8642 tick: {
8643 culling: {
8644 max: 6 // the number of tick texts will be adjusted to less than this value
8645 },
8646 format: '%Y-%m-%d %H:%M'
8701 vm.requestsChartConfig = {
8702 data: {
8703 json: [],
8704 xFormat: '%Y-%m-%dT%H:%M:%S'
8705 },
8706 color: {
8707 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
8708 },
8709 axis: {
8710 x: {
8711 type: 'timeseries',
8712 tick: {
8713 culling: {
8714 max: 6 // the number of tick texts will be adjusted to less than this value
8715 },
8716 format: '%Y-%m-%d %H:%M'
8717 }
8718 },
8719 y: {
8720 tick: {
8721 count: 5,
8722 format: d3.format('.2f')
8723 }
8647 8724 }
8648 8725 },
8649 y: {
8650 tick: {
8651 count: 5,
8652 format: d3.format('.2f')
8726 point: {
8727 show: false
8728 },
8729 subchart: {
8730 show: true,
8731 size: {
8732 height: 20
8653 8733 }
8654 }
8655 },
8656 point: {
8657 show: false
8658 },
8659 subchart: {
8660 show: true,
8734 },
8661 8735 size: {
8662 height: 20
8663 }
8664 },
8665 size: {
8666 height: 350
8667 },
8668 zoom: {
8669 rescale: true
8670 },
8671 grid: {
8672 x: {
8673 show: true
8736 height: 350
8674 8737 },
8675 y: {
8676 show: true
8677 }
8678 },
8679 tooltip: {
8680 format: {
8681 title: function (d) {
8682 return '' + d;
8738 zoom: {
8739 rescale: true
8740 },
8741 grid: {
8742 x: {
8743 show: true
8683 8744 },
8684 value: function (v) {
8685 return v
8745 y: {
8746 show: true
8747 }
8748 },
8749 tooltip: {
8750 format: {
8751 title: function (d) {
8752 return '' + d;
8753 },
8754 value: function (v) {
8755 return v
8756 }
8686 8757 }
8687 8758 }
8688 }
8689 };
8690 vm.requestsChartData = {};
8759 };
8760 vm.requestsChartData = {};
8761
8762 vm.loading = {
8763 'apdex': true,
8764 'reports': true,
8765 'graphs': true,
8766 'slowCalls': true,
8767 'slowURIS': true,
8768 'requestsBreakdown': true,
8769 'series': true
8770 };
8771 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
8691 8772
8692 vm.loading = {
8693 'apdex': true,
8694 'reports': true,
8695 'graphs': true,
8696 'slowCalls': true,
8697 'slowURIS': true,
8698 'requestsBreakdown': true,
8699 'series': true
8700 };
8701 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
8773 vm.intervalId = $interval(function () {
8774 if (_.contains(['30m', "1h"], vm.timeSpan.key)) {
8775 // don't do anything if window is unfocused
8776 if(document.hidden === true){
8777 return ;
8778 }
8779 vm.refreshData();
8780 }
8781 }, 60000);
8702 8782
8783 if (stateHolder.AeUser.applications.length){
8784 vm.show_dashboard = true;
8785 vm.determineStartState();
8786 }
8787
8788 }
8703 8789 $rootScope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
8704 8790 var ws_report = message.message.report;
8705 8791 if (ws_report.http_status != 500) {
8706 8792 return
8707 8793 }
8708 8794 if (vm.stream.paused == true) {
8709 8795 return
8710 8796 }
8711 8797 if (vm.stream.filtered && ws_report.resource_id != vm.resource) {
8712 8798 return
8713 8799 }
8714 8800 var should_insert = true;
8715 8801 _.each(vm.stream.reports, function (report) {
8716 8802 if (report.report_id == ws_report.report_id) {
8717 8803 report.occurences = ws_report.occurences;
8718 8804 should_insert = false;
8719 8805 }
8720 8806 });
8721 8807 if (should_insert) {
8722 8808 if (vm.stream.reports.length > 7) {
8723 8809 vm.stream.reports.pop();
8724 8810 }
8725 8811 vm.stream.reports.unshift(ws_report);
8726 8812 }
8727 8813 });
8728 8814
8729 8815 vm.determineStartState = function () {
8730 8816 if (stateHolder.AeUser.applications.length) {
8731 8817 vm.resource = Number($location.search().resource);
8732 8818
8733 8819 if (!vm.resource){
8734 8820 var cookieResource = $cookies.getObject('resource');
8735 8821
8736 8822
8737 8823 if (cookieResource) {
8738 8824 vm.resource = cookieResource;
8739 8825 }
8740 8826 else{
8741 8827 vm.resource = stateHolder.AeUser.applications[0].resource_id;
8742 8828 }
8743 8829 }
8744 8830 }
8745 8831
8746 8832 var timespan = $location.search().timespan;
8747 8833
8748 8834 if(_.has(vm.timeOptions, timespan)){
8749 8835 vm.timeSpan = vm.timeOptions[timespan];
8750 8836 }
8751 8837 else{
8752 8838 vm.timeSpan = vm.timeOptions['1h'];
8753 8839 }
8754 8840
8755 8841 var graphType = $location.search().graphtype;
8756 8842 if(!graphType){
8757 8843 vm.graphType = {selected: 'metrics_graphs'};
8758 8844 }
8759 8845 else{
8760 8846 vm.graphType = {selected: graphType};
8761 8847 }
8762 8848 vm.updateSearchParams();
8763 8849 };
8764 8850
8765 8851 vm.updateSearchParams = function () {
8766 8852 $location.search('resource', vm.resource);
8767 8853 $location.search('timespan', vm.timeSpan.key);
8768 8854 $location.search('graphtype', vm.graphType.selected);
8769 8855 stateHolder.resource = vm.resource;
8770 8856
8771 8857 if (vm.resource){
8772 8858 $cookies.putObject('resource', vm.resource,
8773 8859 {expires:new Date(3000, 1, 1)});
8774 8860 }
8775 8861 vm.refreshData();
8776 8862 };
8777 8863
8778 8864 vm.refreshData = function () {
8779 8865 vm.fetchApdexStats();
8780 8866 vm.fetchTrendingReports();
8781 8867 vm.fetchMetrics();
8782 8868 vm.fetchRequestsBreakdown();
8783 8869 vm.fetchSlowCalls();
8784 8870 };
8785 8871
8786 8872 vm.changedTimeSpan = function(){
8787 8873 vm.startDateFilter = timeSpanToStartDate(vm.timeSpan.key);
8788 8874 vm.refreshData();
8789 8875 };
8790 8876
8791 vm.intervalId = $interval(function () {
8792 if (_.contains(['30m', "1h"], vm.timeSpan.key)) {
8793 // don't do anything if window is unfocused
8794 if(document.hidden === true){
8795 return ;
8796 }
8797 vm.refreshData();
8798 }
8799 }, 60000);
8800
8801 8877 vm.fetchApdexStats = function () {
8802 8878 vm.loading.apdex = true;
8803 8879 vm.apdexStats = applicationsPropertyResource.query({
8804 8880 'key': 'apdex_stats',
8805 8881 'resourceId': vm.resource,
8806 8882 "start_date": timeSpanToStartDate(vm.timeSpan.key)
8807 8883 },
8808 8884 function (data) {
8809 8885 vm.loading.apdex = false;
8810 8886
8811 8887 vm.exceptions = _.reduce(data, function (memo, row) {
8812 8888 return memo + row.errors;
8813 8889 }, 0);
8814 8890 vm.satisfyingRequests = _.reduce(data, function (memo, row) {
8815 8891 return memo + row.satisfying_requests;
8816 8892 }, 0);
8817 8893 vm.toleratedRequests = _.reduce(data, function (memo, row) {
8818 8894 return memo + row.tolerated_requests;
8819 8895 }, 0);
8820 8896 vm.frustratingRequests = _.reduce(data, function (memo, row) {
8821 8897 return memo + row.frustrating_requests;
8822 8898 }, 0);
8823 8899 if (data.length) {
8824 8900 vm.uptimeStats = data[0].uptime;
8825 8901 }
8826 8902
8827 8903 },
8828 8904 function () {
8829 8905 vm.loading.apdex = false;
8830 8906 }
8831 8907 );
8832 8908 }
8833 8909
8834 8910 vm.fetchMetrics = function () {
8835 8911 vm.loading.series = true;
8836 8912 applicationsPropertyResource.query({
8837 8913 'resourceId': vm.resource,
8838 8914 'key': vm.graphType.selected,
8839 8915 "start_date": timeSpanToStartDate(vm.timeSpan.key)
8840 8916 }, function (data) {
8841 8917 if (vm.graphType.selected == 'metrics_graphs') {
8842 8918 vm.metricsChartData = {
8843 8919 json: data,
8844 8920 xFormat: '%Y-%m-%dT%H:%M:%S',
8845 8921 keys: {
8846 8922 x: 'x',
8847 8923 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
8848 8924 },
8849 8925 names: {
8850 8926 main: 'View/Application logic',
8851 8927 sql: 'Relational database queries',
8852 8928 nosql: 'NoSql datastore calls',
8853 8929 tmpl: 'Template rendering',
8854 8930 custom: 'Custom timed calls',
8855 8931 remote: 'Requests to remote resources'
8856 8932 },
8857 8933 type: 'area',
8858 8934 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
8859 8935 order: null
8860 8936 };
8861 8937 }
8862 8938 else if (vm.graphType.selected == 'report_graphs') {
8863 8939 vm.reportChartData = {
8864 8940 json: data,
8865 8941 xFormat: '%Y-%m-%dT%H:%M:%S',
8866 8942 keys: {
8867 8943 x: 'x',
8868 8944 value: ["not_found", "report"]
8869 8945 },
8870 8946 names: {
8871 8947 report: 'Errors',
8872 8948 not_found: '404\'s requests'
8873 8949 },
8874 8950 type: 'bar'
8875 8951 };
8876 8952 }
8877 8953 else if (vm.graphType.selected == 'slow_report_graphs') {
8878 8954 vm.reportSlowChartData = {
8879 8955 json: data,
8880 8956 xFormat: '%Y-%m-%dT%H:%M:%S',
8881 8957 keys: {
8882 8958 x: 'x',
8883 8959 value: ["slow_report"]
8884 8960 },
8885 8961 names: {
8886 8962 slow_report: 'Slow reports'
8887 8963 },
8888 8964 type: 'bar'
8889 8965 };
8890 8966 }
8891 8967 else if (vm.graphType.selected == 'response_graphs') {
8892 8968 vm.responseChartData = {
8893 8969 json: data,
8894 8970 xFormat: '%Y-%m-%dT%H:%M:%S',
8895 8971 keys: {
8896 8972 x: 'x',
8897 8973 value: ["today", "days_ago_2", "days_ago_7"]
8898 8974 },
8899 8975 names: {
8900 8976 today: 'Today',
8901 8977 "days_ago_2": '2 days ago',
8902 8978 "days_ago_7": '7 days ago'
8903 8979 }
8904 8980 };
8905 8981 }
8906 8982 else if (vm.graphType.selected == 'requests_graphs') {
8907 8983 vm.requestsChartData = {
8908 8984 json: data,
8909 8985 xFormat: '%Y-%m-%dT%H:%M:%S',
8910 8986 keys: {
8911 8987 x: 'x',
8912 8988 value: ["requests"]
8913 8989 },
8914 8990 names: {
8915 8991 requests: 'Requests/s'
8916 8992 }
8917 8993 };
8918 8994 }
8919 8995 vm.loading.series = false;
8920 8996 }, function(){
8921 8997 vm.loading.series = false;
8922 8998 });
8923 8999 }
8924 9000
8925 9001 vm.fetchSlowCalls = function () {
8926 9002 vm.loading.slowCalls = true;
8927 9003 applicationsPropertyResource.query({
8928 9004 'resourceId': vm.resource,
8929 9005 "start_date": timeSpanToStartDate(vm.timeSpan.key),
8930 9006 'key': 'slow_calls'
8931 9007 }, function (data) {
8932 9008 vm.slowCalls = data;
8933 9009 vm.loading.slowCalls = false;
8934 9010 }, function () {
8935 9011 vm.loading.slowCalls = false;
8936 9012 });
8937 9013 }
8938 9014
8939 9015 vm.fetchRequestsBreakdown = function () {
8940 9016 vm.loading.requestsBreakdown = true;
8941 9017 applicationsPropertyResource.query({
8942 9018 'resourceId': vm.resource,
8943 9019 "start_date": timeSpanToStartDate(vm.timeSpan.key),
8944 9020 'key': 'requests_breakdown'
8945 9021 }, function (data) {
8946 9022 vm.requestsBreakdown = data;
8947 9023 vm.loading.requestsBreakdown = false;
8948 9024 }, function () {
8949 9025 vm.loading.requestsBreakdown = false;
8950 9026 });
8951 9027 }
8952 9028
8953 9029 vm.fetchTrendingReports = function () {
8954 9030
8955 9031 if (vm.graphType.selected == 'slow_report_graphs') {
8956 9032 var report_type = 'slow';
8957 9033 }
8958 9034 else {
8959 9035 var report_type = 'error';
8960 9036 }
8961 9037
8962 9038 vm.loading.reports = true;
8963 9039 vm.trendingReports = applicationsPropertyResource.query({
8964 9040 'key': 'trending_reports',
8965 9041 'resourceId': vm.resource,
8966 9042 "start_date": timeSpanToStartDate(vm.timeSpan.key),
8967 9043 "report_type": report_type
8968 9044 },
8969 9045 function () {
8970 9046 vm.loading.reports = false;
8971 9047 },
8972 9048 function () {
8973 9049 vm.loading.reports = false;
8974 9050 }
8975 9051 );
8976 9052 };
8977 9053
8978 9054 $scope.$on('$destroy',function(){
8979 9055 $interval.cancel(vm.intervalId);
8980 9056 });
8981
8982 if (stateHolder.AeUser.applications.length){
8983 vm.show_dashboard = true;
8984 vm.determineStartState();
8985 }
8986 9057 }
8987 9058
8988 9059 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
8989 9060 //
8990 9061 // Licensed under the Apache License, Version 2.0 (the "License");
8991 9062 // you may not use this file except in compliance with the License.
8992 9063 // You may obtain a copy of the License at
8993 9064 //
8994 9065 // http://www.apache.org/licenses/LICENSE-2.0
8995 9066 //
8996 9067 // Unless required by applicable law or agreed to in writing, software
8997 9068 // distributed under the License is distributed on an "AS IS" BASIS,
8998 9069 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8999 9070 // See the License for the specific language governing permissions and
9000 9071 // limitations under the License.
9001 9072
9002 9073
9003 9074 ApplicationsIntegrationsEditViewController.$inject = ['$state', 'integrationResource'];
9004 9075
9005 9076 function ApplicationsIntegrationsEditViewController($state, integrationResource) {
9006 9077
9007 9078 var vm = this;
9008 vm.$state = $state;
9009 vm.loading = {integration: true};
9010 vm.config = integrationResource.get(
9011 {
9012 integration: $state.params.integration,
9013 action: 'setup',
9014 resourceId: $state.params.resourceId
9015 }, function (data) {
9016 vm.loading.integration = false;
9017 });
9018
9079 vm.$onInit = function () {
9080 vm.$state = $state;
9081 vm.loading = {integration: true};
9082 vm.config = integrationResource.get(
9083 {
9084 integration: $state.params.integration,
9085 action: 'setup',
9086 resourceId: $state.params.resourceId
9087 }, function (data) {
9088 vm.loading.integration = false;
9089 });
9090 }
9019 9091 vm.configureIntegration = function () {
9020 9092 console.info('configureIntegration');
9021 9093 vm.loading.integration = true;
9022 9094 integrationResource.save(
9023 9095 {
9024 9096 integration: $state.params.integration,
9025 9097 action: 'setup',
9026 9098 resourceId: $state.params.resourceId
9027 9099 }, vm.config, function (data) {
9028 9100 vm.loading.integration = false;
9029 9101 setServerValidation(vm.integrationForm);
9030 9102 }, function (response) {
9031 9103 if (response.status == 422) {
9032 9104 setServerValidation(vm.integrationForm, response.data);
9033 9105 }
9034 9106 vm.loading.integration = false;
9035 9107 });
9036 9108 };
9037 9109
9038 9110 vm.removeIntegration = function () {
9039 9111 console.info('removeIntegration');
9040 9112 integrationResource.remove({
9041 9113 integration: $state.params.integration,
9042 9114 resourceId: $state.params.resourceId,
9043 9115 action: 'delete'
9044 9116 },
9045 9117 function () {
9046 9118 $state.go('applications.integrations',
9047 9119 {resourceId: $state.params.resourceId});
9048 9120 }
9049 9121 );
9050 9122 }
9051 9123
9052 9124 vm.testIntegration = function (to_test) {
9053 9125 console.info('testIntegration', to_test);
9054 9126 vm.loading.integration = true;
9055 9127 integrationResource.save(
9056 9128 {
9057 9129 integration: $state.params.integration,
9058 9130 action: 'test_' + to_test,
9059 9131 resourceId: $state.params.resourceId
9060 9132 }, vm.config, function (data) {
9061 9133 vm.loading.integration = false;
9062 9134 }, function (response) {
9063 9135 vm.loading.integration = false;
9064 9136 });
9065 9137 }
9066 9138
9067 9139
9068 9140 }
9069 9141
9070 9142 ;angular.module('appenlight.components.bitbucketIntegrationConfigView', [])
9071 9143 .component('bitbucketIntegrationConfigView', {
9072 9144 templateUrl: 'components/views/integrations/bitbucket-integration-config-view/bitbucket-integration-config-view.html',
9073 9145 controller: ApplicationsIntegrationsEditViewController
9074 9146 });
9075 9147
9076 9148 ;angular.module('appenlight.components.campfireIntegrationConfigView', [])
9077 9149 .component('campfireIntegrationConfigView', {
9078 9150 templateUrl: 'components/views/integrations/campfire-integration-config-view/campfire-integration-config-view.html',
9079 9151 controller: ApplicationsIntegrationsEditViewController
9080 9152 });
9081 9153
9082 9154 ;angular.module('appenlight.components.flowdockIntegrationConfigView', [])
9083 9155 .component('flowdockIntegrationConfigView', {
9084 9156 templateUrl: 'components/views/integrations/flowdock-integration-config-view/flowdock-integration-config-view.html',
9085 9157 controller: ApplicationsIntegrationsEditViewController
9086 9158 });
9087 9159
9088 9160 ;angular.module('appenlight.components.githubIntegrationConfigView', [])
9089 9161 .component('githubIntegrationConfigView', {
9090 9162 templateUrl: 'components/views/integrations/github-integration-config-view/github-integration-config-view.html',
9091 9163 controller: ApplicationsIntegrationsEditViewController
9092 9164 });
9093 9165
9094 9166 ;angular.module('appenlight.components.hipchatIntegrationConfigView', [])
9095 9167 .component('hipchatIntegrationConfigView', {
9096 9168 templateUrl: 'components/views/integrations/hipchat-integration-config-view/hipchat-integration-config-view.html',
9097 9169 controller: ApplicationsIntegrationsEditViewController
9098 9170 });
9099 9171
9100 9172 ;angular.module('appenlight.components.jiraIntegrationConfigView', [])
9101 9173 .component('jiraIntegrationConfigView', {
9102 9174 templateUrl: 'components/views/integrations/jira-integration-config-view/jira-integration-config-view.html',
9103 9175 controller: ApplicationsIntegrationsEditViewController
9104 9176 });
9105 9177
9106 9178 ;angular.module('appenlight.components.slackIntegrationConfigView', [])
9107 9179 .component('slackIntegrationConfigView', {
9108 9180 templateUrl: 'components/views/integrations/slack-integration-config-view/slack-integration-config-view.html',
9109 9181 controller: ApplicationsIntegrationsEditViewController
9110 9182 });
9111 9183
9112 9184 ;angular.module('appenlight.components.webhooksIntegrationConfigView', [])
9113 9185 .component('webhooksIntegrationConfigView', {
9114 9186 templateUrl: 'components/views/integrations/webhooks-integration-config-view/webhooks-integration-config-view.html',
9115 9187 controller: ApplicationsIntegrationsEditViewController
9116 9188 });
9117 9189
9118 9190 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
9119 9191 //
9120 9192 // Licensed under the Apache License, Version 2.0 (the "License");
9121 9193 // you may not use this file except in compliance with the License.
9122 9194 // You may obtain a copy of the License at
9123 9195 //
9124 9196 // http://www.apache.org/licenses/LICENSE-2.0
9125 9197 //
9126 9198 // Unless required by applicable law or agreed to in writing, software
9127 9199 // distributed under the License is distributed on an "AS IS" BASIS,
9128 9200 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9129 9201 // See the License for the specific language governing permissions and
9130 9202 // limitations under the License.
9131 9203
9132 9204 angular.module('appenlight.components.logsBrowserView', [])
9133 9205 .component('logsBrowserView', {
9134 9206 templateUrl: 'components/views/logs-browser/logs-browser.html',
9135 9207 controller: LogsBrowserController
9136 9208 });
9137 9209
9138 9210 LogsBrowserController.$inject = ['$location', 'stateHolder', 'typeAheadTagHelper', 'logsNoIdResource', 'sectionViewResource'];
9139 9211
9140 9212 function LogsBrowserController($location, stateHolder, typeAheadTagHelper, logsNoIdResource, sectionViewResource) {
9141 9213 var vm = this;
9142 vm.logEventsChartConfig = {
9143 data: {
9144 json: [],
9145 xFormat: '%Y-%m-%dT%H:%M:%S'
9146 },
9147 color: {
9148 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9149 },
9150 axis: {
9151 x: {
9152 type: 'timeseries',
9153 tick: {
9154 format: '%Y-%m-%d'
9214 vm.$onInit = function () {
9215 vm.logEventsChartConfig = {
9216 data: {
9217 json: [],
9218 xFormat: '%Y-%m-%dT%H:%M:%S'
9219 },
9220 color: {
9221 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9222 },
9223 axis: {
9224 x: {
9225 type: 'timeseries',
9226 tick: {
9227 format: '%Y-%m-%d'
9228 }
9229 },
9230 y: {
9231 tick: {
9232 count: 5,
9233 format: d3.format('.2s')
9234 }
9155 9235 }
9156 9236 },
9157 y: {
9158 tick: {
9159 count: 5,
9160 format: d3.format('.2s')
9237 subchart: {
9238 show: true,
9239 size: {
9240 height: 20
9161 9241 }
9162 }
9163 },
9164 subchart: {
9165 show: true,
9242 },
9166 9243 size: {
9167 height: 20
9168 }
9169 },
9170 size: {
9171 height: 250
9172 },
9173 zoom: {
9174 rescale: true
9175 },
9176 grid: {
9177 x: {
9178 show: true
9244 height: 250
9179 9245 },
9180 y: {
9181 show: true
9182 }
9183 },
9184 tooltip: {
9185 format: {
9186 title: function (d) {
9187 return '' + d;
9246 zoom: {
9247 rescale: true
9248 },
9249 grid: {
9250 x: {
9251 show: true
9188 9252 },
9189 value: function (v) {
9190 return v
9253 y: {
9254 show: true
9255 }
9256 },
9257 tooltip: {
9258 format: {
9259 title: function (d) {
9260 return '' + d;
9261 },
9262 value: function (v) {
9263 return v
9264 }
9191 9265 }
9192 9266 }
9193 }
9194 };
9195 vm.logEventsChartData = {};
9196 stateHolder.section = 'logs';
9197 vm.today = function () {
9198 vm.pickerDate = new Date();
9199 };
9200 vm.today();
9201
9202 vm.applications = stateHolder.AeUser.applications_map;
9203 vm.logsPage = [];
9204 vm.itemCount = 0;
9205 vm.itemsPerPage = 250;
9206 vm.page = 1;
9207 vm.$location = $location;
9208 vm.isLoading = {
9209 logs: true,
9210 series: true
9211 };
9212 vm.filterTypeAheadOptions = [
9213 {
9214 type: 'message',
9215 text: 'message:',
9216 'description': 'Full-text search in your logs',
9217 tag: 'Message',
9218 example: 'message:text-im-looking-for'
9219 },
9220 {
9221 type: 'namespace',
9222 text: 'namespace:',
9223 'description': 'Query logs from specific namespace',
9224 tag: 'Namespace',
9225 example: "namespace:module.foo"
9226 },
9227 {
9228 type: 'resource',
9229 text: 'resource:',
9230 'description': 'Restrict resultset to application',
9231 tag: 'Application',
9232 example: "resource:ID"
9233 },
9234 {
9235 type: 'request_id',
9236 text: 'request_id:',
9237 'description': 'Show logs with specific request id',
9238 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9239 tag: 'Request ID'
9240 },
9241 {
9242 type: 'level',
9243 text: 'level:',
9244 'description': 'Show entries with specific log level',
9245 example: 'level:warning',
9246 tag: 'Level'
9247 },
9248 {
9249 type: 'server_name',
9250 text: 'server_name:',
9251 'description': 'Show entries tagged with this key/value pair',
9252 example: 'server_name:hostname',
9253 tag: 'Tag'
9254 },
9255 {
9256 type: 'start_date',
9257 text: 'start_date:',
9258 'description': 'Show results newer than this date (press TAB for dropdown)',
9259 example: 'start_date:2014-08-15T13:00',
9260 tag: 'Start Date'
9261 },
9262 {
9263 type: 'end_date',
9264 text: 'end_date:',
9265 'description': 'Show results older than this date (press TAB for dropdown)',
9266 example: 'start_date:2014-08-15T23:59',
9267 tag: 'End Date'
9268 },
9269 {type: 'level', value: 'debug', text: 'level:debug'},
9270 {type: 'level', value: 'info', text: 'level:info'},
9271 {type: 'level', value: 'warning', text: 'level:warning'},
9272 {type: 'level', value: 'critical', text: 'level:critical'}
9273 ];
9274 vm.filterTypeAhead = null;
9275 vm.showDatePicker = false;
9276 vm.manualOpen = false;
9277 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9267 };
9268 vm.logEventsChartData = {};
9269 stateHolder.section = 'logs';
9270 vm.today = function () {
9271 vm.pickerDate = new Date();
9272 };
9273 vm.today();
9274
9275 vm.applications = stateHolder.AeUser.applications_map;
9276 vm.logsPage = [];
9277 vm.itemCount = 0;
9278 vm.itemsPerPage = 250;
9279 vm.page = 1;
9280 vm.$location = $location;
9281 vm.isLoading = {
9282 logs: true,
9283 series: true
9284 };
9285 vm.filterTypeAheadOptions = [
9286 {
9287 type: 'message',
9288 text: 'message:',
9289 'description': 'Full-text search in your logs',
9290 tag: 'Message',
9291 example: 'message:text-im-looking-for'
9292 },
9293 {
9294 type: 'namespace',
9295 text: 'namespace:',
9296 'description': 'Query logs from specific namespace',
9297 tag: 'Namespace',
9298 example: "namespace:module.foo"
9299 },
9300 {
9301 type: 'resource',
9302 text: 'resource:',
9303 'description': 'Restrict resultset to application',
9304 tag: 'Application',
9305 example: "resource:ID"
9306 },
9307 {
9308 type: 'request_id',
9309 text: 'request_id:',
9310 'description': 'Show logs with specific request id',
9311 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9312 tag: 'Request ID'
9313 },
9314 {
9315 type: 'level',
9316 text: 'level:',
9317 'description': 'Show entries with specific log level',
9318 example: 'level:warning',
9319 tag: 'Level'
9320 },
9321 {
9322 type: 'server_name',
9323 text: 'server_name:',
9324 'description': 'Show entries tagged with this key/value pair',
9325 example: 'server_name:hostname',
9326 tag: 'Tag'
9327 },
9328 {
9329 type: 'start_date',
9330 text: 'start_date:',
9331 'description': 'Show results newer than this date (press TAB for dropdown)',
9332 example: 'start_date:2014-08-15T13:00',
9333 tag: 'Start Date'
9334 },
9335 {
9336 type: 'end_date',
9337 text: 'end_date:',
9338 'description': 'Show results older than this date (press TAB for dropdown)',
9339 example: 'start_date:2014-08-15T23:59',
9340 tag: 'End Date'
9341 },
9342 {type: 'level', value: 'debug', text: 'level:debug'},
9343 {type: 'level', value: 'info', text: 'level:info'},
9344 {type: 'level', value: 'warning', text: 'level:warning'},
9345 {type: 'level', value: 'critical', text: 'level:critical'}
9346 ];
9347 vm.filterTypeAhead = null;
9348 vm.showDatePicker = false;
9349 vm.manualOpen = false;
9350 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9351
9352 _.each(vm.applications, function (item) {
9353 vm.filterTypeAheadOptions.push({
9354 type: 'resource',
9355 text: 'resource:' + item.resource_id + ':' + item.resource_name,
9356 example: 'resource:' + item.resource_id,
9357 'tag': item.resource_name,
9358 'description': 'Restrict resultset to this application'
9359 });
9360 });
9361 console.info('page load');
9362 vm.refresh();
9363 }
9278 9364 vm.removeSearchTag = function (tag) {
9279 9365 $location.search(tag.type, null);
9280 9366 vm.refresh();
9281 9367 };
9282 9368 vm.addSearchTag = function (tag) {
9283 9369 $location.search(tag.type, tag.value);
9284 9370 vm.refresh();
9285 9371 };
9286 9372
9287 9373 vm.paginationChange = function(){
9288 9374 $location.search('page', vm.page);
9289 9375 vm.refresh();
9290 9376 };
9291 9377
9292
9293 _.each(vm.applications, function (item) {
9294 vm.filterTypeAheadOptions.push({
9295 type: 'resource',
9296 text: 'resource:' + item.resource_id + ':' + item.resource_name,
9297 example: 'resource:' + item.resource_id,
9298 'tag': item.resource_name,
9299 'description': 'Restrict resultset to this application'
9300 });
9301 });
9302
9303 9378 vm.typeAheadTag = function (event) {
9304 9379 var text = vm.filterTypeAhead;
9305 9380 if (_.isObject(vm.filterTypeAhead)) {
9306 9381 text = vm.filterTypeAhead.text;
9307 9382 };
9308 9383 if (!vm.filterTypeAhead) {
9309 9384 return
9310 9385 }
9311 9386 var parsed = text.split(':');
9312 9387 var tag = {'type': null, 'value': null};
9313 9388 // app tags have : twice
9314 9389 if (parsed.length > 2 && parsed[0] == 'resource') {
9315 9390 tag.type = 'resource';
9316 9391 tag.value = parsed[1];
9317 9392 }
9318 9393 // normal tag:value
9319 9394 else if (parsed.length > 1) {
9320 9395 tag.type = parsed[0];
9321 9396 tag.value = parsed.slice(1).join(':');
9322 9397 }
9323 9398 else {
9324 9399 tag.type = 'message';
9325 9400 tag.value = parsed.join(':');
9326 9401 }
9327 9402
9328 9403 // set datepicker hour based on type of field
9329 9404 if ('start_date:' == text) {
9330 9405 vm.showDatePicker = true;
9331 9406 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
9332 9407 }
9333 9408 else if ('end_date:' == text) {
9334 9409 vm.showDatePicker = true;
9335 9410 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
9336 9411 }
9337 9412
9338 9413 if (event.keyCode != 13 || !tag.type || !tag.value) {
9339 9414 return
9340 9415 }
9341 9416 vm.showDatePicker = false;
9342 9417 // aka we selected one of main options
9343 9418 vm.addSearchTag({type: tag.type, value: tag.value});
9344 9419 // clear typeahead
9345 9420 vm.filterTypeAhead = undefined;
9346 9421 };
9347 9422
9348 9423
9349 9424 vm.pickerDateChanged = function(){
9350 9425 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
9351 9426 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
9352 9427 }
9353 9428 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
9354 9429 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
9355 9430 }
9356 9431 vm.showDatePicker = false;
9357 9432 };
9358 9433
9359 9434 vm.fetchLogs = function (searchParams) {
9360 9435 vm.isLoading.logs = true;
9361 9436 logsNoIdResource.query(searchParams, function (data, getResponseHeaders) {
9362 9437 vm.isLoading.logs = false;
9363 9438 var headers = getResponseHeaders();
9364 9439 vm.logsPage = data;
9365 9440 vm.itemCount = headers['x-total-count'];
9366 9441 vm.itemsPerPage = headers['x-items-per-page'];
9367 9442 }, function () {
9368 9443 vm.isLoading.logs = false;
9369 9444 });
9370 9445 };
9371 9446
9372 9447 vm.fetchSeriesData = function (searchParams) {
9373 9448 searchParams['section'] = 'logs_section';
9374 9449 searchParams['view'] = 'fetch_series';
9375 9450 vm.isLoading.series = true;
9376 9451 sectionViewResource.query(searchParams, function (data) {
9377 9452
9378 9453 vm.logEventsChartData = {
9379 9454 json: data,
9380 9455 xFormat: '%Y-%m-%dT%H:%M:%S',
9381 9456 keys: {
9382 9457 x: 'x',
9383 9458 value: ["logs"]
9384 9459 },
9385 9460 names: {
9386 9461 logs: 'Log events'
9387 9462 },
9388 9463 type: 'bar'
9389 9464 };
9390 9465 vm.isLoading.series = false;
9391 9466 }, function () {
9392 9467 vm.isLoading.series = false;
9393 9468 });
9394 9469 };
9395 9470
9396 9471 vm.filterId = function (log) {
9397 9472 $location.search('request_id', log.request_id);
9398 9473 vm.refresh();
9399 9474 };
9400 9475
9401 9476 vm.refresh = function(){
9402 9477 vm.searchParams = parseSearchToTags($location.search());
9403 9478 vm.page = Number(vm.searchParams.page) || 1;
9404 9479 var params = parseTagsToSearch(vm.searchParams);
9405 9480 vm.fetchLogs(params);
9406 9481 vm.fetchSeriesData(params);
9407 9482 };
9408 console.info('page load');
9409 vm.refresh();
9483
9410 9484 }
9411 9485
9412 9486 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
9413 9487 //
9414 9488 // Licensed under the Apache License, Version 2.0 (the "License");
9415 9489 // you may not use this file except in compliance with the License.
9416 9490 // You may obtain a copy of the License at
9417 9491 //
9418 9492 // http://www.apache.org/licenses/LICENSE-2.0
9419 9493 //
9420 9494 // Unless required by applicable law or agreed to in writing, software
9421 9495 // distributed under the License is distributed on an "AS IS" BASIS,
9422 9496 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9423 9497 // See the License for the specific language governing permissions and
9424 9498 // limitations under the License.
9425 9499
9426 9500 angular.module('appenlight.components.reportView', [])
9427 9501 .component('reportView', {
9428 9502 templateUrl: 'components/views/report-view/report-view.html',
9429 9503 controller: ReportViewController
9430 9504 });
9431 9505
9432 9506 ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal',
9433 9507 '$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
9434 9508 'logsNoIdResource', 'stateHolder'];
9435 9509
9436 9510 function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
9437 9511 var vm = this;
9438 vm.window = $window;
9439 vm.stateHolder = stateHolder;
9440 vm.$state = $state;
9441 vm.reportHistoryConfig = {
9442 data: {
9443 json: [],
9444 xFormat: '%Y-%m-%dT%H:%M:%S'
9445 },
9446 color: {
9447 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9448 },
9449 axis: {
9450 x: {
9451 type: 'timeseries',
9452 tick: {
9453 format: '%Y-%m-%d'
9512 vm.$onInit = function () {
9513 vm.window = $window;
9514 vm.stateHolder = stateHolder;
9515 vm.$state = $state;
9516 vm.reportHistoryConfig = {
9517 data: {
9518 json: [],
9519 xFormat: '%Y-%m-%dT%H:%M:%S'
9520 },
9521 color: {
9522 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
9523 },
9524 axis: {
9525 x: {
9526 type: 'timeseries',
9527 tick: {
9528 format: '%Y-%m-%d'
9529 }
9530 },
9531 y: {
9532 tick: {
9533 count: 5,
9534 format: d3.format('.2s')
9535 }
9454 9536 }
9455 9537 },
9456 y: {
9457 tick: {
9458 count: 5,
9459 format: d3.format('.2s')
9538 subchart: {
9539 show: true,
9540 size: {
9541 height: 20
9460 9542 }
9461 }
9462 },
9463 subchart: {
9464 show: true,
9543 },
9465 9544 size: {
9466 height: 20
9467 }
9468 },
9469 size: {
9470 height: 250
9471 },
9472 zoom: {
9473 rescale: true
9474 },
9475 grid: {
9476 x: {
9477 show: true
9545 height: 250
9478 9546 },
9479 y: {
9480 show: true
9481 }
9482 },
9483 tooltip: {
9484 format: {
9485 title: function (d) {
9486 return '' + d;
9547 zoom: {
9548 rescale: true
9549 },
9550 grid: {
9551 x: {
9552 show: true
9487 9553 },
9488 value: function (v) {
9489 return v
9554 y: {
9555 show: true
9556 }
9557 },
9558 tooltip: {
9559 format: {
9560 title: function (d) {
9561 return '' + d;
9562 },
9563 value: function (v) {
9564 return v
9565 }
9490 9566 }
9491 9567 }
9568 };
9569 vm.mentionedPeople = [];
9570 vm.reportHistoryData = {};
9571 vm.textTraceback = true;
9572 vm.rawTraceback = '';
9573 vm.traceback = '';
9574 vm.reportType = 'report';
9575 vm.report = null;
9576 vm.showLong = false;
9577 vm.reportLogs = null;
9578 vm.requestStats = null;
9579 vm.comment = null;
9580 vm.is_loading = {
9581 report: true,
9582 logs: true,
9583 history: true
9584 };
9585
9586 vm.tabs = {
9587 slow_calls:false,
9588 request_details:false,
9589 logs:false,
9590 comments:false,
9591 affected_users:false
9592 };
9593 if ($cookies.selectedReportTab) {
9594 vm.tabs[$cookies.selectedReportTab] = true;
9492 9595 }
9493 };
9494 vm.mentionedPeople = [];
9495 vm.reportHistoryData = {};
9496 vm.textTraceback = true;
9497 vm.rawTraceback = '';
9498 vm.traceback = '';
9499 vm.reportType = 'report';
9500 vm.report = null;
9501 vm.showLong = false;
9502 vm.reportLogs = null;
9503 vm.requestStats = null;
9504 vm.comment = null;
9505 vm.is_loading = {
9506 report: true,
9507 logs: true,
9508 history: true
9509 };
9596 else{
9597 $cookies.selectedReportTab = 'request_details';
9598 vm.tabs.request_details = true;
9599 }
9600
9601 // load report
9602 vm.fetchReport();
9603 }
9510 9604
9511 9605 vm.searchMentionedPeople = function(term){
9512 9606 //vm.mentionedPeople = [];
9513 9607 var term = term.toLowerCase();
9514 9608 reportGroupPropertyResource.get({
9515 9609 groupId: vm.report.group_id,
9516 9610 key: 'assigned_users'
9517 9611 }, null,
9518 9612 function (data) {
9519 9613 var users = [];
9520 9614 _.each(data.assigned, function(u){
9521 9615 users.push({label: u.user_name});
9522 9616 });
9523 9617 _.each(data.unassigned, function(u){
9524 9618 users.push({label: u.user_name});
9525 9619 });
9526 9620
9527 9621 var result = _.filter(users, function(u){
9528 return u.label.toLowerCase().indexOf(term) !== -1;
9622 return u.label.toLowerCase().indexOf(term) !== -1;
9529 9623 });
9530 9624 vm.mentionedPeople = result;
9531 9625 });
9532 9626 };
9533 9627
9534 9628 vm.searchTag = function (tag, value) {
9535 9629
9536 9630 if (vm.report.report_type === 3) {
9537 9631 $location.url($state.href('report.list_slow'));
9538 9632 }
9539 9633 else {
9540 9634 $location.url($state.href('report.list'));
9541 9635 }
9542 9636 $location.search(tag, value);
9543 9637 };
9544 9638
9545 vm.tabs = {
9546 slow_calls:false,
9547 request_details:false,
9548 logs:false,
9549 comments:false,
9550 affected_users:false
9551 };
9552 if ($cookies.selectedReportTab) {
9553 vm.tabs[$cookies.selectedReportTab] = true;
9554 }
9555 else{
9556 $cookies.selectedReportTab = 'request_details';
9557 vm.tabs.request_details = true;
9558 }
9559
9560 9639 vm.fetchLogs = function () {
9561 9640 if (!vm.report.request_id){
9562 9641 return
9563 9642 }
9564 9643 vm.is_loading.logs = true;
9565 9644 logsNoIdResource.query({request_id: vm.report.request_id},
9566 9645 function (data) {
9567 9646 vm.is_loading.logs = false;
9568 9647 vm.reportLogs = data;
9569 9648 }, function () {
9570 9649 vm.is_loading.logs = false;
9571 9650 });
9572 9651 };
9573 9652 vm.addComment = function () {
9574 9653 reportGroupPropertyResource.save({
9575 9654 groupId: vm.report.group_id,
9576 9655 key: 'comments'
9577 9656 }, {body: vm.comment},
9578 9657 function (data) {
9579 9658 vm.report.comments.push(data);
9580 9659 });
9581 9660 vm.comment = '';
9582 9661 };
9583 9662
9584 9663 vm.fetchReport = function () {
9664
9585 9665 vm.is_loading.report = true;
9586 9666 reportGroupResource.get($state.params, function (data) {
9587 9667 vm.is_loading.report = false;
9588 9668 if (data.request) {
9589 9669 try {
9590 9670 var to_sort = _.pairs(data.request);
9591 9671 data.request = _.object(_.sortBy(to_sort, function (i) {
9592 9672 return i[0]
9593 9673 }));
9594 9674 }
9595 9675 catch (err) {
9596 9676 }
9597 9677 }
9598 9678 vm.report = data;
9599 9679 if (vm.report.req_stats) {
9600 9680 vm.requestStats = [];
9601 9681 _.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
9602 9682 vm.requestStats.push({
9603 9683 name: p[0],
9604 9684 value: vm.report.req_stats[p[0]].toFixed(3),
9605 9685 percent: p[1],
9606 9686 calls: vm.report.req_stats[p[0] + '_calls']
9607 9687 })
9608 9688 });
9609 9689 }
9610 9690 vm.traceback = data.traceback;
9611 9691 _.each(vm.traceback, function (frame) {
9612 9692 if (frame.line) {
9613 9693 vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
9614 9694 }
9615 9695 vm.rawTraceback += ' ' + frame.cline + "\r\n";
9616 9696 });
9617 9697
9618 9698 if (stateHolder.AeUser.id){
9619 9699 vm.fetchHistory();
9620 9700 }
9621 9701
9622 9702 vm.selectedTab($cookies.selectedReportTab);
9623 9703
9624 9704 }, function (response) {
9625 9705
9626 9706 if (response.status == 403) {
9627 9707 var uid = response.headers('x-appenlight-uid');
9628 9708 if (!uid) {
9629 9709 window.location = '/register?came_from=' + encodeURIComponent(window.location);
9630 9710 }
9631 9711 }
9632 9712 vm.is_loading.report = false;
9633 9713 });
9634 9714 };
9635 9715
9636 9716 vm.selectedTab = function(tab_name){
9637 9717 $cookies.selectedReportTab = tab_name;
9638 9718 if (tab_name == 'logs' && vm.reportLogs === null) {
9639 9719 vm.fetchLogs();
9640 9720 }
9641 9721 };
9642 9722
9643 9723 vm.markFixed = function () {
9644 9724 reportGroupResource.update({
9645 9725 groupId: vm.report.group_id
9646 9726 }, {fixed: !vm.report.group.fixed},
9647 9727 function (data) {
9648 9728 vm.report.group.fixed = data.fixed;
9649 9729 });
9650 9730 };
9651 9731
9652 9732 vm.markPublic = function () {
9653 9733 reportGroupResource.update({
9654 9734 groupId: vm.report.group_id
9655 9735 }, {public: !vm.report.group.public},
9656 9736 function (data) {
9657 9737 vm.report.group.public = data.public;
9658 9738 });
9659 9739 };
9660 9740
9661 9741 vm.delete = function () {
9662 9742 reportGroupResource.delete({'groupId': vm.report.group_id},
9663 9743 function (data) {
9664 9744 $state.go('report.list');
9665 9745 })
9666 9746 };
9667 9747
9668 9748 vm.assignUsersModal = function (index) {
9669 9749 vm.opts = {
9670 9750 backdrop: 'static',
9671 9751 templateUrl: 'AssignReportCtrl.html',
9672 9752 controller: 'AssignReportCtrl as ctrl',
9673 9753 resolve: {
9674 9754 report: function () {
9675 9755 return vm.report;
9676 9756 }
9677 9757 }
9678 9758 };
9679 9759 var modalInstance = $uibModal.open(vm.opts);
9680 9760 modalInstance.result.then(function (report) {
9681 9761
9682 9762 }, function () {
9683 9763 console.info('Modal dismissed at: ' + new Date());
9684 9764 });
9685 9765
9686 9766 };
9687 9767
9688 9768 vm.fetchHistory = function () {
9689 9769 reportGroupPropertyResource.query({
9690 9770 groupId: vm.report.group_id,
9691 9771 key: 'history'
9692 9772 }, function (data) {
9693 9773 vm.reportHistoryData = {
9694 9774 json: data,
9695 9775 keys: {
9696 9776 x: 'x',
9697 9777 value: ["reports"]
9698 9778 },
9699 9779 names: {
9700 9780 reports: 'Reports history'
9701 9781 },
9702 9782 type: 'bar'
9703 9783 };
9704 9784 vm.is_loading.history = false;
9705 9785 });
9706 9786 };
9707 9787
9708 9788 vm.nextDetail = function () {
9709 9789 $state.go('report.view_detail', {
9710 9790 groupId: vm.report.group_id,
9711 9791 reportId: vm.report.group.next_report
9712 9792 });
9713 9793 };
9714 9794 vm.previousDetail = function () {
9715 9795 $state.go('report.view_detail', {
9716 9796 groupId: vm.report.group_id,
9717 9797 reportId: vm.report.group.previous_report
9718 9798 });
9719 9799 };
9720 9800
9721 9801 vm.runIntegration = function (integration_name) {
9722 9802
9723 9803 if (integration_name == 'bitbucket') {
9724 9804 var controller = 'BitbucketIntegrationCtrl as ctrl';
9725 9805 var template_url = 'templates/integrations/bitbucket.html';
9726 9806 }
9727 9807 else if (integration_name == 'github') {
9728 9808 var controller = 'GithubIntegrationCtrl as ctrl';
9729 9809 var template_url = 'templates/integrations/github.html';
9730 9810 }
9731 9811 else if (integration_name == 'jira') {
9732 9812 var controller = 'JiraIntegrationCtrl as ctrl';
9733 9813 var template_url = 'templates/integrations/jira.html';
9734 9814 }
9735 9815 else {
9736 9816 return false;
9737 9817 }
9738 9818
9739 9819 vm.opts = {
9740 9820 backdrop: 'static',
9741 9821 templateUrl: template_url,
9742 9822 controller: controller,
9743 9823 resolve: {
9744 9824 integrationName: function () {
9745 9825 return integration_name
9746 9826 },
9747 9827 report: function () {
9748 9828 return vm.report;
9749 9829 }
9750 9830 }
9751 9831 };
9752 9832 var modalInstance = $uibModal.open(vm.opts);
9753 9833 modalInstance.result.then(function (report) {
9754 9834
9755 9835 }, function () {
9756 9836 console.info('Modal dismissed at: ' + new Date());
9757 9837 });
9758 9838
9759 9839 };
9760
9761 // load report
9762 vm.fetchReport();
9763
9764
9765 9840 }
9766 9841
9767 9842 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
9768 9843 //
9769 9844 // Licensed under the Apache License, Version 2.0 (the "License");
9770 9845 // you may not use this file except in compliance with the License.
9771 9846 // You may obtain a copy of the License at
9772 9847 //
9773 9848 // http://www.apache.org/licenses/LICENSE-2.0
9774 9849 //
9775 9850 // Unless required by applicable law or agreed to in writing, software
9776 9851 // distributed under the License is distributed on an "AS IS" BASIS,
9777 9852 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9778 9853 // See the License for the specific language governing permissions and
9779 9854 // limitations under the License.
9780 9855
9781 9856 angular.module('appenlight.components.reportsBrowserView', [])
9782 9857 .component('reportsBrowserView', {
9783 9858 templateUrl: 'components/views/reports-browser-view/reports-browser-view.html',
9784 9859 controller: reportsBrowserViewController
9785 9860 });
9786 9861
9787 9862 reportsBrowserViewController.$inject = ['$location', '$cookies',
9788 9863 'stateHolder', 'typeAheadTagHelper', 'reportsResource'];
9789 9864
9790 9865 function reportsBrowserViewController($location, $cookies, stateHolder,
9791 typeAheadTagHelper, reportsResource) {
9866 typeAheadTagHelper, reportsResource) {
9792 9867 var vm = this;
9793 vm.applications = stateHolder.AeUser.applications_map;
9794 stateHolder.section = 'reports';
9795 vm.today = function () {
9796 vm.pickerDate = new Date();
9797 };
9798 vm.today();
9799 vm.reportsPage = [];
9800 vm.page = 1;
9801 vm.itemCount = 0;
9802 vm.itemsPerPage = 250;
9803 typeAheadTagHelper.tags = [];
9804 vm.searchParams = {tags: [], page: 1, type: 'report'};
9805 vm.is_loading = false;
9806 vm.filterTypeAheadOptions = [
9807 {
9808 type: 'error',
9809 text: 'error:',
9810 'description': 'Full-text search in your reports',
9811 example: 'error:text-im-looking-for',
9812 tag: 'Error'
9813 },
9814 {
9815 type: 'view_name',
9816 text: 'view_name:',
9817 'description': 'Query reports occured in specific views',
9818 example: "view_name:module.foo",
9819 tag: 'View Name'
9820 },
9821 {
9822 type: 'resource',
9823 text: 'resource:',
9824 'description': 'Restrict resultset to application',
9825 example: "resource:ID",
9826 tag: 'Application'
9827 },
9828 {
9829 type: 'priority',
9830 text: 'priority:',
9831 'description': 'Show reports with specific priority',
9832 example: 'priority:8',
9833 tag: 'Priority'
9834 },
9835 {
9836 type: 'min_occurences',
9837 text: 'min_occurences:',
9838 'description': 'Show reports from groups with at least X occurences',
9839 example: 'min_occurences:25',
9840 tag: 'Occurences'
9841 },
9842 {
9843 type: 'url_path',
9844 text: 'url_path:',
9845 'description': 'Show reports from specific URL paths',
9846 example: 'url_path:/foo/bar/baz',
9847 tag: 'Url Path'
9848 },
9849 {
9850 type: 'url_domain',
9851 text: 'url_domain:',
9852 'description': 'Show reports from specific domain',
9853 example: 'url_domain:domain.com',
9854 tag: 'Domain'
9855 },
9856 {
9857 type: 'report_status',
9858 text: 'report_status:',
9859 'description': 'Show reports from groups with specific status',
9860 example: 'report_status:never_reviewed',
9861 tag: 'Status'
9862 },
9863 {
9864 type: 'request_id',
9865 text: 'request_id:',
9866 'description': 'Show reports with specific request id',
9867 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9868 tag: 'Request ID'
9869 },
9870 {
9871 type: 'server_name',
9872 text: 'server_name:',
9873 'description': 'Show reports tagged with this key/value pair',
9874 example: 'server_name:hostname',
9875 tag: 'Tag'
9876 },
9877 {
9878 type: 'http_status',
9879 text: 'http_status:',
9880 'description': 'Show reports with specific HTTP status code',
9881 example: "http_status:",
9882 tag: 'HTTP Status'
9883 },
9884 {
9885 type: 'http_status',
9886 text: 'http_status:500',
9887 'description': 'Show reports with specific HTTP status code',
9888 example: "http_status:500",
9889 tag: 'HTTP Status'
9890 },
9891 {
9892 type: 'http_status',
9893 text: 'http_status:404',
9894 'description': 'Include 404 reports in your search',
9895 example: "http_status:404",
9896 tag: 'HTTP Status'
9897 },
9898 {
9899 type: 'start_date',
9900 text: 'start_date:',
9901 'description': 'Show reports newer than this date (press TAB for dropdown)',
9902 example: 'start_date:2014-08-15T13:00',
9903 tag: 'Start Date'
9904 },
9905 {
9906 type: 'end_date',
9907 text: 'end_date:',
9908 'description': 'Show reports older than this date (press TAB for dropdown)',
9909 example: 'start_date:2014-08-15T23:59',
9910 tag: 'End Date'
9911 }
9912 ];
9913
9914 vm.filterTypeAhead = undefined;
9915 vm.showDatePicker = false;
9916 vm.manualOpen = false;
9917 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9868 vm.$onInit = function () {
9869 vm.applications = stateHolder.AeUser.applications_map;
9870 stateHolder.section = 'reports';
9871 vm.today = function () {
9872 vm.pickerDate = new Date();
9873 };
9874 vm.today();
9875 vm.reportsPage = [];
9876 vm.page = 1;
9877 vm.itemCount = 0;
9878 vm.itemsPerPage = 250;
9879 typeAheadTagHelper.tags = [];
9880 vm.searchParams = {tags: [], page: 1, type: 'report'};
9881 vm.is_loading = false;
9882 vm.filterTypeAheadOptions = [
9883 {
9884 type: 'error',
9885 text: 'error:',
9886 'description': 'Full-text search in your reports',
9887 example: 'error:text-im-looking-for',
9888 tag: 'Error'
9889 },
9890 {
9891 type: 'view_name',
9892 text: 'view_name:',
9893 'description': 'Query reports occured in specific views',
9894 example: "view_name:module.foo",
9895 tag: 'View Name'
9896 },
9897 {
9898 type: 'resource',
9899 text: 'resource:',
9900 'description': 'Restrict resultset to application',
9901 example: "resource:ID",
9902 tag: 'Application'
9903 },
9904 {
9905 type: 'priority',
9906 text: 'priority:',
9907 'description': 'Show reports with specific priority',
9908 example: 'priority:8',
9909 tag: 'Priority'
9910 },
9911 {
9912 type: 'min_occurences',
9913 text: 'min_occurences:',
9914 'description': 'Show reports from groups with at least X occurences',
9915 example: 'min_occurences:25',
9916 tag: 'Occurences'
9917 },
9918 {
9919 type: 'url_path',
9920 text: 'url_path:',
9921 'description': 'Show reports from specific URL paths',
9922 example: 'url_path:/foo/bar/baz',
9923 tag: 'Url Path'
9924 },
9925 {
9926 type: 'url_domain',
9927 text: 'url_domain:',
9928 'description': 'Show reports from specific domain',
9929 example: 'url_domain:domain.com',
9930 tag: 'Domain'
9931 },
9932 {
9933 type: 'report_status',
9934 text: 'report_status:',
9935 'description': 'Show reports from groups with specific status',
9936 example: 'report_status:never_reviewed',
9937 tag: 'Status'
9938 },
9939 {
9940 type: 'request_id',
9941 text: 'request_id:',
9942 'description': 'Show reports with specific request id',
9943 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
9944 tag: 'Request ID'
9945 },
9946 {
9947 type: 'server_name',
9948 text: 'server_name:',
9949 'description': 'Show reports tagged with this key/value pair',
9950 example: 'server_name:hostname',
9951 tag: 'Tag'
9952 },
9953 {
9954 type: 'http_status',
9955 text: 'http_status:',
9956 'description': 'Show reports with specific HTTP status code',
9957 example: "http_status:",
9958 tag: 'HTTP Status'
9959 },
9960 {
9961 type: 'http_status',
9962 text: 'http_status:500',
9963 'description': 'Show reports with specific HTTP status code',
9964 example: "http_status:500",
9965 tag: 'HTTP Status'
9966 },
9967 {
9968 type: 'http_status',
9969 text: 'http_status:404',
9970 'description': 'Include 404 reports in your search',
9971 example: "http_status:404",
9972 tag: 'HTTP Status'
9973 },
9974 {
9975 type: 'start_date',
9976 text: 'start_date:',
9977 'description': 'Show reports newer than this date (press TAB for dropdown)',
9978 example: 'start_date:2014-08-15T13:00',
9979 tag: 'Start Date'
9980 },
9981 {
9982 type: 'end_date',
9983 text: 'end_date:',
9984 'description': 'Show reports older than this date (press TAB for dropdown)',
9985 example: 'start_date:2014-08-15T23:59',
9986 tag: 'End Date'
9987 }
9988 ];
9989
9990 vm.filterTypeAhead = undefined;
9991 vm.showDatePicker = false;
9992 vm.manualOpen = false;
9993 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
9994
9995 vm.notRelativeTime = false;
9996 if ($cookies.notRelativeTime) {
9997 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
9998 }
9999
10000 _.each(_.range(1, 11), function (priority) {
10001 vm.filterTypeAheadOptions.push({
10002 type: 'priority',
10003 text: 'priority:' + priority.toString(),
10004 description: 'Show entries with specific priority',
10005 example: 'priority:' + priority,
10006 tag: 'Priority'
10007 });
10008 });
10009 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
10010 vm.filterTypeAheadOptions.push({
10011 type: 'report_status',
10012 text: 'report_status:' + status,
10013 'description': 'Show only reports with this status',
10014 example: 'report_status:' + status,
10015 tag: 'Status ' + status.toUpperCase()
10016 });
10017 });
10018 _.each(stateHolder.AeUser.applications, function (item) {
10019 vm.filterTypeAheadOptions.push({
10020 type: 'resource',
10021 text: 'resource:' + item.resource_id + ':' + item.resource_name,
10022 example: 'resource:' + item.resource_id,
10023 'tag': item.resource_name,
10024 'description': 'Restrict resultset to this application'
10025 });
10026 });
10027
10028 // initial load
10029 vm.refresh();
10030
10031 }
10032
9918 10033 vm.removeSearchTag = function (tag) {
9919 10034 $location.search(tag.type, null);
9920 10035 vm.refresh();
9921 10036 };
9922 10037 vm.addSearchTag = function (tag) {
9923 10038 $location.search(tag.type, tag.value);
9924 10039 vm.refresh();
9925 10040 };
9926 vm.notRelativeTime = false;
9927 if ($cookies.notRelativeTime) {
9928 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
9929 }
9930 10041
9931 10042 vm.changeRelativeTime = function () {
9932 10043 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
9933 10044 };
9934 10045
9935 _.each(_.range(1, 11), function (priority) {
9936 vm.filterTypeAheadOptions.push({
9937 type: 'priority',
9938 text: 'priority:' + priority.toString(),
9939 description: 'Show entries with specific priority',
9940 example: 'priority:' + priority,
9941 tag: 'Priority'
9942 });
9943 });
9944 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
9945 vm.filterTypeAheadOptions.push({
9946 type: 'report_status',
9947 text: 'report_status:' + status,
9948 'description': 'Show only reports with this status',
9949 example: 'report_status:' + status,
9950 tag: 'Status ' + status.toUpperCase()
9951 });
9952 });
9953 _.each(stateHolder.AeUser.applications, function (item) {
9954 vm.filterTypeAheadOptions.push({
9955 type: 'resource',
9956 text: 'resource:' + item.resource_id + ':' + item.resource_name,
9957 example: 'resource:' + item.resource_id,
9958 'tag': item.resource_name,
9959 'description': 'Restrict resultset to this application'
9960 });
9961 });
9962
9963 vm.paginationChange = function(){
10046 vm.paginationChange = function () {
9964 10047 $location.search('page', vm.page);
9965 10048 vm.refresh();
9966 10049 };
9967 10050
9968 10051 vm.typeAheadTag = function (event) {
9969 10052 var text = vm.filterTypeAhead;
9970 10053 if (_.isObject(vm.filterTypeAhead)) {
9971 10054 text = vm.filterTypeAhead.text;
9972 10055 }
9973 10056 if (!vm.filterTypeAhead) {
9974 10057 return
9975 10058 }
9976 10059
9977 10060 var parsed = text.split(':');
9978 10061 var tag = {'type': null, 'value': null};
9979 10062 // app tags have : twice
9980 10063 if (parsed.length > 2 && parsed[0] == 'resource') {
9981 10064 tag.type = 'resource';
9982 10065 tag.value = parsed[1];
9983 10066 }
9984 10067 // normal tag:value
9985 10068 else if (parsed.length > 1) {
9986 10069 tag.type = parsed[0];
9987 10070 var tagValue = parsed.slice(1);
9988 10071 if (tagValue) {
9989 10072 tag.value = tagValue.join(':');
9990 10073 }
9991 }
9992 else {
10074 } else {
9993 10075 tag.type = 'error';
9994 10076 tag.value = parsed.join(':');
9995 10077 }
9996 10078
9997 10079 // set datepicker hour based on type of field
9998 10080 if ('start_date:' == text) {
9999 10081 vm.showDatePicker = true;
10000 10082 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10001 }
10002 else if ('end_date:' == text) {
10083 } else if ('end_date:' == text) {
10003 10084 vm.showDatePicker = true;
10004 10085 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10005 10086 }
10006 10087
10007 10088 if (event.keyCode != 13 || !tag.type || !tag.value) {
10008 10089 return
10009 10090 }
10010 10091 vm.showDatePicker = false;
10011 10092 // aka we selected one of main options
10012 10093 vm.addSearchTag({type: tag.type, value: tag.value});
10013 10094 // clear typeahead
10014 10095 vm.filterTypeAhead = undefined;
10015 10096 };
10016 10097
10017 vm.pickerDateChanged = function(){
10098 vm.pickerDateChanged = function () {
10018 10099 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
10019 10100 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10020 }
10021 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
10101 } else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
10022 10102 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10023 10103 }
10024 10104 vm.showDatePicker = false;
10025 10105 };
10026 10106
10027 10107 var reportPresentation = function (report) {
10028 10108 report.presentation = {};
10029 10109 if (report.group.public) {
10030 10110 report.presentation.className = 'public';
10031 10111 report.presentation.tooltip = 'Public';
10032 }
10033 else if (report.group.fixed) {
10112 } else if (report.group.fixed) {
10034 10113 report.presentation.className = 'fixed';
10035 10114 report.presentation.tooltip = 'Fixed';
10036 }
10037 else if (report.group.read) {
10115 } else if (report.group.read) {
10038 10116 report.presentation.className = 'reviewed';
10039 10117 report.presentation.tooltip = 'Reviewed';
10040 }
10041 else {
10118 } else {
10042 10119 report.presentation.className = 'new';
10043 10120 report.presentation.tooltip = 'New';
10044 10121 }
10045 10122 return report;
10046 10123 };
10047 10124
10048 10125 vm.fetchReports = function (searchParams) {
10049 10126 vm.is_loading = true;
10050 10127 reportsResource.query(searchParams, function (data, getResponseHeaders) {
10051 10128 var headers = getResponseHeaders();
10052 10129
10053 10130 vm.is_loading = false;
10054 10131 vm.reportsPage = _.map(data, function (item) {
10055 10132 return reportPresentation(item);
10056 10133 });
10057 10134 vm.itemCount = headers['x-total-count'];
10058 10135 vm.itemsPerPage = headers['x-items-per-page'];
10059 10136 }, function () {
10060 10137 vm.is_loading = false;
10061 10138 });
10062 10139 };
10063 10140
10064 10141 vm.filterId = function (log) {
10065 10142 vm.searchParams.tags.push({
10066 10143 type: "request_id",
10067 10144 value: log.request_id
10068 10145 });
10069 10146 vm.refresh();
10070 10147 };
10071 10148
10072 vm.refresh = function(){
10149 vm.refresh = function () {
10073 10150 vm.searchParams = parseSearchToTags($location.search());
10074 10151 vm.page = Number(vm.searchParams.page) || 1;
10075 10152 var params = parseTagsToSearch(vm.searchParams);
10076 10153
10077 10154 vm.fetchReports(params);
10078 10155 };
10079 // initial load
10080 vm.refresh();
10156
10081 10157 }
10082 10158
10083 10159 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10084 10160 //
10085 10161 // Licensed under the Apache License, Version 2.0 (the "License");
10086 10162 // you may not use this file except in compliance with the License.
10087 10163 // You may obtain a copy of the License at
10088 10164 //
10089 10165 // http://www.apache.org/licenses/LICENSE-2.0
10090 10166 //
10091 10167 // Unless required by applicable law or agreed to in writing, software
10092 10168 // distributed under the License is distributed on an "AS IS" BASIS,
10093 10169 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10094 10170 // See the License for the specific language governing permissions and
10095 10171 // limitations under the License.
10096 10172
10097 10173 'use strict';
10098 10174
10099 10175 /* Controllers */
10100 10176
10101 10177 angular.module('appenlight.components.reportsSlowBrowserView', [])
10102 10178 .component('reportsSlowBrowserView', {
10103 10179 templateUrl: 'components/views/reports-slow-browser-view/reports-slow-browser-view.html',
10104 10180 controller: ReportsSlowBrowserViewController
10105 10181 });
10106 10182
10107 10183 ReportsSlowBrowserViewController.$inject = ['$location', '$cookies',
10108 10184 'stateHolder', 'typeAheadTagHelper', 'slowReportsResource']
10109 10185
10110 10186 function ReportsSlowBrowserViewController($location, $cookies, stateHolder, typeAheadTagHelper, slowReportsResource) {
10111 10187 var vm = this;
10112 vm.applications = stateHolder.AeUser.applications_map;
10113 stateHolder.section = 'slow_reports';
10114 vm.today = function () {
10115 vm.pickerDate = new Date();
10116 };
10117 vm.today();
10118 vm.reportsPage = [];
10119 vm.page = 1;
10120 vm.itemCount = 0;
10121 vm.itemsPerPage = 250;
10122 typeAheadTagHelper.tags = [];
10123 vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
10124 vm.is_loading = false;
10125 vm.filterTypeAheadOptions = [
10126 {
10127 type: 'view_name',
10128 text: 'view_name:',
10129 'description': 'Query reports occured in specific views',
10130 tag: 'View Name',
10131 example: "view_name:module.foo"
10132 },
10133 {
10134 type: 'resource',
10135 text: 'resource:',
10136 'description': 'Restrict resultset to application',
10137 tag: 'Application',
10138 example: "resource:ID"
10139 },
10140 {
10141 type: 'priority',
10142 text: 'priority:',
10143 'description': 'Show reports with specific priority',
10144 example: 'priority:8',
10145 tag: 'Priority'
10146 },
10147 {
10148 type: 'min_occurences',
10149 text: 'min_occurences:',
10150 'description': 'Show reports from groups with at least X occurences',
10151 example: 'min_occurences:25',
10152 tag: 'Min. occurences'
10153 },
10154 {
10155 type: 'min_duration',
10156 text: 'min_duration:',
10157 'description': 'Show reports from groups with average duration >= Xs',
10158 example: 'min_duration:4.5',
10159 tag: 'Min. duration'
10160 },
10161 {
10162 type: 'url_path',
10163 text: 'url_path:',
10164 'description': 'Show reports from specific URL paths',
10165 example: 'url_path:/foo/bar/baz',
10166 tag: 'Url Path'
10167 },
10168 {
10169 type: 'url_domain',
10170 text: 'url_domain:',
10171 'description': 'Show reports from specific domain',
10172 example: 'url_domain:domain.com',
10173 tag: 'Domain'
10174 },
10175 {
10176 type: 'request_id',
10177 text: 'request_id:',
10178 'description': 'Show reports with specific request id',
10179 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
10180 tag: 'Request ID'
10181 },
10182 {
10183 type: 'report_status',
10184 text: 'report_status:',
10185 'description': 'Show reports from groups with specific status',
10186 example: 'report_status:never_reviewed',
10187 tag: 'Status'
10188 },
10189 {
10190 type: 'server_name',
10191 text: 'server_name:',
10192 'description': 'Show reports tagged with this key/value pair',
10193 example: 'server_name:hostname',
10194 tag: 'Tag'
10195 },
10196 {
10197 type: 'start_date',
10198 text: 'start_date:',
10199 'description': 'Show reports newer than this date (press TAB for dropdown)',
10200 example: 'start_date:2014-08-15T13:00',
10201 tag: 'Start Date'
10202 },
10203 {
10204 type: 'end_date',
10205 text: 'end_date:',
10206 'description': 'Show reports older than this date (press TAB for dropdown)',
10207 example: 'start_date:2014-08-15T23:59',
10208 tag: 'End Date'
10209 }
10210 ];
10211
10212 vm.filterTypeAhead = undefined;
10213 vm.showDatePicker = false;
10214 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
10188 vm.$onInit = function () {
10189 vm.applications = stateHolder.AeUser.applications_map;
10190 stateHolder.section = 'slow_reports';
10191 vm.today = function () {
10192 vm.pickerDate = new Date();
10193 };
10194 vm.today();
10195 vm.reportsPage = [];
10196 vm.page = 1;
10197 vm.itemCount = 0;
10198 vm.itemsPerPage = 250;
10199 typeAheadTagHelper.tags = [];
10200 vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
10201 vm.is_loading = false;
10202 vm.filterTypeAheadOptions = [
10203 {
10204 type: 'view_name',
10205 text: 'view_name:',
10206 'description': 'Query reports occured in specific views',
10207 tag: 'View Name',
10208 example: "view_name:module.foo"
10209 },
10210 {
10211 type: 'resource',
10212 text: 'resource:',
10213 'description': 'Restrict resultset to application',
10214 tag: 'Application',
10215 example: "resource:ID"
10216 },
10217 {
10218 type: 'priority',
10219 text: 'priority:',
10220 'description': 'Show reports with specific priority',
10221 example: 'priority:8',
10222 tag: 'Priority'
10223 },
10224 {
10225 type: 'min_occurences',
10226 text: 'min_occurences:',
10227 'description': 'Show reports from groups with at least X occurences',
10228 example: 'min_occurences:25',
10229 tag: 'Min. occurences'
10230 },
10231 {
10232 type: 'min_duration',
10233 text: 'min_duration:',
10234 'description': 'Show reports from groups with average duration >= Xs',
10235 example: 'min_duration:4.5',
10236 tag: 'Min. duration'
10237 },
10238 {
10239 type: 'url_path',
10240 text: 'url_path:',
10241 'description': 'Show reports from specific URL paths',
10242 example: 'url_path:/foo/bar/baz',
10243 tag: 'Url Path'
10244 },
10245 {
10246 type: 'url_domain',
10247 text: 'url_domain:',
10248 'description': 'Show reports from specific domain',
10249 example: 'url_domain:domain.com',
10250 tag: 'Domain'
10251 },
10252 {
10253 type: 'request_id',
10254 text: 'request_id:',
10255 'description': 'Show reports with specific request id',
10256 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
10257 tag: 'Request ID'
10258 },
10259 {
10260 type: 'report_status',
10261 text: 'report_status:',
10262 'description': 'Show reports from groups with specific status',
10263 example: 'report_status:never_reviewed',
10264 tag: 'Status'
10265 },
10266 {
10267 type: 'server_name',
10268 text: 'server_name:',
10269 'description': 'Show reports tagged with this key/value pair',
10270 example: 'server_name:hostname',
10271 tag: 'Tag'
10272 },
10273 {
10274 type: 'start_date',
10275 text: 'start_date:',
10276 'description': 'Show reports newer than this date (press TAB for dropdown)',
10277 example: 'start_date:2014-08-15T13:00',
10278 tag: 'Start Date'
10279 },
10280 {
10281 type: 'end_date',
10282 text: 'end_date:',
10283 'description': 'Show reports older than this date (press TAB for dropdown)',
10284 example: 'start_date:2014-08-15T23:59',
10285 tag: 'End Date'
10286 }
10287 ];
10288
10289 vm.filterTypeAhead = undefined;
10290 vm.showDatePicker = false;
10291 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
10292
10293 vm.manualOpen = false;
10294 vm.notRelativeTime = false;
10295 if ($cookies.notRelativeTime) {
10296 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
10297 }
10298
10299 _.each(_.range(1, 11), function (priority) {
10300 vm.filterTypeAheadOptions.push({
10301 type: 'priority',
10302 text: 'priority:' + priority.toString(),
10303 description: 'Show entries with specific priority',
10304 example: 'priority:' + priority,
10305 tag: 'Priority'
10306 });
10307 });
10308 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
10309 vm.filterTypeAheadOptions.push({
10310 type: 'report_status',
10311 text: 'report_status:' + status,
10312 'description': 'Show only reports with this status',
10313 example: 'report_status:' + status,
10314 tag: 'Status ' + status.toUpperCase()
10315 });
10316 });
10317 _.each(stateHolder.AeUser.applications, function (item) {
10318 vm.filterTypeAheadOptions.push({
10319 type: 'resource',
10320 text: 'resource:' + item.resource_id + ':' + item.resource_name,
10321 example: 'resource:' + item.resource_id,
10322 'tag': item.resource_name,
10323 'description': 'Restrict resultset to this application'
10324 });
10325 });
10326
10327 //initial load
10328 vm.refresh();
10329 }
10330
10215 10331 vm.removeSearchTag = function (tag) {
10216 10332 $location.search(tag.type, null);
10217 10333 vm.refresh();
10218 10334 };
10219 10335 vm.addSearchTag = function (tag) {
10220 10336 $location.search(tag.type, tag.value);
10221 10337 vm.refresh();
10222 10338 };
10223 vm.manualOpen = false;
10224 vm.notRelativeTime = false;
10225 if ($cookies.notRelativeTime) {
10226 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
10227 }
10228 10339
10229 10340
10230 10341 vm.changeRelativeTime = function () {
10231 10342 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
10232 10343 };
10233 10344
10234 _.each(_.range(1, 11), function (priority) {
10235 vm.filterTypeAheadOptions.push({
10236 type: 'priority',
10237 text: 'priority:' + priority.toString(),
10238 description: 'Show entries with specific priority',
10239 example: 'priority:' + priority,
10240 tag: 'Priority'
10241 });
10242 });
10243 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
10244 vm.filterTypeAheadOptions.push({
10245 type: 'report_status',
10246 text: 'report_status:' + status,
10247 'description': 'Show only reports with this status',
10248 example: 'report_status:' + status,
10249 tag: 'Status ' + status.toUpperCase()
10250 });
10251 });
10252 _.each(stateHolder.AeUser.applications, function (item) {
10253 vm.filterTypeAheadOptions.push({
10254 type: 'resource',
10255 text: 'resource:' + item.resource_id + ':' + item.resource_name,
10256 example: 'resource:' + item.resource_id,
10257 'tag': item.resource_name,
10258 'description': 'Restrict resultset to this application'
10259 });
10260 });
10261
10262 10345 vm.typeAheadTag = function (event) {
10263 10346 var text = vm.filterTypeAhead;
10264 10347 if (_.isObject(vm.filterTypeAhead)) {
10265 10348 text = vm.filterTypeAhead.text;
10266 10349 };
10267 10350 if (!vm.filterTypeAhead) {
10268 10351 return
10269 10352 }
10270 10353 var parsed = text.split(':');
10271 10354 var tag = {'type': null, 'value': null};
10272 10355 // app tags have : twice
10273 10356 if (parsed.length > 2 && parsed[0] == 'resource') {
10274 10357 tag.type = 'resource';
10275 10358 tag.value = parsed[1];
10276 10359 }
10277 10360 // normal tag:value
10278 10361 else if (parsed.length > 1) {
10279 10362 tag.type = parsed[0];
10280 10363 var tagValue = parsed.slice(1);
10281 10364 if (tagValue) {
10282 10365 tag.value = tagValue.join(':');
10283 10366 }
10284 10367 }
10285 10368
10286 10369 // set datepicker hour based on type of field
10287 10370 if ('start_date:' == text) {
10288 10371 vm.showDatePicker = true;
10289 10372 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10290 10373 }
10291 10374 else if ('end_date:' == text) {
10292 10375 vm.showDatePicker = true;
10293 10376 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10294 10377 }
10295 10378
10296 10379 if (event.keyCode != 13 || !tag.type || !tag.value) {
10297 10380 return
10298 10381 }
10299 10382 vm.showDatePicker = false;
10300 10383 // aka we selected one of main options
10301 10384 vm.addSearchTag({type: tag.type, value: tag.value});
10302 10385 // clear typeahead
10303 10386 vm.filterTypeAhead = undefined;
10304 10387 };
10305 10388
10306 10389 vm.paginationChange = function(){
10307 10390 $location.search('page', vm.page);
10308 10391 vm.refresh();
10309 10392 };
10310 10393
10311 10394 vm.pickerDateChanged = function(){
10312 10395 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
10313 10396 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
10314 10397 }
10315 10398 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
10316 10399 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
10317 10400 }
10318 10401 vm.showDatePicker = false;
10319 10402 };
10320 10403
10321 10404 var reportPresentation = function (report) {
10322 10405 report.presentation = {};
10323 10406 if (report.group.public) {
10324 10407 report.presentation.className = 'public';
10325 10408 report.presentation.tooltip = 'Public';
10326 10409 }
10327 10410 else if (report.group.fixed) {
10328 10411 report.presentation.className = 'fixed';
10329 10412 report.presentation.tooltip = 'Fixed';
10330 10413 }
10331 10414 else if (report.group.read) {
10332 10415 report.presentation.className = 'reviewed';
10333 10416 report.presentation.tooltip = 'Reviewed';
10334 10417 }
10335 10418 else {
10336 10419 report.presentation.className = 'new';
10337 10420 report.presentation.tooltip = 'New';
10338 10421 }
10339 10422 return report;
10340 10423 };
10341 10424
10342 10425 vm.fetchReports = function (searchParams) {
10343 10426 vm.is_loading = true;
10344 10427 slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
10345 10428 var headers = getResponseHeaders();
10346 10429
10347 10430 vm.is_loading = false;
10348 10431 vm.reportsPage = _.map(data, function (item) {
10349 10432 return reportPresentation(item);
10350 10433 });
10351 10434 vm.itemCount = headers['x-total-count'];
10352 10435 vm.itemsPerPage = headers['x-items-per-page'];
10353 10436 }, function () {
10354 10437 vm.is_loading = false;
10355 10438 });
10356 10439 };
10357 10440
10358 10441 vm.filterId = function (log) {
10359 10442 vm.searchParams.tags.push({
10360 10443 type: "request_id",
10361 10444 value: log.request_id
10362 10445 });
10363 10446 vm.refresh();
10364 10447 };
10365 10448 vm.refresh = function(){
10366 10449 vm.searchParams = parseSearchToTags($location.search());
10367 10450 vm.page = Number(vm.searchParams.page) || 1;
10368 10451 var params = parseTagsToSearch(vm.searchParams);
10369 10452 vm.fetchReports(params);
10370 10453 };
10371 10454
10372 //initial load
10373 vm.refresh();
10374 10455 }
10375 10456
10376 10457 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10377 10458 //
10378 10459 // Licensed under the Apache License, Version 2.0 (the "License");
10379 10460 // you may not use this file except in compliance with the License.
10380 10461 // You may obtain a copy of the License at
10381 10462 //
10382 10463 // http://www.apache.org/licenses/LICENSE-2.0
10383 10464 //
10384 10465 // Unless required by applicable law or agreed to in writing, software
10385 10466 // distributed under the License is distributed on an "AS IS" BASIS,
10386 10467 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10387 10468 // See the License for the specific language governing permissions and
10388 10469 // limitations under the License.
10389 10470
10390 10471 angular.module('appenlight.components.settingsView', [])
10391 10472 .component('settingsView', {
10392 10473 templateUrl: 'components/views/settings-view/settings-view.html',
10393 10474 controller: SettingsViewController
10394 10475 });
10395 10476
10396 10477 SettingsViewController.$inject = ['$state', 'AeConfig'];
10397 10478
10398 10479 function SettingsViewController($state, AeConfig) {
10399 this.$state = $state;
10400 this.AeConfig = AeConfig;
10401 console.info('SettingsViewController');
10480 this.$onInit = function () {
10481 this.$state = $state;
10482 this.AeConfig = AeConfig;
10483 console.info('SettingsViewController');
10484 }
10402 10485 }
10403 10486
10404 10487 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10405 10488 //
10406 10489 // Licensed under the Apache License, Version 2.0 (the "License");
10407 10490 // you may not use this file except in compliance with the License.
10408 10491 // You may obtain a copy of the License at
10409 10492 //
10410 10493 // http://www.apache.org/licenses/LICENSE-2.0
10411 10494 //
10412 10495 // Unless required by applicable law or agreed to in writing, software
10413 10496 // distributed under the License is distributed on an "AS IS" BASIS,
10414 10497 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10415 10498 // See the License for the specific language governing permissions and
10416 10499 // limitations under the License.
10417 10500
10418 10501 angular.module('appenlight.components.userAlertChannelsEmailNewView', [])
10419 10502 .component('userAlertChannelsEmailNewView', {
10420 10503 templateUrl: 'components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
10421 10504 controller: AlertChannelsEmailController
10422 10505 });
10423 10506
10424 AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
10507 AlertChannelsEmailController.$inject = ['$state', 'userSelfPropertyResource'];
10425 10508
10426 10509 function AlertChannelsEmailController($state, userSelfPropertyResource) {
10427 10510
10428 10511 var vm = this;
10429 vm.$state = $state;
10430 vm.loading = {email: false};
10431 vm.form = {};
10432
10512 vm.$onInit = function () {
10513 var vm = this;
10514 vm.$state = $state;
10515 vm.loading = {email: false};
10516 vm.form = {};
10517 }
10433 10518 vm.createChannel = function () {
10434 10519 vm.loading.email = true;
10435 10520
10436 10521 userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
10437 10522 //vm.loading.email = false;
10438 10523 //setServerValidation(vm.channelForm);
10439 10524 //vm.form = {};
10440 10525 $state.go('user.alert_channels.list');
10441 10526 }, function (response) {
10442 10527 if (response.status == 422) {
10443 10528 setServerValidation(vm.channelForm, response.data);
10444 10529 }
10445 10530 vm.loading.email = false;
10446 10531 });
10447 10532 }
10448 10533 }
10449 10534
10450 10535 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10451 10536 //
10452 10537 // Licensed under the Apache License, Version 2.0 (the "License");
10453 10538 // you may not use this file except in compliance with the License.
10454 10539 // You may obtain a copy of the License at
10455 10540 //
10456 10541 // http://www.apache.org/licenses/LICENSE-2.0
10457 10542 //
10458 10543 // Unless required by applicable law or agreed to in writing, software
10459 10544 // distributed under the License is distributed on an "AS IS" BASIS,
10460 10545 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10461 10546 // See the License for the specific language governing permissions and
10462 10547 // limitations under the License.
10463 10548
10464 10549 angular.module('appenlight.components.userAlertChannelsListView', [])
10465 10550 .component('userAlertChannelsListView', {
10466 10551 templateUrl: 'components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
10467 10552 controller: userAlertChannelsListViewController
10468 10553 });
10469 10554
10470 userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
10555 userAlertChannelsListViewController.$inject = ['$state', 'userSelfPropertyResource', 'applicationsNoIdResource'];
10471 10556
10472 10557 function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
10473 10558
10474 10559 var vm = this;
10475 vm.$state = $state;
10476 vm.loading = {channels: true, applications: true, actions:true};
10560 vm.$onInit = function () {
10561 vm.$state = $state;
10562 vm.loading = {channels: true, applications: true, actions: true};
10477 10563
10478 vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
10479 function (data) {
10480 vm.loading.channels = false;
10481 });
10564 vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
10565 function (data) {
10566 vm.loading.channels = false;
10567 });
10482 10568
10483 vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
10484 function (data) {
10485 vm.loading.actions = false;
10486 });
10569 vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
10570 function (data) {
10571 vm.loading.actions = false;
10572 });
10487 10573
10488 vm.applications = applicationsNoIdResource.query({permission: 'view'},
10489 function (data) {
10490 vm.loading.applications = false;
10491 });
10574 vm.applications = applicationsNoIdResource.query({permission: 'view'},
10575 function (data) {
10576 vm.loading.applications = false;
10577 });
10492 10578
10493 var allOps = {
10494 'eq': 'Equal',
10495 'ne': 'Not equal',
10496 'ge': 'Greater or equal',
10497 'gt': 'Greater than',
10498 'le': 'Lesser or equal',
10499 'lt': 'Lesser than',
10500 'startswith': 'Starts with',
10501 'endswith': 'Ends with',
10502 'contains': 'Contains'
10503 };
10504
10505 var fieldOps = {};
10506 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
10507 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
10508 fieldOps['duration'] = ['ge', 'le'];
10509 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
10510 'contains'];
10511 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
10512 'contains'];
10513 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
10514 'contains'];
10515 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
10516 'contains'];
10517 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
10518
10519 var possibleFields = {
10520 '__AND__': 'All met (composite rule)',
10521 '__OR__': 'One met (composite rule)',
10522 '__NOT__': 'Not met (composite rule)',
10523 'http_status': 'HTTP Status',
10524 'duration': 'Request duration',
10525 'group:priority': 'Group -> Priority',
10526 'url_domain': 'Domain',
10527 'url_path': 'URL Path',
10528 'error': 'Error',
10529 'tags:server_name': 'Tag -> Server name',
10530 'group:occurences': 'Group -> Occurences'
10531 };
10532
10533 vm.ruleDefinitions = {
10534 fieldOps: fieldOps,
10535 allOps: allOps,
10536 possibleFields: possibleFields
10537 };
10579 var allOps = {
10580 'eq': 'Equal',
10581 'ne': 'Not equal',
10582 'ge': 'Greater or equal',
10583 'gt': 'Greater than',
10584 'le': 'Lesser or equal',
10585 'lt': 'Lesser than',
10586 'startswith': 'Starts with',
10587 'endswith': 'Ends with',
10588 'contains': 'Contains'
10589 };
10590
10591 var fieldOps = {};
10592 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
10593 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
10594 fieldOps['duration'] = ['ge', 'le'];
10595 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
10596 'contains'];
10597 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
10598 'contains'];
10599 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
10600 'contains'];
10601 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
10602 'contains'];
10603 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
10604
10605 var possibleFields = {
10606 '__AND__': 'All met (composite rule)',
10607 '__OR__': 'One met (composite rule)',
10608 '__NOT__': 'Not met (composite rule)',
10609 'http_status': 'HTTP Status',
10610 'duration': 'Request duration',
10611 'group:priority': 'Group -> Priority',
10612 'url_domain': 'Domain',
10613 'url_path': 'URL Path',
10614 'error': 'Error',
10615 'tags:server_name': 'Tag -> Server name',
10616 'group:occurences': 'Group -> Occurences'
10617 };
10538 10618
10619 vm.ruleDefinitions = {
10620 fieldOps: fieldOps,
10621 allOps: allOps,
10622 possibleFields: possibleFields
10623 };
10624 }
10539 10625 vm.addAction = function (channel) {
10540 10626
10541 10627 userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
10542 10628 vm.alertActions.push(data);
10543 10629 }, function (response) {
10544 10630 if (response.status == 422) {
10545 10631
10546 10632 }
10547 10633 });
10548 10634 };
10549 10635
10550 10636 vm.updateChannel = function (channel, subKey) {
10551 10637 var params = {
10552 10638 key: 'alert_channels',
10553 10639 channel_name: channel['channel_name'],
10554 10640 channel_value: channel['channel_value']
10555 10641 };
10556 10642 var toUpdate = {};
10557 10643 if (['daily_digest', 'send_alerts'].indexOf(subKey) !== -1) {
10558 10644 toUpdate[subKey] = !channel[subKey];
10559 10645 }
10560 10646 userSelfPropertyResource.update(params, toUpdate, function (data) {
10561 10647 _.extend(channel, data);
10562 10648 });
10563 10649 };
10564 10650
10565 10651 vm.removeChannel = function (channel) {
10566 10652
10567 10653 userSelfPropertyResource.delete({
10568 10654 key: 'alert_channels',
10569 10655 channel_name: channel.channel_name,
10570 10656 channel_value: channel.channel_value
10571 10657 }, function () {
10572 vm.alertChannels = _.filter(vm.alertChannels, function(item){
10658 vm.alertChannels = _.filter(vm.alertChannels, function (item) {
10573 10659 return item != channel;
10574 10660 });
10575 10661 });
10576 10662
10577 10663 }
10578 10664
10579 10665 }
10580 10666
10581 10667 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10582 10668 //
10583 10669 // Licensed under the Apache License, Version 2.0 (the "License");
10584 10670 // you may not use this file except in compliance with the License.
10585 10671 // You may obtain a copy of the License at
10586 10672 //
10587 10673 // http://www.apache.org/licenses/LICENSE-2.0
10588 10674 //
10589 10675 // Unless required by applicable law or agreed to in writing, software
10590 10676 // distributed under the License is distributed on an "AS IS" BASIS,
10591 10677 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10592 10678 // See the License for the specific language governing permissions and
10593 10679 // limitations under the License.
10594 10680
10595 10681 angular.module('appenlight.components.userAuthTokensView', [])
10596 10682 .component('userAuthTokensView', {
10597 10683 templateUrl: 'components/views/user-auth-tokens-view/user-auth-tokens-view.html',
10598 10684 controller: userAuthTokensViewController
10599 10685 });
10600 10686
10601 10687 userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
10602 10688
10603 10689 function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
10604 10690
10605 10691 var vm = this;
10606 vm.$state = $state;
10607 vm.loading = {tokens: true};
10608
10609 vm.expireOptions = AeConfig.timeOptions;
10692 vm.$onInit = function () {
10693 vm.$state = $state;
10694 vm.loading = {tokens: true};
10610 10695
10611 vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
10612 function (data) {
10613 vm.loading.tokens = false;
10614 });
10696 vm.expireOptions = AeConfig.timeOptions;
10615 10697
10698 vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
10699 function (data) {
10700 vm.loading.tokens = false;
10701 });
10702 }
10616 10703 vm.addToken = function () {
10617 10704 vm.loading.tokens = true;
10618 10705 userSelfPropertyResource.save({key: 'auth_tokens'},
10619 10706 vm.form,
10620 10707 function (data) {
10621 10708 vm.loading.tokens = false;
10622 10709 setServerValidation(vm.TokenForm);
10623 10710 vm.form = {};
10624 10711 vm.tokens.push(data);
10625 10712 }, function (response) {
10626 10713 vm.loading.tokens = false;
10627 10714 if (response.status == 422) {
10628 10715 setServerValidation(vm.TokenForm, response.data);
10629 10716 }
10630 10717 })
10631 10718 };
10632 10719
10633 10720 vm.removeToken = function (token) {
10634 10721 userSelfPropertyResource.delete({
10635 10722 key: 'auth_tokens',
10636 10723 token: token.token
10637 10724 },
10638 10725 function () {
10639 10726 var index = vm.tokens.indexOf(token);
10640 10727 if (index !== -1) {
10641 10728 vm.tokens.splice(index, 1);
10642 10729 }
10643 10730 })
10644 10731 }
10645 10732 }
10646 10733
10647 10734 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10648 10735 //
10649 10736 // Licensed under the Apache License, Version 2.0 (the "License");
10650 10737 // you may not use this file except in compliance with the License.
10651 10738 // You may obtain a copy of the License at
10652 10739 //
10653 10740 // http://www.apache.org/licenses/LICENSE-2.0
10654 10741 //
10655 10742 // Unless required by applicable law or agreed to in writing, software
10656 10743 // distributed under the License is distributed on an "AS IS" BASIS,
10657 10744 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10658 10745 // See the License for the specific language governing permissions and
10659 10746 // limitations under the License.
10660 10747
10661 10748 angular.module('appenlight.components.userIdentitiesView', [])
10662 10749 .component('userIdentitiesView', {
10663 10750 templateUrl: 'components/views/user-identities-view/user-identities-view.html',
10664 10751 controller: UserIdentitiesController
10665 10752 });
10666 10753
10667 10754 UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
10668 10755
10669 10756 function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
10670 10757
10671 10758 var vm = this;
10672 vm.$state = $state;
10673 vm.AeConfig = AeConfig;
10674 vm.loading = {identities: true};
10675
10676 vm.identities = userSelfPropertyResource.query(
10677 {key: 'external_identities'},
10678 function (data) {
10679 vm.loading.identities = false;
10680
10681 });
10759 vm.$onInit = function () {
10760 vm.$state = $state;
10761 vm.AeConfig = AeConfig;
10762 vm.loading = {identities: true};
10682 10763
10764 vm.identities = userSelfPropertyResource.query(
10765 {key: 'external_identities'},
10766 function (data) {
10767 vm.loading.identities = false;
10768
10769 });
10770 }
10683 10771 vm.removeProvider = function (provider) {
10684 10772
10685 10773 userSelfPropertyResource.delete(
10686 10774 {
10687 10775 key: 'external_identities',
10688 10776 provider: provider.provider,
10689 10777 id: provider.id
10690 10778 },
10691 10779 function (status) {
10692 if (status){
10780 if (status) {
10693 10781 vm.identities = _.filter(vm.identities, function (item) {
10694 10782 return item != provider
10695 10783 });
10696 10784 }
10697 10785
10698 10786 });
10699 10787 }
10700 10788 }
10701 10789
10702 10790 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10703 10791 //
10704 10792 // Licensed under the Apache License, Version 2.0 (the "License");
10705 10793 // you may not use this file except in compliance with the License.
10706 10794 // You may obtain a copy of the License at
10707 10795 //
10708 10796 // http://www.apache.org/licenses/LICENSE-2.0
10709 10797 //
10710 10798 // Unless required by applicable law or agreed to in writing, software
10711 10799 // distributed under the License is distributed on an "AS IS" BASIS,
10712 10800 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10713 10801 // See the License for the specific language governing permissions and
10714 10802 // limitations under the License.
10715 10803
10716 10804 angular.module('appenlight.components.userPasswordView', [])
10717 10805 .component('userPasswordView', {
10718 10806 templateUrl: 'components/views/user-password-view/user-password-view.html',
10719 10807 controller: UserPasswordViewController
10720 10808 });
10721 10809
10722 10810 UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
10723 10811
10724 10812 function UserPasswordViewController($state, userSelfPropertyResource) {
10725 10813
10726 10814 var vm = this;
10727 vm.$state = $state;
10728 vm.loading = {password: false};
10729 vm.form = {};
10730
10815 vm.$onInit = function () {
10816 vm.$state = $state;
10817 vm.loading = {password: false};
10818 vm.form = {};
10819 }
10731 10820 vm.updatePassword = function () {
10732 10821 vm.loading.password = true;
10733 10822
10734 10823 userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
10735 10824 vm.loading.password = false;
10736 10825 vm.form = {};
10737 10826 setServerValidation(vm.passwordForm);
10738 10827 }, function (response) {
10739 10828 if (response.status == 422) {
10740 10829
10741 10830 setServerValidation(vm.passwordForm, response.data);
10742 10831
10743 10832 }
10744 10833 vm.loading.password = false;
10745 10834 });
10746 10835 }
10747 10836 }
10748 10837
10749 10838 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10750 10839 //
10751 10840 // Licensed under the Apache License, Version 2.0 (the "License");
10752 10841 // you may not use this file except in compliance with the License.
10753 10842 // You may obtain a copy of the License at
10754 10843 //
10755 10844 // http://www.apache.org/licenses/LICENSE-2.0
10756 10845 //
10757 10846 // Unless required by applicable law or agreed to in writing, software
10758 10847 // distributed under the License is distributed on an "AS IS" BASIS,
10759 10848 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10760 10849 // See the License for the specific language governing permissions and
10761 10850 // limitations under the License.
10762 10851
10763 10852 angular.module('appenlight.components.userProfileView', [])
10764 10853 .component('userProfileView', {
10765 10854 templateUrl: 'components/views/user-profile-view/user-profile-view.html',
10766 10855 controller: UserProfileViewController
10767 10856 });
10768 10857
10769 10858 UserProfileViewController.$inject = ['$state', 'userSelfResource'];
10770 10859
10771 10860 function UserProfileViewController($state, userSelfResource) {
10772 10861
10773 10862 var vm = this;
10774 vm.$state = $state;
10775 vm.loading = {profile: true};
10776
10777 vm.user = userSelfResource.get(null, function (data) {
10778 vm.loading.profile = false;
10779
10780 });
10863 vm.$onInit = function () {
10864 vm.$state = $state;
10865 vm.loading = {profile: true};
10781 10866
10867 vm.user = userSelfResource.get(null, function (data) {
10868 vm.loading.profile = false;
10869
10870 });
10871 }
10782 10872 vm.updateProfile = function () {
10783 10873 vm.loading.profile = true;
10784 10874
10785 10875
10786 10876 vm.user.$update(null, function () {
10787 10877 vm.loading.profile = false;
10788 10878 setServerValidation(vm.profileForm);
10789 10879 }, function (response) {
10790 10880 if (response.status == 422) {
10791 10881 setServerValidation(vm.profileForm, response.data);
10792 10882 }
10793 10883 vm.loading.profile = false;
10794 10884 });
10795 10885 }
10796 10886 }
10797 10887
10798 10888 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10799 10889 //
10800 10890 // Licensed under the Apache License, Version 2.0 (the "License");
10801 10891 // you may not use this file except in compliance with the License.
10802 10892 // You may obtain a copy of the License at
10803 10893 //
10804 10894 // http://www.apache.org/licenses/LICENSE-2.0
10805 10895 //
10806 10896 // Unless required by applicable law or agreed to in writing, software
10807 10897 // distributed under the License is distributed on an "AS IS" BASIS,
10808 10898 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10809 10899 // See the License for the specific language governing permissions and
10810 10900 // limitations under the License.
10811 10901
10812 10902 var aeconfig = angular.module('appenlight.config', []);
10813 10903 aeconfig.factory('AeConfig', function () {
10814 10904 var obj = {};
10815 10905 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
10816 10906 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
10817 10907 obj.plugins = decodeEncodedJSON(window.AE.plugins);
10818 10908 obj.topNav = {
10819 10909 menuDashboardsItems: [],
10820 10910 menuReportsItems: [],
10821 10911 menuLogsItems: [],
10822 10912 menuSettingsItems: [],
10823 10913 menuAdminItems: []
10824 10914 };
10825 10915 obj.settingsNav = {
10826 10916 menuApplicationsItems: [],
10827 10917 menuUserSettingsItems: [],
10828 10918 menuNotificationsItems: []
10829 10919 };
10830 10920 obj.adminNav = {
10831 10921 menuUsersItems: [],
10832 10922 menuResourcesItems: [],
10833 10923 menuSystemItems: []
10834 10924 };
10835 10925 obj.ws_url = window.AE.ws_url;
10836 10926 obj.urls = window.AE.urls;
10837 10927 // set keys on values because we wont be able to retrieve them everywhere
10838 10928 for (var key in obj.timeOptions) {
10839 10929 obj.timeOptions[key]['key'] = key;
10840 10930 }
10841 10931 console.info('config', obj);
10842 10932 return obj;
10843 10933 });
10844 10934
10845 10935 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10846 10936 //
10847 10937 // Licensed under the Apache License, Version 2.0 (the "License");
10848 10938 // you may not use this file except in compliance with the License.
10849 10939 // You may obtain a copy of the License at
10850 10940 //
10851 10941 // http://www.apache.org/licenses/LICENSE-2.0
10852 10942 //
10853 10943 // Unless required by applicable law or agreed to in writing, software
10854 10944 // distributed under the License is distributed on an "AS IS" BASIS,
10855 10945 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10856 10946 // See the License for the specific language governing permissions and
10857 10947 // limitations under the License.
10858 10948
10859 10949 angular.module('appenlight.controllers')
10860 10950 .controller('BitbucketIntegrationCtrl', BitbucketIntegrationCtrl)
10861 10951
10862 10952 BitbucketIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
10863 10953
10864 10954 function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
10865 10955 var vm = this;
10866 vm.loading = true;
10867 vm.assignees = [];
10868 vm.report = report;
10869 vm.integrationName = integrationName;
10870 vm.statuses = [];
10871 vm.priorities = [];
10872 vm.error_messages = [];
10873 vm.form = {
10874 content: '\n' +
10875 'Issue created for report: ' +
10876 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
10877 };
10878
10956 vm.$onInit = function () {
10957 vm.loading = true;
10958 vm.assignees = [];
10959 vm.report = report;
10960 vm.integrationName = integrationName;
10961 vm.statuses = [];
10962 vm.priorities = [];
10963 vm.error_messages = [];
10964 vm.form = {
10965 content: '\n' +
10966 'Issue created for report: ' +
10967 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
10968 };
10969 vm.fetchInfo();
10970 }
10879 10971 vm.fetchInfo = function () {
10880 10972 integrationResource.get({
10881 10973 resourceId: vm.report.resource_id,
10882 10974 action: 'info',
10883 10975 integration: vm.integrationName
10884 10976 }, null,
10885 10977 function (data) {
10886 10978 vm.loading = false;
10887 10979 if (data.error_messages) {
10888 10980 vm.error_messages = data.error_messages;
10889 10981 }
10890 10982 vm.assignees = data.assignees;
10891 10983 vm.priorities = data.priorities;
10892 10984 vm.form.responsible = vm.assignees[0];
10893 10985 vm.form.priority = vm.priorities[0];
10894 10986 }, function (error_data) {
10895 10987 if (error_data.data.error_messages) {
10896 10988 vm.error_messages = error_data.data.error_messages;
10897 }
10898 else {
10989 } else {
10899 10990 vm.error_messages = ['There was a problem processing your request'];
10900 10991 }
10901 10992 });
10902 10993 };
10903 10994 vm.ok = function () {
10904 10995 vm.loading = true;
10905 10996 vm.form.group_id = vm.report.group_id;
10906 10997 integrationResource.save({
10907 10998 resourceId: vm.report.resource_id,
10908 10999 action: 'create-issue',
10909 11000 integration: vm.integrationName
10910 11001 }, vm.form,
10911 11002 function (data) {
10912 11003 vm.loading = false;
10913 11004 if (data.error_messages) {
10914 11005 vm.error_messages = data.error_messages;
10915 11006 }
10916 11007 if (data !== false) {
10917 11008 $uibModalInstance.dismiss('success');
10918 11009 }
10919 11010 }, function (error_data) {
10920 11011 if (error_data.data.error_messages) {
10921 11012 vm.error_messages = error_data.data.error_messages;
10922 }
10923 else {
11013 } else {
10924 11014 vm.error_messages = ['There was a problem processing your request'];
10925 11015 }
10926 11016 });
10927 11017 };
10928 11018 vm.cancel = function () {
10929 11019 $uibModalInstance.dismiss('cancel');
10930 11020 };
10931 vm.fetchInfo();
10932 11021 }
10933 11022
10934 11023 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
10935 11024 //
10936 11025 // Licensed under the Apache License, Version 2.0 (the "License");
10937 11026 // you may not use this file except in compliance with the License.
10938 11027 // You may obtain a copy of the License at
10939 11028 //
10940 11029 // http://www.apache.org/licenses/LICENSE-2.0
10941 11030 //
10942 11031 // Unless required by applicable law or agreed to in writing, software
10943 11032 // distributed under the License is distributed on an "AS IS" BASIS,
10944 11033 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10945 11034 // See the License for the specific language governing permissions and
10946 11035 // limitations under the License.
10947 11036
10948 11037 angular.module('appenlight.controllers')
10949 11038 .controller('GithubIntegrationCtrl', GithubIntegrationCtrl);
10950 11039
10951 11040 GithubIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
10952 11041
10953 11042 function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
10954 11043 var vm = this;
10955 vm.loading = true;
10956 vm.assignees = [];
10957 vm.report = report;
10958 vm.integrationName = integrationName;
10959 vm.statuses = [];
10960 vm.assignees = [];
10961 vm.error_messages = [];
10962 vm.form = {
10963 content: '\n' +
10964 'Issue created for report: ' +
10965 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
10966 };
10967
11044 vm.$onInit = function () {
11045 vm.loading = true;
11046 vm.assignees = [];
11047 vm.report = report;
11048 vm.integrationName = integrationName;
11049 vm.statuses = [];
11050 vm.assignees = [];
11051 vm.error_messages = [];
11052 vm.form = {
11053 content: '\n' +
11054 'Issue created for report: ' +
11055 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
11056 };
11057 vm.fetchInfo();
11058 }
10968 11059 vm.fetchInfo = function () {
10969 11060 integrationResource.get({
10970 11061 resourceId: vm.report.resource_id,
10971 11062 action: 'info',
10972 11063 integration: vm.integrationName
10973 11064 }, null,
10974 11065 function (data) {
10975 11066 vm.loading = false;
10976 11067 if (data.error_messages) {
10977 11068 vm.error_messages = data.error_messages;
10978 }
10979 else {
11069 } else {
10980 11070 vm.assignees = data.assignees;
10981 11071 vm.statuses = data.statuses;
10982 11072 vm.form.responsible = vm.assignees[0];
10983 11073 vm.form.status = vm.statuses[0];
10984 11074 }
10985 11075 }, function (error_data) {
10986 11076 if (error_data.data.error_messages) {
10987 11077 vm.error_messages = error_data.data.error_messages;
10988 }
10989 else {
11078 } else {
10990 11079 vm.error_messages = ['There was a problem processing your request'];
10991 11080 }
10992 11081 });
10993 11082 };
10994 11083 vm.ok = function () {
10995 11084 vm.loading = true;
10996 11085 vm.form.group_id = vm.report.group_id;
10997 11086 integrationResource.save({
10998 11087 resourceId: vm.report.resource_id,
10999 11088 action: 'create-issue',
11000 11089 integration: vm.integrationName
11001 11090 }, vm.form,
11002 11091 function (data) {
11003 11092 vm.loading = false;
11004 11093 if (data.error_messages) {
11005 11094 vm.error_messages = data.error_messages;
11006 }
11007 else {
11095 } else {
11008 11096 $uibModalInstance.dismiss('success');
11009 11097 }
11010 11098 }, function (error_data) {
11011 11099 if (error_data.data.error_messages) {
11012 11100 vm.error_messages = error_data.data.error_messages;
11013 }
11014 else {
11101 } else {
11015 11102 vm.error_messages = ['There was a problem processing your request'];
11016 11103 }
11017 11104 });
11018 11105 };
11019 11106 vm.cancel = function () {
11020 11107 $uibModalInstance.dismiss('cancel');
11021 11108 };
11022 vm.fetchInfo();
11023 11109 }
11024 11110
11025 11111 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11026 11112 //
11027 11113 // Licensed under the Apache License, Version 2.0 (the "License");
11028 11114 // you may not use this file except in compliance with the License.
11029 11115 // You may obtain a copy of the License at
11030 11116 //
11031 11117 // http://www.apache.org/licenses/LICENSE-2.0
11032 11118 //
11033 11119 // Unless required by applicable law or agreed to in writing, software
11034 11120 // distributed under the License is distributed on an "AS IS" BASIS,
11035 11121 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11036 11122 // See the License for the specific language governing permissions and
11037 11123 // limitations under the License.
11038 11124
11039 11125 angular.module('appenlight.controllers')
11040 11126 .controller('JiraIntegrationCtrl', JiraIntegrationCtrl)
11041 11127
11042 11128 JiraIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
11043 11129
11044 11130 function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
11045 11131 var vm = this;
11046 vm.loading = true;
11047 vm.assignees = [];
11048 vm.report = report;
11049 vm.integrationName = integrationName;
11050 vm.statuses = [];
11051 vm.priorities = [];
11052 vm.issue_types = [];
11053 vm.error_messages = [];
11054 vm.form = {
11055 content: '\n' +
11056 'Issue created for report: ' +
11057 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
11058 };
11059
11132 vm.$onInit = function () {
11133 vm.loading = true;
11134 vm.assignees = [];
11135 vm.report = report;
11136 vm.integrationName = integrationName;
11137 vm.statuses = [];
11138 vm.priorities = [];
11139 vm.issue_types = [];
11140 vm.error_messages = [];
11141 vm.form = {
11142 content: '\n' +
11143 'Issue created for report: ' +
11144 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
11145 };
11146 vm.fetchInfo();
11147 }
11060 11148 vm.fetchInfo = function () {
11061 11149 integrationResource.get({
11062 11150 resourceId: vm.report.resource_id,
11063 11151 action: 'info',
11064 11152 integration: vm.integrationName
11065 11153 }, null,
11066 11154 function (data) {
11067 11155 vm.loading = false;
11068 11156 if (data.error_messages) {
11069 11157 vm.error_messages = data.error_messages;
11070 11158 }
11071 11159 vm.assignees = data.assignees;
11072 11160 vm.priorities = data.priorities;
11073 11161 vm.issue_types = data.issue_types;
11074 11162 vm.form.issue_type = vm.issue_types[0];
11075 11163 vm.form.responsible = vm.assignees[0];
11076 11164 vm.form.priority = vm.priorities[0];
11077 11165 }, function (error_data) {
11078 11166
11079 11167 if (error_data.data.error_messages) {
11080 11168 vm.error_messages = error_data.data.error_messages;
11081 }
11082 else {
11169 } else {
11083 11170 vm.error_messages = ['There was a problem processing your request'];
11084 11171 }
11085 11172 });
11086 11173 };
11087 11174 vm.ok = function () {
11088 11175 vm.loading = true;
11089 11176 vm.form.group_id = vm.report.group_id;
11090 11177 integrationResource.save({
11091 11178 resourceId: vm.report.resource_id,
11092 11179 action: 'create-issue',
11093 11180 integration: vm.integrationName
11094 11181 }, vm.form,
11095 11182 function (data) {
11096 11183 vm.loading = false;
11097 11184 if (data.error_messages) {
11098 11185 vm.error_messages = data.error_messages;
11099 11186 }
11100 11187 if (data !== false) {
11101 11188 $uibModalInstance.dismiss('success');
11102 11189 }
11103 11190 }, function (error_data) {
11104 11191 if (error_data.data.error_messages) {
11105 11192 vm.error_messages = error_data.data.error_messages;
11106 }
11107 else {
11193 } else {
11108 11194 vm.error_messages = ['There was a problem processing your request'];
11109 11195 }
11110 11196 });
11111 11197 };
11112 11198 vm.cancel = function () {
11113 11199 $uibModalInstance.dismiss('cancel');
11114 11200 };
11115 vm.fetchInfo();
11116 11201 }
11117 11202
11118 11203 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11119 11204 //
11120 11205 // Licensed under the Apache License, Version 2.0 (the "License");
11121 11206 // you may not use this file except in compliance with the License.
11122 11207 // You may obtain a copy of the License at
11123 11208 //
11124 11209 // http://www.apache.org/licenses/LICENSE-2.0
11125 11210 //
11126 11211 // Unless required by applicable law or agreed to in writing, software
11127 11212 // distributed under the License is distributed on an "AS IS" BASIS,
11128 11213 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11129 11214 // See the License for the specific language governing permissions and
11130 11215 // limitations under the License.
11131 11216
11132 11217 angular.module('appenlight.controllers').controller('AssignReportCtrl', AssignReportCtrl);
11133 11218 AssignReportCtrl.$inject = ['$uibModalInstance', 'reportGroupPropertyResource', 'report'];
11134 11219
11135 11220 function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report) {
11136 11221 var vm = this;
11137 vm.loading = true;
11138 vm.assignedUsers = [];
11139 vm.unAssignedUsers = [];
11140 vm.report = report;
11141 vm.fetchAssignments = function () {
11142 reportGroupPropertyResource.get({
11143 groupId: vm.report.group_id,
11144 key: 'assigned_users'
11145 }, null,
11146 function (data) {
11147 vm.assignedUsers = data.assigned;
11148 vm.unAssignedUsers = data.unassigned;
11149 vm.loading = false;
11150 });
11222 vm.$onInit = function () {
11223 vm.loading = true;
11224 vm.assignedUsers = [];
11225 vm.unAssignedUsers = [];
11226 vm.report = report;
11227 vm.fetchAssignments = function () {
11228 reportGroupPropertyResource.get({
11229 groupId: vm.report.group_id,
11230 key: 'assigned_users'
11231 }, null,
11232 function (data) {
11233 vm.assignedUsers = data.assigned;
11234 vm.unAssignedUsers = data.unassigned;
11235 vm.loading = false;
11236 });
11237 }
11238 vm.fetchAssignments();
11151 11239 }
11152
11153 11240 vm.reassignUser = function (user) {
11154 11241 var is_assigned = vm.assignedUsers.indexOf(user);
11155 11242 if (is_assigned != -1) {
11156 11243 vm.assignedUsers.splice(is_assigned, 1);
11157 11244 vm.unAssignedUsers.push(user);
11158 11245 return
11159 11246 }
11160 11247 var is_unassigned = vm.unAssignedUsers.indexOf(user);
11161 11248 if (is_unassigned != -1) {
11162 11249 vm.unAssignedUsers.splice(is_unassigned, 1);
11163 11250 vm.assignedUsers.push(user);
11164 11251 return
11165 11252 }
11166 11253 }
11167 11254 vm.updateAssignments = function () {
11168 11255 var post = {'unassigned': [], 'assigned': []};
11169 11256 _.each(vm.assignedUsers, function (u) {
11170 11257 post['assigned'].push(u.user_name)
11171 11258 });
11172 11259 _.each(vm.unAssignedUsers, function (u) {
11173 11260 post['unassigned'].push(u.user_name)
11174 11261 });
11175 11262 vm.loading = true;
11176 11263 reportGroupPropertyResource.update({
11177 11264 groupId: vm.report.group_id,
11178 11265 key: 'assigned_users'
11179 11266 }, post,
11180 11267 function (data) {
11181 11268 vm.loading = false;
11182 11269 $uibModalInstance.close(vm.report);
11183 11270 });
11184 11271 };
11185 11272
11186 11273
11187 11274 vm.ok = function () {
11188 11275 vm.updateAssignments();
11189 11276 };
11190 11277
11191 11278 vm.cancel = function () {
11192 11279 $uibModalInstance.dismiss('cancel');
11193 11280 };
11194
11195 vm.fetchAssignments();
11196
11197 11281 }
11198 11282
11199 11283 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11200 11284 //
11201 11285 // Licensed under the Apache License, Version 2.0 (the "License");
11202 11286 // you may not use this file except in compliance with the License.
11203 11287 // You may obtain a copy of the License at
11204 11288 //
11205 11289 // http://www.apache.org/licenses/LICENSE-2.0
11206 11290 //
11207 11291 // Unless required by applicable law or agreed to in writing, software
11208 11292 // distributed under the License is distributed on an "AS IS" BASIS,
11209 11293 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11210 11294 // See the License for the specific language governing permissions and
11211 11295 // limitations under the License.
11212 11296
11213 11297 // This code is inspired by https://github.com/jettro/c3-angular-sample/tree/master/js
11214 11298 // License is MIT
11215 11299
11216 11300
11217 11301 angular.module('appenlight.directives.c3chart', [])
11218 11302 .controller('ChartCtrl', ['$scope', '$timeout', function ($scope, $timeout) {
11219 11303 $scope.chart = null;
11220 11304 this.showGraph = function () {
11221 11305 var config = angular.copy($scope.config);
11222 11306 var firstLoad = true;
11223 11307 config.bindto = "#" + $scope.domid;
11224 11308 var originalXTickCount = null;
11225 11309 if ($scope.data && $scope.config) {
11226 11310 if (!_.isEmpty($scope.data)) {
11227 11311 _.extend(config.data, angular.copy($scope.data));
11228 11312 }
11229 11313
11230 11314 config.onresized = function () {
11231 11315 if (this.currentWidth < 400){
11232 11316 $scope.chart.internal.config.axis_x_tick_culling_max = 3;
11233 11317 }
11234 11318 else if (this.currentWidth < 600){
11235 11319 $scope.chart.internal.config.axis_x_tick_culling_max = 5;
11236 11320 }
11237 11321 else{
11238 11322 $scope.chart.internal.config.axis_x_tick_culling_max = originalXTickCount;
11239 11323 }
11240 11324 $scope.chart.flush();
11241 11325 };
11242 11326
11243 11327
11244 11328 $scope.chart = c3.generate(config);
11245 11329 originalXTickCount = $scope.chart.internal.config.axis_x_tick_culling_max;
11246 11330 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11247 11331 }
11248 11332
11249 11333 if ($scope.update) {
11250 11334
11251 11335 $scope.$watch('data', function () {
11252 11336 if (!firstLoad) {
11253 11337
11254 11338 $scope.chart.load(angular.copy($scope.data), {unload: true});
11255 11339 if (typeof $scope.data.groups != 'undefined') {
11256 11340
11257 11341 $scope.chart.groups($scope.data.groups);
11258 11342 }
11259 11343 if (typeof $scope.data.names != 'undefined') {
11260 11344
11261 11345 $scope.chart.data.names($scope.data.names);
11262 11346 }
11263 11347 $scope.chart.flush();
11264 11348 }
11265 11349 }, true);
11266 11350 }
11267 11351 $scope.$watch('config.regions', function (newValue, oldValue) {
11268 11352 if (newValue === oldValue) {
11269 11353 return
11270 11354 }
11271 11355 if (typeof $scope.config.regions != 'undefined') {
11272 11356
11273 11357 $scope.chart.regions($scope.config.regions);
11274 11358 }
11275 11359 });
11276 11360
11277 11361 firstLoad = false;
11278 11362 $scope.$watch('resizetrigger', function (newValue, oldValue) {
11279 11363 if (newValue !== oldValue) {
11280 11364 $timeout(function () {
11281 11365 $scope.chart.resize();
11282 11366 $scope.chart.internal.config.onresized.call($scope.chart.internal);
11283 11367 });
11284 11368 }
11285 11369 });
11286 11370 };
11287 11371 }])
11288 11372 .directive('c3chart', function ($timeout) {
11289 11373 var chartLinker = function (scope, element, attrs, chartCtrl) {
11290 11374 // Trick to wait for all rendering of the DOM to be finished.
11291 11375 // then we can tell c3js to "connect" to our dom node
11292 11376 $timeout(function () {
11293 11377 chartCtrl.showGraph()
11294 11378 });
11295 11379
11296 11380 scope.$on("$destroy", function () {
11297 11381 if (scope.chart !== null) {
11298 11382 scope.chart = scope.chart.destroy();
11299 11383 delete element;
11300 11384 delete scope.chart;
11301 11385 }
11302 11386 }
11303 11387 );
11304 11388 };
11305 11389 return {
11306 11390 "restrict": "E",
11307 11391 "controller": "ChartCtrl",
11308 11392 "scope": {
11309 11393 "domid": "@domid",
11310 11394 "config": "=config",
11311 11395 "data": "=data",
11312 11396 "resizetrigger": "=resizetrigger",
11313 11397 "update": "=update"
11314 11398 },
11315 11399 "template": "<div id='{{domid}}' class='chart'></div>",
11316 11400 "replace": true,
11317 11401 "link": chartLinker
11318 11402 }
11319 11403 });
11320 11404
11321 11405 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11322 11406 //
11323 11407 // Licensed under the Apache License, Version 2.0 (the "License");
11324 11408 // you may not use this file except in compliance with the License.
11325 11409 // You may obtain a copy of the License at
11326 11410 //
11327 11411 // http://www.apache.org/licenses/LICENSE-2.0
11328 11412 //
11329 11413 // Unless required by applicable law or agreed to in writing, software
11330 11414 // distributed under the License is distributed on an "AS IS" BASIS,
11331 11415 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11332 11416 // See the License for the specific language governing permissions and
11333 11417 // limitations under the License.
11334 11418
11335 11419 angular.module('appenlight.directives.confirmValidate', []).
11336 11420 directive('confirmValidate', [function () {
11337 11421 return {
11338 11422 restrict: 'A',
11339 11423 require: 'ngModel',
11340 11424 link: function ($scope, elem, attrs, ngModel) {
11341 11425 ngModel.$validators.confirm = function (modelValue, viewValue) {
11342 11426 var value = modelValue || viewValue;
11343 11427
11344 11428 if (value.toLowerCase() == 'confirm') {
11345 11429 return true;
11346 11430 }
11347 11431 return false;
11348 11432 }
11349 11433 }
11350 11434 }
11351 11435 }])
11352 11436
11353 11437 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11354 11438 //
11355 11439 // Licensed under the Apache License, Version 2.0 (the "License");
11356 11440 // you may not use this file except in compliance with the License.
11357 11441 // You may obtain a copy of the License at
11358 11442 //
11359 11443 // http://www.apache.org/licenses/LICENSE-2.0
11360 11444 //
11361 11445 // Unless required by applicable law or agreed to in writing, software
11362 11446 // distributed under the License is distributed on an "AS IS" BASIS,
11363 11447 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11364 11448 // See the License for the specific language governing permissions and
11365 11449 // limitations under the License.
11366 11450
11367 11451 angular.module('appenlight.directives.focus', []).directive('focus', function () {
11368 11452 return function (scope, element, attrs) {
11369 11453 attrs.$observe('focus', function (newValue) {
11370 11454 newValue === 'true' && element[0].focus();
11371 11455 });
11372 11456 }
11373 11457 });
11374 11458
11375 11459 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11376 11460 //
11377 11461 // Licensed under the Apache License, Version 2.0 (the "License");
11378 11462 // you may not use this file except in compliance with the License.
11379 11463 // You may obtain a copy of the License at
11380 11464 //
11381 11465 // http://www.apache.org/licenses/LICENSE-2.0
11382 11466 //
11383 11467 // Unless required by applicable law or agreed to in writing, software
11384 11468 // distributed under the License is distributed on an "AS IS" BASIS,
11385 11469 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11386 11470 // See the License for the specific language governing permissions and
11387 11471 // limitations under the License.
11388 11472
11389 11473 angular.module('appenlight.directives.formErrors', []).
11390 11474 directive('formErrors', function() {
11391 11475 return {
11392 11476 scope: {
11393 11477 errors: '='
11394 11478 },
11395 11479 template: '<div ng-repeat="errorMessage in errors"><div class="form-error alert alert-error">{{ errorMessage }}</div></div>'
11396 11480 }
11397 11481 })
11398 11482
11399 11483 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11400 11484 //
11401 11485 // Licensed under the Apache License, Version 2.0 (the "License");
11402 11486 // you may not use this file except in compliance with the License.
11403 11487 // You may obtain a copy of the License at
11404 11488 //
11405 11489 // http://www.apache.org/licenses/LICENSE-2.0
11406 11490 //
11407 11491 // Unless required by applicable law or agreed to in writing, software
11408 11492 // distributed under the License is distributed on an "AS IS" BASIS,
11409 11493 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11410 11494 // See the License for the specific language governing permissions and
11411 11495 // limitations under the License.
11412 11496
11413 11497 angular.module('appenlight.directives.humanFormat', []).
11414 11498 directive('humanFormat', [function () {
11415 11499 /* json inspector */
11416 11500 return {
11417 11501 restrict: "A",
11418 11502 scope: {
11419 11503 vars: '=',
11420 11504 },
11421 11505 "link": function (scope, element, attrs) {
11422 11506 scope.$watch('vars', function (newValue, oldValue, scope) {
11423 11507 element.empty();
11424 11508 element.append(JsonHuman.format(scope.vars));
11425 11509 });
11426 11510
11427 11511 }
11428 11512 }
11429 11513 }])
11430 11514
11431 11515 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11432 11516 //
11433 11517 // Licensed under the Apache License, Version 2.0 (the "License");
11434 11518 // you may not use this file except in compliance with the License.
11435 11519 // You may obtain a copy of the License at
11436 11520 //
11437 11521 // http://www.apache.org/licenses/LICENSE-2.0
11438 11522 //
11439 11523 // Unless required by applicable law or agreed to in writing, software
11440 11524 // distributed under the License is distributed on an "AS IS" BASIS,
11441 11525 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11442 11526 // See the License for the specific language governing permissions and
11443 11527 // limitations under the License.
11444 11528
11445 11529 angular.module('appenlight.directives.isoToRelativeTime', []).
11446 11530 directive('isoToRelativeTime', function () {
11447 11531 return {
11448 11532 "restrict": "E",
11449 11533 scope: {
11450 11534 time: '@'
11451 11535 },
11452 11536 "link": function (scope, element) {
11453 11537 scope.$watch('time', function(newValue, oldValue, scope){
11454 11538 element.empty();
11455 11539 element.html(moment.utc(newValue).fromNow());
11456 11540 });
11457 11541 }
11458 11542 }
11459 11543 })
11460 11544
11461 11545 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11462 11546 //
11463 11547 // Licensed under the Apache License, Version 2.0 (the "License");
11464 11548 // you may not use this file except in compliance with the License.
11465 11549 // You may obtain a copy of the License at
11466 11550 //
11467 11551 // http://www.apache.org/licenses/LICENSE-2.0
11468 11552 //
11469 11553 // Unless required by applicable law or agreed to in writing, software
11470 11554 // distributed under the License is distributed on an "AS IS" BASIS,
11471 11555 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11472 11556 // See the License for the specific language governing permissions and
11473 11557 // limitations under the License.
11474 11558
11475 11559 angular.module('appenlight.controllers')
11476 11560 .controller('ApplicationPermissionsController', ApplicationPermissionsController);
11477 11561
11478 11562 ApplicationPermissionsController.$inject = ['sectionViewResource',
11479 11563 'applicationsPropertyResource', 'groupsResource']
11480 11564
11481 11565
11482 11566 function ApplicationPermissionsController(sectionViewResource, applicationsPropertyResource , groupsResource) {
11483 11567 var vm = this;
11484 vm.form = {
11485 autocompleteUser: '',
11486 selectedGroup: null,
11487 selectedUserPermissions: {},
11488 selectedGroupPermissions: {}
11489 }
11490 vm.possibleGroups = groupsResource.query(null, function(){
11491 if (vm.possibleGroups.length > 0){
11492 vm.form.selectedGroup = vm.possibleGroups[0].id;
11493 }
11494 });
11495
11496 vm.possibleUsers = [];
11497 _.each(vm.resource.possible_permissions, function (perm) {
11498 vm.form.selectedUserPermissions[perm] = false;
11499 vm.form.selectedGroupPermissions[perm] = false;
11500 });
11501
11502 /**
11503 * Converts the permission list into {user, permission_list objects}
11504 * for rendering in templates
11505 * **/
11506 var tmpObj = {
11507 user: {},
11508 group: {}
11509 };
11510 _.each(vm.currentPermissions, function (perm) {
11568 vm.$onInit = function () {
11569 vm.form = {
11570 autocompleteUser: '',
11571 selectedGroup: null,
11572 selectedUserPermissions: {},
11573 selectedGroupPermissions: {}
11574 }
11575 vm.possibleGroups = groupsResource.query(null, function () {
11576 if (vm.possibleGroups.length > 0) {
11577 vm.form.selectedGroup = vm.possibleGroups[0].id;
11578 }
11579 });
11511 11580
11512 if (perm.type == 'user') {
11513 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
11514 tmpObj[perm.type][perm.user_name] = {
11515 self: perm,
11516 permissions: []
11581 vm.possibleUsers = [];
11582 _.each(vm.resource.possible_permissions, function (perm) {
11583 vm.form.selectedUserPermissions[perm] = false;
11584 vm.form.selectedGroupPermissions[perm] = false;
11585 });
11586
11587 /**
11588 * Converts the permission list into {user, permission_list objects}
11589 * for rendering in templates
11590 * **/
11591 var tmpObj = {
11592 user: {},
11593 group: {}
11594 };
11595 _.each(vm.currentPermissions, function (perm) {
11596
11597 if (perm.type == 'user') {
11598 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
11599 tmpObj[perm.type][perm.user_name] = {
11600 self: perm,
11601 permissions: []
11602 }
11517 11603 }
11518 }
11519 if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
11520 tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
11521 }
11522 }
11523 else {
11524 if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
11525 tmpObj[perm.type][perm.group_name] = {
11526 self: perm,
11527 permissions: []
11604 if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
11605 tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
11606 }
11607 } else {
11608 if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
11609 tmpObj[perm.type][perm.group_name] = {
11610 self: perm,
11611 permissions: []
11612 }
11613 }
11614 if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
11615 tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
11528 11616 }
11529 }
11530 if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
11531 tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
11532 }
11533 11617
11534 }
11535 });
11536 vm.currentPermissions = {
11537 user: _.values(tmpObj.user),
11538 group: _.values(tmpObj.group),
11539 };
11618 }
11619 });
11620 vm.currentPermissions = {
11621 user: _.values(tmpObj.user),
11622 group: _.values(tmpObj.group),
11623 };
11624
11625 }
11540 11626
11541
11542 11627
11543 11628 vm.searchUsers = function (searchPhrase) {
11544 11629
11545 11630 vm.searchingUsers = true;
11546 11631 return sectionViewResource.query({
11547 11632 section: 'users_section',
11548 11633 view: 'search_users',
11549 11634 'user_name': searchPhrase
11550 11635 }).$promise.then(function (data) {
11551 11636 vm.searchingUsers = false;
11552 11637 return _.map(data, function (item) {
11553 11638 return item;
11554 11639 });
11555 11640 });
11556 11641 };
11557 11642
11558 11643
11559 11644 vm.setGroupPermission = function(){
11560 11645 var POSTObj = {
11561 11646 'group_id': vm.form.selectedGroup,
11562 11647 'permissions': []
11563 11648 };
11564 11649 for (var key in vm.form.selectedGroupPermissions) {
11565 11650 if (vm.form.selectedGroupPermissions[key]) {
11566 11651 POSTObj.permissions.push(key)
11567 11652 }
11568 11653 }
11569 11654 applicationsPropertyResource.save({
11570 11655 key: 'group_permissions',
11571 11656 resourceId: vm.resource.resource_id
11572 11657 }, POSTObj,
11573 11658 function (data) {
11574 11659 var found_row = false;
11575 11660 _.each(vm.currentPermissions.group, function (perm) {
11576 11661 if (perm.self.group_id == data.group.id) {
11577 11662 perm['permissions'] = data['permissions'];
11578 11663 found_row = true;
11579 11664 }
11580 11665 });
11581 11666 if (!found_row) {
11582 11667 data.self = data.group;
11583 11668 // normalize data format
11584 11669 data.self.group_id = data.self.id;
11585 11670 vm.currentPermissions.group.push(data);
11586 11671 }
11587 11672 });
11588 11673
11589 11674 }
11590 11675
11591 11676
11592 11677 vm.setUserPermission = function () {
11593 11678
11594 11679 var POSTObj = {
11595 11680 'user_name': vm.form.autocompleteUser,
11596 11681 'permissions': []
11597 11682 };
11598 11683 for (var key in vm.form.selectedUserPermissions) {
11599 11684 if (vm.form.selectedUserPermissions[key]) {
11600 11685 POSTObj.permissions.push(key)
11601 11686 }
11602 11687 }
11603 11688 applicationsPropertyResource.save({
11604 11689 key: 'user_permissions',
11605 11690 resourceId: vm.resource.resource_id
11606 11691 }, POSTObj,
11607 11692 function (data) {
11608 11693 var found_row = false;
11609 11694 _.each(vm.currentPermissions.user, function (perm) {
11610 11695 if (perm.self.user_name == data['user_name']) {
11611 11696 perm['permissions'] = data['permissions'];
11612 11697 found_row = true;
11613 11698 }
11614 11699 });
11615 11700 if (!found_row) {
11616 11701 data.self = data;
11617 11702 vm.currentPermissions.user.push(data);
11618 11703 }
11619 11704 });
11620 11705 }
11621 11706
11622 11707 vm.removeUserPermission = function (perm_name, curr_perm) {
11623 11708
11624 11709
11625 11710 var POSTObj = {
11626 11711 key: 'user_permissions',
11627 11712 user_name: curr_perm.self.user_name,
11628 11713 permissions: [perm_name],
11629 11714 resourceId: vm.resource.resource_id
11630 11715 }
11631 11716 applicationsPropertyResource.delete(POSTObj, function (data) {
11632 11717 _.each(vm.currentPermissions.user, function (perm) {
11633 11718 if (perm.self.user_name == data['user_name']) {
11634 11719 perm['permissions'] = data['permissions']
11635 11720 }
11636 11721 });
11637 11722 });
11638 11723 }
11639 11724
11640 11725 vm.removeGroupPermission = function (perm_name, curr_perm) {
11641 11726
11642 11727 var POSTObj = {
11643 11728 key: 'group_permissions',
11644 11729 group_id: curr_perm.self.group_id,
11645 11730 permissions: [perm_name],
11646 11731 resourceId: vm.resource.resource_id
11647 11732 }
11648 11733 applicationsPropertyResource.delete(POSTObj, function (data) {
11649 11734 _.each(vm.currentPermissions.group, function (perm) {
11650 11735 if (perm.self.group_id == data.group.id) {
11651 11736 perm['permissions'] = data['permissions']
11652 11737 }
11653 11738 });
11654 11739 });
11655 11740 }
11656 11741 }
11657 11742
11658 11743 angular.module('appenlight.directives.permissionsForm',[])
11659 11744 .directive('permissionsForm', function () {
11660 11745 return {
11661 11746 "restrict": "E",
11662 11747 "controller": "ApplicationPermissionsController",
11663 11748 controllerAs: 'permissions',
11664 11749 bindToController: true,
11665 11750 scope: {
11666 11751 currentPermissions: '=',
11667 11752 possiblePermissions: '=',
11668 11753 resource: '='
11669 11754 },
11670 11755 templateUrl: 'directives/permissions/permissions.html'
11671 11756 }
11672 11757 })
11673 11758
11674 11759 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11675 11760 //
11676 11761 // Licensed under the Apache License, Version 2.0 (the "License");
11677 11762 // you may not use this file except in compliance with the License.
11678 11763 // You may obtain a copy of the License at
11679 11764 //
11680 11765 // http://www.apache.org/licenses/LICENSE-2.0
11681 11766 //
11682 11767 // Unless required by applicable law or agreed to in writing, software
11683 11768 // distributed under the License is distributed on an "AS IS" BASIS,
11684 11769 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11685 11770 // See the License for the specific language governing permissions and
11686 11771 // limitations under the License.
11687 11772
11688 11773 angular.module('appenlight.directives.pluginConfig', []).directive('pluginConfig', function () {
11689 11774 return {
11690 11775 scope: {},
11691 11776 bindToController: {
11692 11777 resource: '=',
11693 11778 section: '='
11694 11779 },
11695 11780 restrict: 'E',
11696 11781 templateUrl: 'directives/plugin_config/plugin_config.html',
11697 11782 controller: PluginConfig,
11698 11783 controllerAs: 'plugin_ctrlr'
11699 11784 };
11700 11785
11701 11786 PluginConfig.$inject = ['stateHolder'];
11702 11787
11703 11788 function PluginConfig(stateHolder) {
11704 this.plugins = {};
11705 this.inclusions = stateHolder.plugins.inclusions[this.section];
11789 this.$onInit = function () {
11790 this.plugins = {};
11791 this.inclusions = stateHolder.plugins.inclusions[this.section];
11792 }
11706 11793 }
11707 11794 });
11708 11795
11709 11796 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11710 11797 //
11711 11798 // Licensed under the Apache License, Version 2.0 (the "License");
11712 11799 // you may not use this file except in compliance with the License.
11713 11800 // You may obtain a copy of the License at
11714 11801 //
11715 11802 // http://www.apache.org/licenses/LICENSE-2.0
11716 11803 //
11717 11804 // Unless required by applicable law or agreed to in writing, software
11718 11805 // distributed under the License is distributed on an "AS IS" BASIS,
11719 11806 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11720 11807 // See the License for the specific language governing permissions and
11721 11808 // limitations under the License.
11722 11809
11723 11810 angular.module('appenlight.directives.postProcessAction', []).directive('postProcessAction', ['applicationsPropertyResource', function (applicationsPropertyResource) {
11724 11811 return {
11725 11812 scope: {},
11726 bindToController:{
11813 bindToController: {
11727 11814 action: '=',
11728 11815 resource: '='
11729 11816 },
11730 controller:postProcessActionController,
11731 controllerAs:'ctrl',
11817 controller: postProcessActionController,
11818 controllerAs: 'ctrl',
11732 11819 restrict: 'E',
11733 11820 templateUrl: 'directives/postprocess_action/postprocess_action.html'
11734 11821 };
11735 function postProcessActionController(){
11736 var vm = this;
11737
11738 var allOps = {
11739 'eq': 'Equal',
11740 'ne': 'Not equal',
11741 'ge': 'Greater or equal',
11742 'gt': 'Greater than',
11743 'le': 'Lesser or equal',
11744 'lt': 'Lesser than',
11745 'startswith': 'Starts with',
11746 'endswith': 'Ends with',
11747 'contains': 'Contains'
11748 };
11749
11750 var fieldOps = {};
11751 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
11752 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
11753 fieldOps['duration'] = ['ge', 'le'];
11754 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
11755 'contains'];
11756 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
11757 'contains'];
11758 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
11759 'contains'];
11760 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
11761 'contains'];
11762 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
11763 11822
11764 var possibleFields = {
11765 '__AND__': 'All met (composite rule)',
11766 '__OR__': 'One met (composite rule)',
11767 '__NOT__': 'Not met (composite rule)',
11768 'http_status': 'HTTP Status',
11769 'duration': 'Request duration',
11770 'group:priority': 'Group -> Priority',
11771 'url_domain': 'Domain',
11772 'url_path': 'URL Path',
11773 'error': 'Error',
11774 'tags:server_name': 'Tag -> Server name',
11775 'group:occurences': 'Group -> Occurences'
11776 };
11823 function postProcessActionController() {
11824 var vm = this;
11825 vm.$onInit = function () {
11826
11827 var allOps = {
11828 'eq': 'Equal',
11829 'ne': 'Not equal',
11830 'ge': 'Greater or equal',
11831 'gt': 'Greater than',
11832 'le': 'Lesser or equal',
11833 'lt': 'Lesser than',
11834 'startswith': 'Starts with',
11835 'endswith': 'Ends with',
11836 'contains': 'Contains'
11837 };
11777 11838
11778 vm.ruleDefinitions = {
11779 fieldOps: fieldOps,
11780 allOps: allOps,
11781 possibleFields: possibleFields
11782 };
11839 var fieldOps = {};
11840 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
11841 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
11842 fieldOps['duration'] = ['ge', 'le'];
11843 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
11844 'contains'];
11845 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
11846 'contains'];
11847 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
11848 'contains'];
11849 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
11850 'contains'];
11851 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
11852
11853 var possibleFields = {
11854 '__AND__': 'All met (composite rule)',
11855 '__OR__': 'One met (composite rule)',
11856 '__NOT__': 'Not met (composite rule)',
11857 'http_status': 'HTTP Status',
11858 'duration': 'Request duration',
11859 'group:priority': 'Group -> Priority',
11860 'url_domain': 'Domain',
11861 'url_path': 'URL Path',
11862 'error': 'Error',
11863 'tags:server_name': 'Tag -> Server name',
11864 'group:occurences': 'Group -> Occurences'
11865 };
11783 11866
11784 vm.possibleActions = [
11785 ['1', 'Priority +1'],
11786 ['-1', 'Priority -1']
11787 ];
11867 vm.ruleDefinitions = {
11868 fieldOps: fieldOps,
11869 allOps: allOps,
11870 possibleFields: possibleFields
11871 };
11788 11872
11873 vm.possibleActions = [
11874 ['1', 'Priority +1'],
11875 ['-1', 'Priority -1']
11876 ];
11877 }
11789 11878 vm.deleteAction = function (action) {
11790 11879 applicationsPropertyResource.remove({
11791 11880 pkey: vm.action.pkey,
11792 11881 resourceId: vm.resource.resource_id,
11793 11882 key: 'postprocessing_rules'
11794 11883 }, function () {
11795 11884 vm.resource.postprocessing_rules.splice(
11796 11885 vm.resource.postprocessing_rules.indexOf(action), 1);
11797 11886 });
11798 11887 };
11799 11888
11800 11889
11801 11890 vm.saveAction = function () {
11802 11891 var params = {
11803 11892 'pkey': vm.action.pkey,
11804 11893 'resourceId': vm.resource.resource_id,
11805 11894 key: 'postprocessing_rules'
11806 11895 };
11807 11896 applicationsPropertyResource.update(params, vm.action,
11808 11897 function (data) {
11809 11898 vm.action.dirty = false;
11810 11899 vm.errors = [];
11811 11900 }, function (response) {
11812 11901 if (response.status == 422) {
11813 11902 var errorDict = angular.fromJson(response.data);
11814 11903 vm.errors = _.values(errorDict);
11815 11904 }
11816 11905 });
11817 11906 };
11818 11907
11819 vm.setDirty = function() {
11908 vm.setDirty = function () {
11820 11909 vm.action.dirty = true;
11821 11910
11822 11911 };
11823 11912 }
11824 11913
11825 11914 }]);
11826 11915
11827 11916 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11828 11917 //
11829 11918 // Licensed under the Apache License, Version 2.0 (the "License");
11830 11919 // you may not use this file except in compliance with the License.
11831 11920 // You may obtain a copy of the License at
11832 11921 //
11833 11922 // http://www.apache.org/licenses/LICENSE-2.0
11834 11923 //
11835 11924 // Unless required by applicable law or agreed to in writing, software
11836 11925 // distributed under the License is distributed on an "AS IS" BASIS,
11837 11926 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11838 11927 // See the License for the specific language governing permissions and
11839 11928 // limitations under the License.
11840 11929
11841 11930 angular.module('appenlight.directives.recursive', []).directive("recursive", function ($compile) {
11842 11931 return {
11843 11932 restrict: "EACM",
11844 11933 priority: 100000,
11845 11934 compile: function (tElement, tAttr) {
11846 11935 var contents = tElement.contents().remove();
11847 11936 var compiledContents;
11848 11937 return function (scope, iElement, iAttr) {
11849 11938 if (!compiledContents) {
11850 11939 compiledContents = $compile(contents);
11851 11940 }
11852 11941 iElement.append(compiledContents(scope, function (clone) {
11853 11942 return clone;
11854 11943 }));
11855 11944 };
11856 11945 }
11857 11946 };
11858 11947 });
11859 11948
11860 11949 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11861 11950 //
11862 11951 // Licensed under the Apache License, Version 2.0 (the "License");
11863 11952 // you may not use this file except in compliance with the License.
11864 11953 // You may obtain a copy of the License at
11865 11954 //
11866 11955 // http://www.apache.org/licenses/LICENSE-2.0
11867 11956 //
11868 11957 // Unless required by applicable law or agreed to in writing, software
11869 11958 // distributed under the License is distributed on an "AS IS" BASIS,
11870 11959 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11871 11960 // See the License for the specific language governing permissions and
11872 11961 // limitations under the License.
11873 11962
11874 11963 angular.module('appenlight.directives.reportAlertAction', []).directive('reportAlertAction', ['userSelfPropertyResource', function (userSelfPropertyResource) {
11875 11964 return {
11876 11965 scope: {},
11877 bindToController:{
11966 bindToController: {
11878 11967 action: '=',
11879 11968 applications: '=',
11880 11969 possibleChannels: '=',
11881 11970 actions: '=',
11882 11971 ruleDefinitions: '='
11883 11972 },
11884 controller:reportAlertActionController,
11885 controllerAs:'ctrl',
11973 controller: reportAlertActionController,
11974 controllerAs: 'ctrl',
11886 11975 restrict: 'E',
11887 11976 templateUrl: 'directives/report_alert_action/report_alert_action.html'
11888 11977 };
11889 function reportAlertActionController(){
11978
11979 function reportAlertActionController() {
11890 11980 var vm = this;
11981 vm.$onInit = function () {
11982 vm.possibleNotifications = [
11983 ['always', 'Always'],
11984 ['only_first', 'Only New'],
11985 ];
11986
11987 vm.possibleChannels = _.filter(vm.possibleChannels, function (c) {
11988 return c.supports_report_alerting
11989 }
11990 );
11991
11992 if (vm.possibleChannels.length > 0) {
11993 vm.channelToBind = vm.possibleChannels[0];
11994 }
11995 }
11891 11996 vm.deleteAction = function (actions, action) {
11892 11997 var get = {
11893 11998 key: 'alert_channels_rules',
11894 11999 pkey: action.pkey
11895 12000 };
11896 12001 userSelfPropertyResource.remove(get, function (data) {
11897 12002 actions.splice(actions.indexOf(action), 1);
11898 12003 });
11899 12004
11900 12005 };
11901 12006
11902 vm.bindChannel = function(){
12007 vm.bindChannel = function () {
11903 12008 var post = {
11904 12009 channel_pkey: vm.channelToBind.pkey,
11905 12010 action_pkey: vm.action.pkey
11906 12011 };
11907 12012
11908 12013 userSelfPropertyResource.save({key: 'alert_channels_actions_binds'}, post,
11909 12014 function (data) {
11910 12015 vm.action.channels = [];
11911 12016 vm.action.channels = data.channels;
11912 12017 }, function (response) {
11913 12018 if (response.status == 422) {
11914 12019
11915 12020 }
11916 12021 });
11917 12022 };
11918 12023
11919 vm.unBindChannel = function(channel){
12024 vm.unBindChannel = function (channel) {
11920 12025 userSelfPropertyResource.delete({
11921 12026 key: 'alert_channels_actions_binds',
11922 12027 channel_pkey: channel.pkey,
11923 12028 action_pkey: vm.action.pkey
11924 12029 },
11925 12030 function (data) {
11926 12031 vm.action.channels = [];
11927 12032 vm.action.channels = data.channels;
11928 12033 }, function (response) {
11929 12034 if (response.status == 422) {
11930 12035
11931 12036 }
11932 12037 });
11933 12038 };
11934 12039
11935 12040 vm.saveAction = function () {
11936 12041 var params = {
11937 12042 key: 'alert_channels_rules',
11938 12043 pkey: vm.action.pkey
11939 12044 };
11940 12045 userSelfPropertyResource.update(params, vm.action,
11941 12046 function (data) {
11942 12047 vm.action.dirty = false;
11943 12048 vm.errors = [];
11944 12049 }, function (response) {
11945 12050 if (response.status == 422) {
11946 12051 var errorDict = angular.fromJson(response.data);
11947 12052 vm.errors = _.values(errorDict);
11948 12053 }
11949 12054 });
11950 12055 };
11951 12056
11952 vm.possibleNotifications = [
11953 ['always', 'Always'],
11954 ['only_first', 'Only New'],
11955 ];
11956
11957 vm.possibleChannels = _.filter(vm.possibleChannels, function(c){
11958 return c.supports_report_alerting }
11959 );
11960
11961 if (vm.possibleChannels.length > 0){
11962 vm.channelToBind = vm.possibleChannels[0];
11963 }
11964
11965 vm.setDirty = function() {
12057 vm.setDirty = function () {
11966 12058 vm.action.dirty = true;
11967 12059
11968 12060 };
11969 12061 }
11970 12062
11971 12063 }]);
11972 12064
11973 12065 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
11974 12066 //
11975 12067 // Licensed under the Apache License, Version 2.0 (the "License");
11976 12068 // you may not use this file except in compliance with the License.
11977 12069 // You may obtain a copy of the License at
11978 12070 //
11979 12071 // http://www.apache.org/licenses/LICENSE-2.0
11980 12072 //
11981 12073 // Unless required by applicable law or agreed to in writing, software
11982 12074 // distributed under the License is distributed on an "AS IS" BASIS,
11983 12075 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11984 12076 // See the License for the specific language governing permissions and
11985 12077 // limitations under the License.
11986 12078
11987 12079 angular.module('appenlight.directives.ruleReadOnly', []).directive('ruleReadOnly', ['userSelfPropertyResource', function (userSelfPropertyResource) {
11988 12080 return {
11989 12081 scope: {},
11990 bindToController:{
12082 bindToController: {
11991 12083 parentObj: '=',
11992 12084 rule: '=',
11993 12085 ruleDefinitions: '=',
11994 12086 parentRule: "=",
11995 12087 config: "="
11996 12088 },
11997 12089 restrict: 'E',
11998 12090 templateUrl: 'directives/rule_read_only/rule_read_only.html',
11999 controller:RuleController,
12000 controllerAs:'rule_ctrlr'
12091 controller: RuleController,
12092 controllerAs: 'rule_ctrlr'
12001 12093 }
12002 function RuleController(){
12094
12095 function RuleController() {
12003 12096 var vm = this;
12004 vm.readOnlyPossibleFields = {};
12005 var labelPairs = _.pairs(vm.parentObj.config);
12006 _.each(labelPairs, function (entry) {
12007 vm.readOnlyPossibleFields[entry[0]] = entry[1].human_label;
12008 });
12097 vm.$onInit = function () {
12098 vm.readOnlyPossibleFields = {};
12099 var labelPairs = _.pairs(vm.parentObj.config);
12100 _.each(labelPairs, function (entry) {
12101 vm.readOnlyPossibleFields[entry[0]] = entry[1].human_label;
12102 });
12103 }
12009 12104 }
12010 12105 }]);
12011 12106
12012 12107 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12013 12108 //
12014 12109 // Licensed under the Apache License, Version 2.0 (the "License");
12015 12110 // you may not use this file except in compliance with the License.
12016 12111 // You may obtain a copy of the License at
12017 12112 //
12018 12113 // http://www.apache.org/licenses/LICENSE-2.0
12019 12114 //
12020 12115 // Unless required by applicable law or agreed to in writing, software
12021 12116 // distributed under the License is distributed on an "AS IS" BASIS,
12022 12117 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12023 12118 // See the License for the specific language governing permissions and
12024 12119 // limitations under the License.
12025 12120
12026 12121 angular.module('appenlight.directives.rule', []).directive('rule', function () {
12027 12122 return {
12028 12123 scope: {},
12029 12124 bindToController:{
12030 12125 parentObj: '=',
12031 12126 rule: '=',
12032 12127 ruleDefinitions: '=',
12033 12128 parentRule: "=",
12034 12129 config: "="
12035 12130 },
12036 12131 restrict: 'E',
12037 12132 templateUrl: 'directives/rule/rule.html',
12038 12133 controller:RuleController,
12039 12134 controllerAs:'rule_ctrlr'
12040 12135 };
12041 12136 function RuleController(){
12042 12137 var vm = this;
12043
12044 vm.rule.dirty = false;
12045 vm.oldField = vm.rule.field;
12046
12138 vm.$onInit = function () {
12139 vm.rule.dirty = false;
12140 vm.oldField = vm.rule.field;
12141 }
12047 12142 vm.add = function () {
12048 12143 vm.rule.rules.push(
12049 12144 {op: "eq", field: 'http_status', value: ""}
12050 12145 );
12051 12146 vm.setDirty();
12052 12147 };
12053 12148
12054 12149 vm.setDirty = function() {
12055 12150 vm.rule.dirty = true;
12056 12151
12057 12152 if (vm.parentObj){
12058 12153
12059 12154
12060 12155 vm.parentObj.dirty = true;
12061 12156 }
12062 12157 };
12063 12158
12064 12159 vm.fieldChange = function () {
12065 12160 var compound_types = ['__AND__', '__OR__', '__NOT__'];
12066 12161 var new_is_compound = compound_types.indexOf(vm.rule.field) !== -1;
12067 12162 var old_was_compound = compound_types.indexOf(vm.oldField) !== -1;
12068 12163
12069 12164 if (!new_is_compound) {
12070 12165 vm.rule.op = vm.ruleDefinitions.fieldOps[vm.rule.field][0];
12071 12166 }
12072 12167 if ((new_is_compound && !old_was_compound)) {
12073 12168
12074 12169 delete vm.rule.value;
12075 12170 vm.rule.rules = [];
12076 12171 vm.add();
12077 12172 }
12078 12173 else if (!new_is_compound && old_was_compound) {
12079 12174
12080 12175 delete vm.rule.rules;
12081 12176 vm.rule.value = '';
12082 12177 }
12083 12178 vm.oldField = vm.rule.field;
12084 12179 vm.setDirty();
12085 12180 };
12086 12181
12087 12182 vm.deleteRule = function (parent, rule) {
12088 12183 parent.rules.splice(parent.rules.indexOf(rule), 1);
12089 12184 vm.setDirty();
12090 12185 }
12091 12186 }
12092 12187 });
12093 12188
12094 12189 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12095 12190 //
12096 12191 // Licensed under the Apache License, Version 2.0 (the "License");
12097 12192 // you may not use this file except in compliance with the License.
12098 12193 // You may obtain a copy of the License at
12099 12194 //
12100 12195 // http://www.apache.org/licenses/LICENSE-2.0
12101 12196 //
12102 12197 // Unless required by applicable law or agreed to in writing, software
12103 12198 // distributed under the License is distributed on an "AS IS" BASIS,
12104 12199 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12105 12200 // See the License for the specific language governing permissions and
12106 12201 // limitations under the License.
12107 12202
12108 12203 angular.module('appenlight.directives.smallReportGroupList',[]).
12109 12204 directive('smallReportGroupList', [function () {
12110 12205 return {
12111 12206 restrict: "A",
12112 12207 scope: {
12113 12208 groups: '=',
12114 12209 applications: '='
12115 12210 },
12116 12211 templateUrl: 'templates/reports/small_report_group_list.html'
12117 12212 }
12118 12213 }])
12119 12214
12120 12215 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12121 12216 //
12122 12217 // Licensed under the Apache License, Version 2.0 (the "License");
12123 12218 // you may not use this file except in compliance with the License.
12124 12219 // You may obtain a copy of the License at
12125 12220 //
12126 12221 // http://www.apache.org/licenses/LICENSE-2.0
12127 12222 //
12128 12223 // Unless required by applicable law or agreed to in writing, software
12129 12224 // distributed under the License is distributed on an "AS IS" BASIS,
12130 12225 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12131 12226 // See the License for the specific language governing permissions and
12132 12227 // limitations under the License.
12133 12228
12134 12229 angular.module('appenlight.directives.smallReportList', []).
12135 12230 directive('smallReportList', [function () {
12136 12231 return {
12137 12232 restrict: "A",
12138 12233 scope: {
12139 12234 reports: '=',
12140 12235 applications: '='
12141 12236 },
12142 12237 templateUrl: 'templates/reports/small_report_list.html'
12143 12238 }
12144 12239 }])
12145 12240
12146 12241 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12147 12242 //
12148 12243 // Licensed under the Apache License, Version 2.0 (the "License");
12149 12244 // you may not use this file except in compliance with the License.
12150 12245 // You may obtain a copy of the License at
12151 12246 //
12152 12247 // http://www.apache.org/licenses/LICENSE-2.0
12153 12248 //
12154 12249 // Unless required by applicable law or agreed to in writing, software
12155 12250 // distributed under the License is distributed on an "AS IS" BASIS,
12156 12251 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12157 12252 // See the License for the specific language governing permissions and
12158 12253 // limitations under the License.
12159 12254
12160 12255 'use strict';
12161 12256
12162 12257 /* Filters */
12163 12258
12164 12259 angular.module('appenlight.filters').
12165 12260 filter('interpolate', ['version', function (version) {
12166 12261 return function (text) {
12167 12262 return String(text).replace(/\%VERSION\%/mg, version);
12168 12263 }
12169 12264 }])
12170 12265 .filter('isoToRelativeTime', function () {
12171 12266 return function (input) {
12172 12267 return moment.utc(input).fromNow();
12173 12268 }
12174 12269 })
12175 12270
12176 12271 .filter('round', function () {
12177 12272 return function (input, precision) {
12178 12273 return input.toFixed(precision)
12179 12274 }
12180 12275 })
12181 12276
12182 12277 .filter('numberToThousands', function () {
12183 12278 return function (input) {
12184 12279 if (input > 1000000) {
12185 12280 var i = input / 1000000;
12186 12281 return i.toFixed(1).toString() + 'M'
12187 12282 }
12188 12283 else if (input > 1000) {
12189 12284 var i = input / 1000;
12190 12285 return i.toFixed(1).toString() + 'k'
12191 12286 }
12192 12287 else {
12193 12288 return input;
12194 12289 }
12195 12290 }
12196 12291 })
12197 12292 .filter('getOrdered', function () {
12198 12293 return function (input, filterOn) {
12199 12294 var ordered = {};
12200 12295 for (var key in input) {
12201 12296 ordered[input[key][filterOn]] = input[key];
12202 12297 }
12203 12298 return ordered;
12204 12299 };
12205 12300 })
12206 12301 .filter('objectToOrderedArray', function(){
12207 12302 return function(items, field, reverse) {
12208 12303 var filtered = [];
12209 12304 angular.forEach(items, function(item) {
12210 12305 filtered.push(item);
12211 12306 });
12212 12307 filtered.sort(function (a, b) {
12213 12308 return (a[field] > b[field] ? 1 : -1);
12214 12309 });
12215 12310 if(reverse) filtered.reverse();
12216 12311 return filtered;
12217 12312 };
12218 12313 })
12219 12314 .filter('apdexValue', function () {
12220 12315 return function (input) {
12221 12316 if (input.apdex >= 95) {
12222 12317 return 'satisfactory';
12223 12318 } else if (input.apdex >= 80) {
12224 12319 return 'tolerating';
12225 12320 } else {
12226 12321 return 'frustrating';
12227 12322 }
12228 12323 };
12229 12324 })
12230 12325 .filter('truncate', function(){
12231 12326 return function (text, length, end) {
12232 12327 if (isNaN(length))
12233 12328 length = 10;
12234 12329
12235 12330 if (end === undefined)
12236 12331 end = "...";
12237 12332
12238 12333 if (text.length <= length || text.length - end.length <= length) {
12239 12334 return text;
12240 12335 }
12241 12336 else {
12242 12337 return String(text).substring(0, length-end.length) + end;
12243 12338 }
12244 12339
12245 12340 };
12246 12341 })
12247 12342
12248 12343 ;
12249 12344
12250 12345 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12251 12346 //
12252 12347 // Licensed under the Apache License, Version 2.0 (the "License");
12253 12348 // you may not use this file except in compliance with the License.
12254 12349 // You may obtain a copy of the License at
12255 12350 //
12256 12351 // http://www.apache.org/licenses/LICENSE-2.0
12257 12352 //
12258 12353 // Unless required by applicable law or agreed to in writing, software
12259 12354 // distributed under the License is distributed on an "AS IS" BASIS,
12260 12355 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12261 12356 // See the License for the specific language governing permissions and
12262 12357 // limitations under the License.
12263 12358
12264 12359 angular.module('appenlight').config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
12265 12360
12266 12361 $urlRouterProvider.otherwise('/ui');
12267 12362
12268 12363 $stateProvider.state('logs', {
12269 12364 url: '/ui/logs?resource',
12270 12365 component: 'logsBrowserView'
12271 12366 });
12272 12367
12273 12368 $stateProvider.state('front_dashboard', {
12274 12369 url: '/ui',
12275 12370 component: 'indexDashboardView'
12276 12371 });
12277 12372
12278 12373 $stateProvider.state('report', {
12279 12374 abstract: true,
12280 12375 url: '/ui/report',
12281 12376 template: '<ui-view></ui-view>'
12282 12377 });
12283 12378
12284 12379 $stateProvider.state('report.list', {
12285 12380 url: '/list?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
12286 12381 component: 'reportsBrowserView'
12287 12382 });
12288 12383
12289 12384 $stateProvider.state('report.list_slow', {
12290 12385 url: '/list_slow?start_date&min_duration&max_duration&{view_name:any}&{server_name:any}&resource',
12291 12386 component: 'reportsSlowBrowserView'
12292 12387 });
12293 12388
12294 12389 $stateProvider.state('report.view_detail', {
12295 12390 url: '/:groupId/:reportId',
12296 12391 component: 'reportView'
12297 12392 });
12298 12393 $stateProvider.state('report.view_group', {
12299 12394 url: '/:groupId',
12300 12395 component: 'reportView'
12301 12396 });
12302 12397 $stateProvider.state('events', {
12303 12398 url: '/ui/events',
12304 12399 component: 'eventBrowserView'
12305 12400 });
12306 12401 $stateProvider.state('admin', {
12307 12402 url: '/ui/admin',
12308 12403 component: 'adminView'
12309 12404 });
12310 12405 $stateProvider.state('admin.user', {
12311 12406 abstract: true,
12312 12407 url: '/user',
12313 12408 template: '<ui-view></ui-view>'
12314 12409 });
12315 12410 $stateProvider.state('admin.user.list', {
12316 12411 url: '/list',
12317 12412 component: 'adminUsersListView'
12318 12413 });
12319 12414 $stateProvider.state('admin.user.create', {
12320 12415 url: '/create',
12321 12416 component: 'adminUsersCreateView'
12322 12417 });
12323 12418 $stateProvider.state('admin.user.update', {
12324 12419 url: '/{userId}/update',
12325 12420 component: 'adminUsersCreateView'
12326 12421 });
12327 12422
12328 12423
12329 12424 $stateProvider.state('admin.group', {
12330 12425 abstract: true,
12331 12426 url: '/group',
12332 12427 template: '<ui-view></ui-view>'
12333 12428 });
12334 12429 $stateProvider.state('admin.group.list', {
12335 12430 url: '/list',
12336 12431 component: 'adminGroupsListView'
12337 12432 });
12338 12433 $stateProvider.state('admin.group.create', {
12339 12434 url: '/create',
12340 12435 component: 'adminGroupsCreateView'
12341 12436 });
12342 12437 $stateProvider.state('admin.group.update', {
12343 12438 url: '/{groupId}/update',
12344 12439 component: 'adminGroupsCreateView'
12345 12440 });
12346 12441
12347 12442 $stateProvider.state('admin.application', {
12348 12443 abstract: true,
12349 12444 url: '/application',
12350 12445 template: '<ui-view></ui-view>'
12351 12446 });
12352 12447
12353 12448 $stateProvider.state('admin.application.list', {
12354 12449 url: '/list',
12355 12450 component: 'adminApplicationsListView'
12356 12451 });
12357 12452
12358 12453 $stateProvider.state('admin.partitions', {
12359 12454 url: '/partitions',
12360 12455 component: 'adminPartitionsView'
12361 12456 });
12362 12457 $stateProvider.state('admin.system', {
12363 12458 url: '/system',
12364 12459 component: 'adminSystemView'
12365 12460 });
12366 12461
12367 12462 $stateProvider.state('admin.configs', {
12368 12463 abstract: true,
12369 12464 url: '/configs',
12370 12465 template: '<ui-view></ui-view>'
12371 12466 });
12372 12467
12373 12468 $stateProvider.state('admin.configs.list', {
12374 12469 url: '/list',
12375 12470 component: 'adminConfigurationView'
12376 12471 });
12377 12472
12378 12473 $stateProvider.state('user', {
12379 12474 url: '/ui/user',
12380 12475 component: 'settingsView'
12381 12476 });
12382 12477
12383 12478 $stateProvider.state('user.profile', {
12384 12479 abstract: true,
12385 12480 template: '<ui-view></ui-view>'
12386 12481 });
12387 12482 $stateProvider.state('user.profile.edit', {
12388 12483 url: '/profile',
12389 12484 component: 'userProfileView'
12390 12485 });
12391 12486
12392 12487
12393 12488 $stateProvider.state('user.profile.password', {
12394 12489 url: '/password',
12395 12490 component: 'userPasswordView'
12396 12491 });
12397 12492
12398 12493 $stateProvider.state('user.profile.identities', {
12399 12494 url: '/identities',
12400 12495 component: 'userIdentitiesView'
12401 12496 });
12402 12497
12403 12498 $stateProvider.state('user.profile.auth_tokens', {
12404 12499 url: '/auth_tokens',
12405 12500 component: 'userAuthTokensView'
12406 12501 });
12407 12502
12408 12503 $stateProvider.state('user.alert_channels', {
12409 12504 abstract: true,
12410 12505 url: '/alert_channels',
12411 12506 template: '<ui-view></ui-view>'
12412 12507 });
12413 12508
12414 12509 $stateProvider.state('user.alert_channels.list', {
12415 12510 url: '/list',
12416 12511 component: 'userAlertChannelsListView'
12417 12512 });
12418 12513
12419 12514 $stateProvider.state('user.alert_channels.email', {
12420 12515 url: '/email',
12421 12516 component: 'userAlertChannelsEmailNewView'
12422 12517 });
12423 12518
12424 12519 $stateProvider.state('applications', {
12425 12520 abstract: true,
12426 12521 url: '/ui/applications',
12427 12522 component: 'settingsView'
12428 12523 });
12429 12524
12430 12525 $stateProvider.state('applications.list', {
12431 12526 url: '/list',
12432 12527 component: 'applicationsListView'
12433 12528 });
12434 12529 $stateProvider.state('applications.update', {
12435 12530 url: '/{resourceId}/update',
12436 12531 component: 'applicationsUpdateView'
12437 12532 });
12438 12533
12439 12534 $stateProvider.state('applications.integrations', {
12440 12535 url: '/{resourceId}/integrations',
12441 12536 component: 'integrationsListView',
12442 12537 data: {
12443 12538 resource: null
12444 12539 }
12445 12540 });
12446 12541
12447 12542 $stateProvider.state('applications.purge_logs', {
12448 12543 url: '/purge_logs',
12449 12544 component: 'applicationsPurgeLogsView'
12450 12545 });
12451 12546
12452 12547 $stateProvider.state('applications.integrations.edit', {
12453 12548 url: '/{integration}',
12454 12549 template: function ($stateParams) {
12455 12550 return '<'+ $stateParams.integration + '-integration-config-view>'
12456 12551 }
12457 12552 });
12458 12553
12459 12554 $stateProvider.state('tests', {
12460 12555 url: '/ui/tests',
12461 12556 templateUrl: 'templates/user/alert_channels_test.html',
12462 12557 controller: 'AlertChannelsTestController as test_action'
12463 12558 });
12464 12559
12465 12560 }]);
12466 12561
12467 12562 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12468 12563 //
12469 12564 // Licensed under the Apache License, Version 2.0 (the "License");
12470 12565 // you may not use this file except in compliance with the License.
12471 12566 // You may obtain a copy of the License at
12472 12567 //
12473 12568 // http://www.apache.org/licenses/LICENSE-2.0
12474 12569 //
12475 12570 // Unless required by applicable law or agreed to in writing, software
12476 12571 // distributed under the License is distributed on an "AS IS" BASIS,
12477 12572 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12478 12573 // See the License for the specific language governing permissions and
12479 12574 // limitations under the License.
12480 12575
12481 12576 angular.module('appenlight.services.chartResultParser',[]).factory('chartResultParser', function () {
12482 12577
12483 12578 function transform(data) {
12484 12579
12485 12580 /** transform result to a format that is more friendly
12486 12581 * to c3js we don't want to export this way as default
12487 12582 * as TSV stuff is less readable overall
12488 12583 *
12489 12584 * we want format of:
12490 12585 * {x: [unix_timestamps],
12491 12586 * key1: [val,list],
12492 12587 * key2: [val,list]...}
12493 12588 *
12494 12589 * OR
12495 12590 *
12496 12591 * handle special case where we want pie/donut for
12497 12592 * aggregation with a single metric, we need to transform
12498 12593 * the data from:
12499 12594 * [y:list, categories:[cat1,cat2,...]]
12500 12595 * to
12501 12596 * [cat1: val, cat2:val...] format to render properly
12502 12597 */
12503 12598 var chartC3Config = {
12504 12599 data: {
12505 12600 json: [],
12506 12601 type: 'bar'
12507 12602 },
12508 12603 point: {
12509 12604 show: false
12510 12605 },
12511 12606 tooltip: {
12512 12607 format: {
12513 12608 title: function (d) {
12514 12609 if (d) {
12515 12610 return '' + d;
12516 12611 }
12517 12612 return '';
12518 12613 },
12519 12614 value: function (value, ratio, id, index) {
12520 12615 return d3.round(value, 3);
12521 12616 }
12522 12617 }
12523 12618 },
12524 12619 regions: data.rect_regions
12525 12620 };
12526 12621 var labels = _.keys(data.system_labels);
12527 12622 var specialCases = ['pie', 'donut', 'gauge'];
12528 12623 if (labels.length === 1 && _.contains(specialCases,
12529 12624 data.chart_type.type)) {
12530 12625 var transformedData = {};
12531 12626
12532 12627 _.each(data.series, function (item) {
12533 12628 transformedData[item['key']] = item[labels[0]];
12534 12629 });
12535 12630 }
12536 12631 else {
12537 12632 var transformedData = {'key': []};
12538 12633
12539 12634 _.each(labels, function (label) {
12540 12635 transformedData[label] = [];
12541 12636 });
12542 12637
12543 12638 _.each(data.series, function (item) {
12544 12639 for (key in item) {
12545 12640 transformedData[key].push(item[key])
12546 12641 }
12547 12642 });
12548 12643 }
12549 12644
12550 12645
12551 12646 if (data.parent_agg.type === 'time_histogram') {
12552 12647 chartC3Config.axis = {
12553 12648 x: {
12554 12649 type: 'timeseries',
12555 12650 tick: {
12556 12651 format: '%Y-%m-%d'
12557 12652 }
12558 12653 }
12559 12654 };
12560 12655 chartC3Config.data.xFormat = '%Y-%m-%dT%H:%M:%S';
12561 12656 }
12562 12657 else if (data.categories) {
12563 12658 chartC3Config.axis = {
12564 12659 x: {
12565 12660 type: 'category',
12566 12661 categories: data.categories
12567 12662 }
12568 12663 };
12569 12664 // we don't want to show key as label if it is being
12570 12665 // used as a category instead
12571 12666 if (data.categories) {
12572 12667 delete transformedData['key'];
12573 12668 }
12574 12669 }
12575 12670
12576 12671 var human_labels = {};
12577 12672 _.each(_.pairs(data.system_labels), function(entry){
12578 12673 human_labels[entry[0]] = entry[1].human_label;
12579 12674 });
12580 12675 var chartC3Data = {
12581 12676 json: transformedData,
12582 12677 names: human_labels,
12583 12678 groups: data.groups,
12584 12679 type: data.chart_type.type
12585 12680 };
12586 12681
12587 12682 if (data.parent_agg.type == 'time_histogram') {
12588 12683 chartC3Data.x = 'key';
12589 12684 }
12590 12685 return {chartC3Data: chartC3Data, chartC3Config: chartC3Config}
12591 12686 }
12592 12687
12593 12688 return transform
12594 12689 });
12595 12690
12596 12691 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12597 12692 //
12598 12693 // Licensed under the Apache License, Version 2.0 (the "License");
12599 12694 // you may not use this file except in compliance with the License.
12600 12695 // You may obtain a copy of the License at
12601 12696 //
12602 12697 // http://www.apache.org/licenses/LICENSE-2.0
12603 12698 //
12604 12699 // Unless required by applicable law or agreed to in writing, software
12605 12700 // distributed under the License is distributed on an "AS IS" BASIS,
12606 12701 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12607 12702 // See the License for the specific language governing permissions and
12608 12703 // limitations under the License.
12609 12704
12610 12705 var DEFAULT_ACTIONS = {
12611 12706 'get': {method: 'GET', timeout: 60000 * 2},
12612 12707 'save': {method: 'POST', timeout: 60000 * 2},
12613 12708 'query': {method: 'GET', isArray: true, timeout: 60000 * 2},
12614 12709 'remove': {method: 'DELETE', timeout: 30000},
12615 12710 'update': {method: 'PATCH', timeout: 30000},
12616 12711 'delete': {method: 'DELETE', timeout: 30000}
12617 12712 };
12618 12713
12619 12714 angular.module('appenlight.services.resources', []).factory('usersResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12620 12715 return $resource(AeConfig.urls.users, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12621 12716 }]);
12622 12717
12623 12718 angular.module('appenlight.services.resources').factory('userResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12624 12719 return $resource(AeConfig.urls.user, null, angular.copy(DEFAULT_ACTIONS));
12625 12720 }]);
12626 12721
12627 12722 angular.module('appenlight.services.resources').factory('usersPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12628 12723 return $resource(AeConfig.urls.usersProperty, null, angular.copy(DEFAULT_ACTIONS));
12629 12724 }]);
12630 12725
12631 12726 angular.module('appenlight.services.resources').factory('userSelfResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12632 12727 return $resource(AeConfig.urls.userSelf, null, angular.copy(DEFAULT_ACTIONS));
12633 12728 }]);
12634 12729
12635 12730 angular.module('appenlight.services.resources').factory('userSelfPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12636 12731 return $resource(AeConfig.urls.userSelfProperty, null, angular.copy(DEFAULT_ACTIONS));
12637 12732 }]);
12638 12733
12639 12734 angular.module('appenlight.services.resources').factory('logsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12640 12735 return $resource(AeConfig.urls.logsNoId, null, angular.copy(DEFAULT_ACTIONS));
12641 12736 }]);
12642 12737
12643 12738 angular.module('appenlight.services.resources').factory('reportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12644 12739 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12645 12740 }]);
12646 12741
12647 12742 angular.module('appenlight.services.resources').factory('slowReportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12648 12743 return $resource(AeConfig.urls.slowReports, null, angular.copy(DEFAULT_ACTIONS));
12649 12744 }]);
12650 12745
12651 12746 angular.module('appenlight.services.resources').factory('reportGroupResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12652 12747 return $resource(AeConfig.urls.reportGroup, null, angular.copy(DEFAULT_ACTIONS));
12653 12748 }]);
12654 12749
12655 12750 angular.module('appenlight.services.resources').factory('reportGroupPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12656 12751 return $resource(AeConfig.urls.reportGroupProperty, null, angular.copy(DEFAULT_ACTIONS));
12657 12752 }]);
12658 12753
12659 12754
12660 12755 angular.module('appenlight.services.resources').factory('reportResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12661 12756 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12662 12757 }]);
12663 12758
12664 12759 angular.module('appenlight.services.resources').factory('analyticsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12665 12760 return $resource(AeConfig.urls.analyticsAction, null, angular.copy(DEFAULT_ACTIONS));
12666 12761 }]);
12667 12762
12668 12763 angular.module('appenlight.services.resources').factory('reportsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12669 12764 return $resource(AeConfig.urls.reports, null, angular.copy(DEFAULT_ACTIONS));
12670 12765 }]);
12671 12766
12672 12767 angular.module('appenlight.services.resources').factory('integrationResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12673 12768 return $resource(AeConfig.urls.integrationAction, null, angular.copy(DEFAULT_ACTIONS));
12674 12769 }]);
12675 12770
12676 12771
12677 12772 angular.module('appenlight.services.resources').factory('adminResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12678 12773 return $resource(AeConfig.urls.adminAction, null, angular.copy(DEFAULT_ACTIONS));
12679 12774 }]);
12680 12775
12681 12776 angular.module('appenlight.services.resources').factory('applicationsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12682 12777 return $resource(AeConfig.urls.applicationsNoId, null, angular.copy(DEFAULT_ACTIONS));
12683 12778 }]);
12684 12779
12685 12780 angular.module('appenlight.services.resources').factory('applicationsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12686 12781 return $resource(AeConfig.urls.applicationsProperty, null, angular.copy(DEFAULT_ACTIONS));
12687 12782 }]);
12688 12783 angular.module('appenlight.services.resources').factory('applicationsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12689 12784 return $resource(AeConfig.urls.applications, null, angular.copy(DEFAULT_ACTIONS));
12690 12785 }]);
12691 12786
12692 12787 angular.module('appenlight.services.resources').factory('sectionViewResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12693 12788 return $resource(AeConfig.urls.sectionView, null, angular.copy(DEFAULT_ACTIONS));
12694 12789 }]);
12695 12790
12696 12791 angular.module('appenlight.services.resources').factory('groupsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12697 12792 return $resource(AeConfig.urls.groupsNoId, null, angular.copy(DEFAULT_ACTIONS));
12698 12793 }]);
12699 12794
12700 12795
12701 12796 angular.module('appenlight.services.resources').factory('groupsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12702 12797 return $resource(AeConfig.urls.groups, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12703 12798 }]);
12704 12799
12705 12800 angular.module('appenlight.services.resources').factory('groupsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12706 12801 return $resource(AeConfig.urls.groupsProperty, null, angular.copy(DEFAULT_ACTIONS));
12707 12802 }]);
12708 12803
12709 12804
12710 12805 angular.module('appenlight.services.resources').factory('eventsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12711 12806 return $resource(AeConfig.urls.eventsNoId, null, angular.copy(DEFAULT_ACTIONS));
12712 12807 }]);
12713 12808
12714 12809
12715 12810 angular.module('appenlight.services.resources').factory('eventsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12716 12811 return $resource(AeConfig.urls.events, {userId: '@id'}, angular.copy(DEFAULT_ACTIONS));
12717 12812 }]);
12718 12813
12719 12814 angular.module('appenlight.services.resources').factory('eventsPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12720 12815 return $resource(AeConfig.urls.eventsProperty, null, angular.copy(DEFAULT_ACTIONS));
12721 12816 }]);
12722 12817
12723 12818 angular.module('appenlight.services.resources').factory('configsNoIdResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12724 12819 return $resource(AeConfig.urls.configsNoId, null, angular.copy(DEFAULT_ACTIONS));
12725 12820 }]);
12726 12821
12727 12822 angular.module('appenlight.services.resources').factory('configsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12728 12823 return $resource(AeConfig.urls.configs, {
12729 12824 key: '@key',
12730 12825 section: '@section'
12731 12826 }, angular.copy(DEFAULT_ACTIONS));
12732 12827 }]);
12733 12828
12734 12829 angular.module('appenlight.services.resources').factory('pluginConfigsResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12735 12830 return $resource(AeConfig.urls.pluginConfigs, {
12736 12831 id: '@id',
12737 12832 plugin_name: '@plugin_name'
12738 12833 }, angular.copy(DEFAULT_ACTIONS));
12739 12834 }]);
12740 12835
12741 12836 angular.module('appenlight.services.resources').factory('resourcesPropertyResource', ['$resource', 'AeConfig', function ($resource, AeConfig) {
12742 12837 return $resource(AeConfig.urls.resourceProperty, null, angular.copy(DEFAULT_ACTIONS));
12743 12838 }]);
12744 12839
12745 12840 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12746 12841 //
12747 12842 // Licensed under the Apache License, Version 2.0 (the "License");
12748 12843 // you may not use this file except in compliance with the License.
12749 12844 // You may obtain a copy of the License at
12750 12845 //
12751 12846 // http://www.apache.org/licenses/LICENSE-2.0
12752 12847 //
12753 12848 // Unless required by applicable law or agreed to in writing, software
12754 12849 // distributed under the License is distributed on an "AS IS" BASIS,
12755 12850 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12756 12851 // See the License for the specific language governing permissions and
12757 12852 // limitations under the License.
12758 12853
12759 12854 angular.module('appenlight.services.stateHolder', []).factory('stateHolder',
12760 12855 ['$timeout', 'AeConfig', function ($timeout, AeConfig) {
12761 12856
12762 12857 var AeUser = {"user_name": null, "id": null};
12763 12858 AeUser.update = function (jsonData) {
12764 12859 jsonData = jsonData || {};
12765 12860 this.applications_map = {};
12766 12861 this.dashboards_map = {};
12767 12862 this.user_name = jsonData.user_name || null;
12768 12863 this.id = jsonData.id;
12769 12864 this.assigned_reports = jsonData.assigned_reports || null;
12770 12865 this.latest_events = jsonData.latest_events || null;
12771 12866 this.permissions = jsonData.permissions || null;
12772 12867 this.groups = jsonData.groups || null;
12773 12868 this.applications = [];
12774 12869 this.dashboards = [];
12775 12870 _.each(jsonData.applications, function (item) {
12776 12871 this.addApplication(item);
12777 12872 }.bind(this));
12778 12873 _.each(jsonData.dashboards, function (item) {
12779 12874 this.addDashboard(item);
12780 12875 }.bind(this));
12781 12876 };
12782 12877 AeUser.addApplication = function (item) {
12783 12878 this.applications.push(item);
12784 12879 this.applications_map[item.resource_id] = item;
12785 12880 };
12786 12881 AeUser.addDashboard = function (item) {
12787 12882 this.dashboards.push(item);
12788 12883 this.dashboards_map[item.resource_id] = item;
12789 12884 };
12790 12885
12791 12886 AeUser.removeApplicationById = function (applicationId) {
12792 12887 this.applications = _.filter(this.applications, function (item) {
12793 12888 return item.resource_id != applicationId;
12794 12889 });
12795 12890 delete this.applications_map[applicationId];
12796 12891 };
12797 12892 AeUser.removeDashboardById = function (dashboardId) {
12798 12893 this.dashboards = _.filter(this.dashboards, function (item) {
12799 12894 return item.resource_id != dashboardId;
12800 12895 });
12801 12896 delete this.dashboards_map[dashboardId];
12802 12897 };
12803 12898
12804 12899 AeUser.hasAppPermission = function (perm_name) {
12805 12900 if (!this.permissions){
12806 12901 return false
12807 12902 }
12808 12903 if (this.permissions.indexOf('root_administration') !== -1) {
12809 12904 return true
12810 12905 }
12811 12906 return this.permissions.indexOf(perm_name) !== -1;
12812 12907 };
12813 12908
12814 12909 AeUser.hasContextPermission = function (permName, ACLList) {
12815 12910 var hasPerm = false;
12816 12911 _.each(ACLList, function (ACL) {
12817 12912 // is this the right perm?
12818 12913 if (ACL.perm_name == permName ||
12819 12914 ACL.perm_name == '__all_permissions__') {
12820 12915 // perm for this user or a group user belongs to
12821 12916 if (ACL.user_name === this.user_name ||
12822 12917 this.groups.indexOf(ACL.group_name) !== -1) {
12823 12918 hasPerm = true
12824 12919 }
12825 12920 }
12826 12921 }.bind(this));
12827 12922
12828 12923 return hasPerm;
12829 12924 };
12830 12925
12831 12926 /**
12832 12927 * Holds some common stuff like flash messages, but important part is
12833 12928 * plugins property that is a registry that holds all information about
12834 12929 * loaded plugins, its mutated via .run() functions on inclusion
12835 12930 * @type {{list: Array, timeout: null, extend: flashMessages.extend, pop: flashMessages.pop, cancelTimeout: flashMessages.cancelTimeout, removeMessages: flashMessages.removeMessages}}
12836 12931 */
12837 12932 var flashMessages = {
12838 12933 list: [],
12839 12934 timeout: null,
12840 12935 extend: function (values) {
12841 12936
12842 12937 if (this.list.length > 2) {
12843 12938 this.list.splice(0, this.list.length - 2);
12844 12939 }
12845 12940 this.list.push.apply(this.list, values);
12846 12941 this.cancelTimeout();
12847 12942 this.removeMessages();
12848 12943 },
12849 12944 pop: function () {
12850 12945
12851 12946 this.list.pop();
12852 12947 },
12853 12948 cancelTimeout: function () {
12854 12949 if (this.timeout) {
12855 12950 $timeout.cancel(this.timeout);
12856 12951 }
12857 12952 },
12858 12953 removeMessages: function () {
12859 12954 var self = this;
12860 12955 this.timeout = $timeout(function () {
12861 12956 while (self.list.length > 0) {
12862 12957 self.list.pop();
12863 12958 }
12864 12959 }, 10000);
12865 12960 }
12866 12961 };
12867 12962 flashMessages.closeAlert = angular.bind(flashMessages, function (index) {
12868 12963 this.list.splice(index, 1);
12869 12964 this.cancelTimeout();
12870 12965 });
12871 12966 /* add flash messages from template generated on non-xhr request level */
12872 12967 try {
12873 12968 if (AeConfig.flashMessages.length > 0) {
12874 12969 flashMessages.list = AeConfig.flashMessages;
12875 12970 }
12876 12971 }
12877 12972 catch (exc) {
12878 12973
12879 12974 }
12880 12975
12881 12976 var Plugins = {
12882 12977 enabled: [],
12883 12978 configs: {},
12884 12979 callables: [],
12885 12980 inclusions: {},
12886 12981 addInclusion: function (name, inclusion) {
12887 12982 var self = this;
12888 12983 if (self.inclusions.hasOwnProperty(name) === false) {
12889 12984 self.inclusions[name] = [];
12890 12985 }
12891 12986 self.inclusions[name].push(inclusion);
12892 12987 }
12893 12988 };
12894 12989
12895 12990 var stateHolder = {
12896 12991 section: 'settings',
12897 12992 resource: null,
12898 12993 plugins: Plugins,
12899 12994 flashMessages: flashMessages,
12900 12995 AeUser: AeUser,
12901 12996 AeConfig: AeConfig
12902 12997 };
12903 12998 return stateHolder;
12904 12999 }]);
12905 13000
12906 13001 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12907 13002 //
12908 13003 // Licensed under the Apache License, Version 2.0 (the "License");
12909 13004 // you may not use this file except in compliance with the License.
12910 13005 // You may obtain a copy of the License at
12911 13006 //
12912 13007 // http://www.apache.org/licenses/LICENSE-2.0
12913 13008 //
12914 13009 // Unless required by applicable law or agreed to in writing, software
12915 13010 // distributed under the License is distributed on an "AS IS" BASIS,
12916 13011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12917 13012 // See the License for the specific language governing permissions and
12918 13013 // limitations under the License.
12919 13014
12920 13015 angular.module('appenlight.services.typeAheadTagHelper', []).factory('typeAheadTagHelper', function () {
12921 13016 var typeAheadTagHelper = {tags: []};
12922 13017 typeAheadTagHelper.aheadFilter = function (item, viewValue) {
12923 13018 //dont show "deeper" autocomplete like level:foo with exception of application ones
12924 13019 var label_text = item.text || item;
12925 13020 if (label_text.charAt(label_text.length - 1) != ':' && viewValue.indexOf(':') === -1 && label_text.indexOf('resource:') !== 0) {
12926 13021 return false;
12927 13022 }
12928 13023 if (viewValue.length > 2) {
12929 13024 // with apps we need to do it differently
12930 13025 if (viewValue.toLowerCase().indexOf('resource:') == 0) {
12931 13026 viewValue = viewValue.split(':').pop();
12932 13027 }
12933 13028 // check if tags match
12934 13029 if (label_text.toLowerCase().indexOf(viewValue.toLowerCase()) === -1) {
12935 13030 return false;
12936 13031 }
12937 13032 }
12938 13033 return true;
12939 13034 };
12940 13035 typeAheadTagHelper.removeSearchTag = function (tag) {
12941 13036
12942 13037 var indexValue = _.indexOf(typeAheadTagHelper.tags, tag);
12943 13038 typeAheadTagHelper.tags.splice(indexValue, 1);
12944 13039
12945 13040 };
12946 13041 typeAheadTagHelper.addSearchTag = function (tag) {
12947 13042 // do not allow dupes - angular will complain
12948 13043 var found = _.find(typeAheadTagHelper.tags, function (existingTag) {
12949 13044 return existingTag.type == tag.type && existingTag.value == tag.value
12950 13045 });
12951 13046 if (!found) {
12952 13047 typeAheadTagHelper.tags.push(tag);
12953 13048 }
12954 13049 };
12955 13050
12956 13051 return typeAheadTagHelper;
12957 13052 });
12958 13053
12959 13054 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12960 13055 //
12961 13056 // Licensed under the Apache License, Version 2.0 (the "License");
12962 13057 // you may not use this file except in compliance with the License.
12963 13058 // You may obtain a copy of the License at
12964 13059 //
12965 13060 // http://www.apache.org/licenses/LICENSE-2.0
12966 13061 //
12967 13062 // Unless required by applicable law or agreed to in writing, software
12968 13063 // distributed under the License is distributed on an "AS IS" BASIS,
12969 13064 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12970 13065 // See the License for the specific language governing permissions and
12971 13066 // limitations under the License.
12972 13067
12973 13068 angular.module('appenlight.services.UUIDProvider', []).factory('UUIDProvider', function () {
12974 13069 var provider = {
12975 13070 genUUID4: function () {
12976 13071 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
12977 13072 /[xy]/g, function (c) {
12978 13073 var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
12979 13074 return v.toString(16);
12980 13075 }
12981 13076 );
12982 13077 }
12983 13078 };
12984 13079 return provider;
12985 13080 });
12986 13081
12987 13082 ;// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
12988 13083 //
12989 13084 // Licensed under the Apache License, Version 2.0 (the "License");
12990 13085 // you may not use this file except in compliance with the License.
12991 13086 // You may obtain a copy of the License at
12992 13087 //
12993 13088 // http://www.apache.org/licenses/LICENSE-2.0
12994 13089 //
12995 13090 // Unless required by applicable law or agreed to in writing, software
12996 13091 // distributed under the License is distributed on an "AS IS" BASIS,
12997 13092 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12998 13093 // See the License for the specific language governing permissions and
12999 13094 // limitations under the License.
13000 13095
13001 13096 var underscore = angular.module('underscore', []);
13002 13097 underscore.factory('_', function () {
13003 13098 return window._; // assumes underscore has already been loaded on the page
13004 13099 });
@@ -1,44 +1,44 b''
1 1 {
2 2 "name": "appenlight",
3 3 "version": "0.1",
4 4 "authors": [
5 5 "Marcin Lulek <info@webreactor.eu>"
6 6 ],
7 7 "description": "Appenlight main JS files",
8 8 "main": "appenlight.js",
9 9 "moduleType": [
10 10 "amd"
11 11 ],
12 12 "license": "Properietary",
13 13 "homepage": "https://appenlight.com",
14 14 "private": true,
15 15 "ignore": [
16 16 "**/.*",
17 17 "node_modules",
18 18 "bower_components",
19 19 "test",
20 20 "tests"
21 21 ],
22 22 "dependencies": {
23 "angular": "1.5.5",
24 "angular-resource": "1.5.5",
25 "angular-cookies": "1.5.5",
26 "angular-sanitize": "1.5.5",
27 "angular-animate": "1.5.5",
28 "angular-touch": "1.5.5",
29 "angular-route": "1.5.5",
30 "angular-messages": "1.5.5",
31 "angular-mocks": "1.5.5",
32 "angular-scenario": "1.5.5",
23 "angular": "1.7.7",
24 "angular-resource": "1.7.7",
25 "angular-cookies": "1.7.7",
26 "angular-sanitize": "1.7.7",
27 "angular-animate": "1.7.7",
28 "angular-touch": "1.7.7",
29 "angular-route": "1.7.7",
30 "angular-messages": "1.7.7",
31 "angular-mocks": "1.7.7",
32 "angular-scenario": "1.7.7",
33 33 "angular-bootstrap": "1.3.2",
34 34 "angular-ui-router": "1.0.0-beta.3",
35 35 "angular-toArrayFilter" : "1.0.1",
36 36 "d3": "3.5.0",
37 37 "c3": "0.4.11",
38 38 "underscore": "~1.6.0",
39 39 "json-human": "*",
40 40 "moment": "~2.8.1",
41 41 "angular-smart-table": "v2.1.8",
42 42 "ment.io": "0.9.24"
43 43 }
44 44 }
@@ -1,25 +1,28 b''
1 1 {
2 2 "name": "errormator",
3 "description": "JS layer for Errormator",
3 "description": "JS layer for AppEnlight",
4 4 "devDependencies": {
5 "bower": "1.7.9",
5 "bower": "^1.8.8",
6 6 "bower-requirejs": "1.2.0",
7 7 "grunt": "1.0.1",
8 8 "grunt-angular-templates": "1.0.4",
9 9 "grunt-bower-concat": "1.0.0",
10 10 "grunt-bower-requirejs": "2.0.0",
11 11 "grunt-contrib-concat": "1.0.1",
12 12 "grunt-contrib-copy": "1.0.0",
13 13 "grunt-contrib-jshint": "1.0.0",
14 14 "grunt-contrib-less": "1.3.0",
15 15 "grunt-contrib-nodeunit": "1.0.0",
16 16 "grunt-contrib-requirejs": "1.0.0",
17 17 "grunt-contrib-uglify": "1.0.1",
18 18 "grunt-contrib-watch": "1.0.0",
19 19 "grunt-remove-logging": "0.2.0",
20 "ini": "1.3.4",
20 21 "karma": "0.13.22",
21 22 "underscore": "1.8.3",
22 "yo": "1.8.4",
23 "ini": "1.3.4"
23 "yo": "1.8.4"
24 },
25 "dependencies": {
26 "grunt-cli": "^1.3.2"
24 27 }
25 28 }
@@ -1,27 +1,30 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.appenlightHeader', [])
16 16 .component('appenlightFooter', {
17 17 templateUrl: 'templates/components/appenlight-footer.html',
18 18 controller: AppEnlightFooterController
19 19 });
20 20
21 21 ChannelstreamController.$inject = ['stateHolder', 'AeConfig'];
22 22
23 function AppEnlightFooterController(stateHolder, AeConfig){
23 function AppEnlightFooterController(stateHolder, AeConfig) {
24 24 var vm = this;
25 vm.AeConfig = AeConfig;
26 vm.stateHolder = stateHolder;
25
26 vm.$onInit = function () {
27 vm.AeConfig = AeConfig;
28 vm.stateHolder = stateHolder;
29 }
27 30 }
@@ -1,53 +1,56 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.appenlightHeader', [])
16 16 .component('appenlightHeader', {
17 17 templateUrl: 'components/appenlight-header/appenlight-header.html',
18 18 controller: AppEnlightHeaderController
19 19 });
20 20
21 21 ChannelstreamController.$inject = ['$state', 'stateHolder', 'AeConfig'];
22 22
23 function AppEnlightHeaderController($state, stateHolder, AeConfig){
23 function AppEnlightHeaderController($state, stateHolder, AeConfig) {
24 24 var vm = this;
25 vm.AeConfig = AeConfig;
26 vm.stateHolder = stateHolder;
27 vm.assignedReports = stateHolder.AeUser.assigned_reports;
28 vm.latestEvents = stateHolder.AeUser.latest_events;
29 vm.activeEvents = 0;
30 _.each(vm.latestEvents, function (event) {
31 if (event.status === 1 && event.end_date === null) {
32 vm.activeEvents += 1;
33 }
34 });
35 25
36 vm.clickedEvent = function(event){
26 vm.$onInit = function () {
27
28 vm.AeConfig = AeConfig;
29 vm.stateHolder = stateHolder;
30 vm.assignedReports = stateHolder.AeUser.assigned_reports;
31 vm.latestEvents = stateHolder.AeUser.latest_events;
32 vm.activeEvents = 0;
33 _.each(vm.latestEvents, function (event) {
34 if (event.status === 1 && event.end_date === null) {
35 vm.activeEvents += 1;
36 }
37 });
38 }
39
40 vm.clickedEvent = function (event) {
37 41 // exception reports
38 if (_.contains([1,2], event.event_type)){
39 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
42 if (_.contains([1, 2], event.event_type)) {
43 $state.go('report.list', {resource: event.resource_id, start_date: event.start_date});
40 44 }
41 45 // slowness reports
42 else if (_.contains([3,4], event.event_type)){
43 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
46 else if (_.contains([3, 4], event.event_type)) {
47 $state.go('report.list_slow', {resource: event.resource_id, start_date: event.start_date});
44 48 }
45 49 // uptime reports
46 else if (_.contains([7,8], event.event_type)){
47 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
48 }
49 else{
50 else if (_.contains([7, 8], event.event_type)) {
51 $state.go('uptime', {resource: event.resource_id, start_date: event.start_date});
52 } else {
50 53 console.log('other');
51 54 }
52 55 }
53 56 }
@@ -1,34 +1,36 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminApplicationsListView', [])
16 16 .component('adminApplicationsListView', {
17 17 templateUrl: 'components/views/admin-applications-list-view/admin-applications-list-view.html',
18 18 controller: AdminApplicationsListController
19 19 });
20 20
21 21 AdminApplicationsListController.$inject = ['applicationsResource'];
22 22
23 23 function AdminApplicationsListController(applicationsResource) {
24 24 console.debug('AdminApplicationsListController');
25 25 var vm = this;
26 vm.loading = {applications: true};
26 vm.$onInit = function () {
27 vm.loading = {applications: true};
27 28
28 vm.applications = applicationsResource.query({
29 root_list: true,
30 resource_type: 'application'
31 }, function (data) {
32 vm.loading = {applications: false};
33 });
29 vm.applications = applicationsResource.query({
30 root_list: true,
31 resource_type: 'application'
32 }, function (data) {
33 vm.loading = {applications: false};
34 });
35 }
34 36 };
@@ -1,56 +1,57 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminConfigurationView', [])
16 16 .component('adminConfigurationView', {
17 17 templateUrl: 'components/views/admin-configuration-view/admin-configuration-view.html',
18 18 controller: AdminConfigurationViewController
19 19 });
20 20
21 21 AdminConfigurationViewController.$inject = ['configsResource', 'configsNoIdResource'];
22 22
23 23 function AdminConfigurationViewController(configsResource, configsNoIdResource) {
24 24 var vm = this;
25 vm.loading = {config: true};
26
27 var filters = [
28 'template_footer_html:global',
29 'list_groups_to_non_admins:global',
30 'per_application_reports_rate_limit:global',
31 'per_application_logs_rate_limit:global',
32 'per_application_metrics_rate_limit:global',
33 ];
34
35 vm.configs = {};
36
37 vm.configList = configsResource.query({filter: filters},
38 function (data) {
39 vm.loading = {config: false};
40 _.each(data, function (item) {
41 if (vm.configs[item.section] === undefined) {
42 vm.configs[item.section] = {};
43 }
44 vm.configs[item.section][item.key] = item;
25 vm.$onInit = function () {
26 vm.loading = {config: true};
27
28 var filters = [
29 'template_footer_html:global',
30 'list_groups_to_non_admins:global',
31 'per_application_reports_rate_limit:global',
32 'per_application_logs_rate_limit:global',
33 'per_application_metrics_rate_limit:global',
34 ];
35
36 vm.configs = {};
37
38 vm.configList = configsResource.query({filter: filters},
39 function (data) {
40 vm.loading = {config: false};
41 _.each(data, function (item) {
42 if (vm.configs[item.section] === undefined) {
43 vm.configs[item.section] = {};
44 }
45 vm.configs[item.section][item.key] = item;
46 });
45 47 });
46 });
47
48 }
48 49 vm.save = function () {
49 50 vm.loading.config = true;
50 51 _.each(vm.configList, function (item) {
51 52 item.$save();
52 53 });
53 54 vm.loading.config = false;
54 55 };
55 56
56 57 };
@@ -1,142 +1,143 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminGroupsCreateView', [])
16 16 .component('adminGroupsCreateView', {
17 17 templateUrl: 'components/views/admin-groups-create-view/admin-groups-create-view.html',
18 18 controller: AdminGroupsCreateViewController
19 19 });
20 20
21 21 AdminGroupsCreateViewController.$inject = ['$state', 'groupsResource', 'groupsPropertyResource', 'sectionViewResource'];
22 22
23 23 function AdminGroupsCreateViewController($state, groupsResource, groupsPropertyResource, sectionViewResource) {
24 24 console.debug('AdminGroupsCreateController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {
28 group: false,
29 resource_permissions: false,
30 users: false
31 };
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {
29 group: false,
30 resource_permissions: false,
31 users: false
32 };
32 33
33 vm.form = {
34 autocompleteUser: '',
35 }
34 vm.form = {
35 autocompleteUser: '',
36 }
36 37
37 38
38 if (typeof $state.params.groupId !== 'undefined') {
39 vm.loading.group = true;
40 var groupId = $state.params.groupId;
41 vm.group = groupsResource.get({groupId: groupId}, function (data) {
42 vm.loading.group = false;
43 });
39 if (typeof $state.params.groupId !== 'undefined') {
40 vm.loading.group = true;
41 var groupId = $state.params.groupId;
42 vm.group = groupsResource.get({groupId: groupId}, function (data) {
43 vm.loading.group = false;
44 });
44 45
45 vm.resource_permissions = groupsPropertyResource.query(
46 {groupId: groupId, key: 'resource_permissions'}, function (data) {
47 vm.loading.resource_permissions = false;
48 var tmpObj = {
49 'group': {
50 'application': {},
51 'dashboard': {}
52 }
53 };
54 _.each(data, function (item) {
55 console.log(item);
56 var section = tmpObj[item.type][item.resource_type];
57 if (typeof section[item.resource_id] == 'undefined') {
58 section[item.resource_id] = {
59 self: item,
60 permissions: []
46 vm.resource_permissions = groupsPropertyResource.query(
47 {groupId: groupId, key: 'resource_permissions'}, function (data) {
48 vm.loading.resource_permissions = false;
49 var tmpObj = {
50 'group': {
51 'application': {},
52 'dashboard': {}
53 }
54 };
55 _.each(data, function (item) {
56 console.log(item);
57 var section = tmpObj[item.type][item.resource_type];
58 if (typeof section[item.resource_id] == 'undefined') {
59 section[item.resource_id] = {
60 self: item,
61 permissions: []
62 }
61 63 }
62 }
63 section[item.resource_id].permissions.push(item.perm_name);
64 section[item.resource_id].permissions.push(item.perm_name);
64 65
66 });
67 console.log(tmpObj)
68 vm.resourcePermissions = tmpObj;
65 69 });
66 console.log(tmpObj)
67 vm.resourcePermissions = tmpObj;
68 });
69 70
70 vm.users = groupsPropertyResource.query(
71 {groupId: groupId, key: 'users'}, function (data) {
72 vm.loading.users = false;
73 }, function () {
74 vm.loading.users = false;
75 });
71 vm.users = groupsPropertyResource.query(
72 {groupId: groupId, key: 'users'}, function (data) {
73 vm.loading.users = false;
74 }, function () {
75 vm.loading.users = false;
76 });
77
78 } else {
79 var groupId = null;
80 }
76 81
77 }
78 else {
79 var groupId = null;
80 82 }
81 83
82 84 var formResponse = function (response) {
83 85 if (response.status === 422) {
84 86 setServerValidation(vm.groupForm, response.data);
85 87 }
86 88 vm.loading.group = false;
87 89 };
88 90
89 91 vm.createGroup = function () {
90 92 vm.loading.group = true;
91 93 if (groupId) {
92 94 groupsResource.update({groupId: vm.group.id}, vm.group, function (data) {
93 95 setServerValidation(vm.groupForm);
94 96 vm.loading.group = false;
95 97 }, formResponse);
96 }
97 else {
98 } else {
98 99 groupsResource.save(vm.group, function (data) {
99 100 $state.go('admin.group.update', {groupId: data.id});
100 101 }, formResponse);
101 102 }
102 103 };
103 104
104 105 vm.removeUser = function (user) {
105 106 groupsPropertyResource.delete(
106 107 {groupId: groupId, key: 'users', user_name: user.user_name},
107 108 function (data) {
108 109 vm.loading.users = false;
109 110 vm.users = _.filter(vm.users, function (item) {
110 111 return item != user;
111 112 });
112 113 }, function () {
113 114 vm.loading.users = false;
114 115 });
115 116 };
116 117
117 118 vm.addUser = function () {
118 119 groupsPropertyResource.save(
119 120 {groupId: groupId, key: 'users'},
120 121 {user_name: vm.form.autocompleteUser},
121 122 function (data) {
122 123 vm.loading.users = false;
123 124 vm.users.push(data);
124 125 vm.form.autocompleteUser = '';
125 126 }, function () {
126 127 vm.loading.users = false;
127 128 });
128 129 }
129 130
130 131 vm.searchUsers = function (searchPhrase) {
131 132 console.log(searchPhrase);
132 133 return sectionViewResource.query({
133 134 section: 'users_section',
134 135 view: 'search_users',
135 136 'user_name': searchPhrase
136 137 }).$promise.then(function (data) {
137 return _.map(data, function (item) {
138 return item.user;
139 });
138 return _.map(data, function (item) {
139 return item.user;
140 140 });
141 });
141 142 }
142 143 };
@@ -1,53 +1,54 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminGroupsListView', [])
16 16 .component('adminGroupsListView', {
17 17 templateUrl: 'components/views/admin-groups-list-view/admin-groups-list-view.html',
18 18 controller: AdminGroupsListViewController
19 19 });
20 20
21 21 AdminGroupsListViewController.$inject = ['$state', 'groupsResource'];
22 22
23 23 function AdminGroupsListViewController($state, groupsResource) {
24 24 console.debug('AdminGroupsListViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {groups: true};
28
29 vm.groups = groupsResource.query({}, function (data) {
30 vm.loading = {groups: false};
31 vm.activeUsers = _.reduce(vm.groups, function(memo, val){
32 if (val.status == 1){
33 return memo + 1;
34 }
35 return memo;
36 }, 0);
37 console.log(vm.groups);
38 });
26 this.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {groups: true};
39 29
30 vm.groups = groupsResource.query({}, function (data) {
31 vm.loading = {groups: false};
32 vm.activeUsers = _.reduce(vm.groups, function (memo, val) {
33 if (val.status == 1) {
34 return memo + 1;
35 }
36 return memo;
37 }, 0);
38 console.log(vm.groups);
39 });
40 }
40 41
41 42 vm.removeGroup = function (group) {
42 43 groupsResource.remove({groupId: group.id}, function (data, responseHeaders) {
43 console.log('x',data, responseHeaders());
44 console.log('x', data, responseHeaders());
44 45 if (data) {
45 46 var index = vm.groups.indexOf(group);
46 47 if (index !== -1) {
47 48 vm.groups.splice(index, 1);
48 49 vm.activeGroups -= 1;
49 50 }
50 51 }
51 52 });
52 53 }
53 54 };
@@ -1,123 +1,124 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminPartitionsView', [])
16 16 .component('adminPartitionsView', {
17 17 templateUrl: 'components/views/admin-partitions-view/admin-partitions-view.html',
18 18 controller: AdminPartitionsViewController
19 19 });
20 20
21 21 AdminPartitionsViewController.$inject = ['sectionViewResource'];
22 22
23 23 function AdminPartitionsViewController(sectionViewResource) {
24 24 var vm = this;
25 vm.permanentPartitions = [];
26 vm.dailyPartitions = [];
27 vm.loading = {partitions: true};
28 vm.dailyChecked = false;
29 vm.permChecked = false;
30 vm.dailyConfirm = '';
31 vm.permConfirm = '';
25 this.$onInit = function () {
26 vm.permanentPartitions = [];
27 vm.dailyPartitions = [];
28 vm.loading = {partitions: true};
29 vm.dailyChecked = false;
30 vm.permChecked = false;
31 vm.dailyConfirm = '';
32 vm.permConfirm = '';
32 33
34 sectionViewResource.get({section: 'admin_section', view: 'partitions'},
35 vm.loadPartitions);
36 }
33 37
34 38 vm.loadPartitions = function (data) {
35 39 var permanentPartitions = vm.transformPartitionList(
36 40 data.permanent_partitions);
37 41 var dailyPartitions = vm.transformPartitionList(
38 42 data.daily_partitions);
39 43 vm.permanentPartitions = permanentPartitions;
40 44 vm.dailyPartitions = dailyPartitions;
41 45 vm.loading = {partitions: false};
42 46 };
43 47
44 48 vm.setCheckedList = function (scope) {
45 49 var toTest = null;
46 if (scope === 'dailyPartitions'){
50 if (scope === 'dailyPartitions') {
47 51 toTest = 'dailyChecked';
48 }
49 else{
52 } else {
50 53 toTest = 'permChecked';
51 54 }
52 55
53 56 if (vm[toTest]) {
54 57 var val = true;
55 }
56 else {
58 } else {
57 59 var val = false;
58 60 }
59 61 console.log('scope', scope);
60 62 _.each(vm[scope], function (item) {
61 63 _.each(item[1].pg, function (index) {
62 64 index.checked = val;
63 65 });
64 66 _.each(item[1].elasticsearch, function (index) {
65 67 index.checked = val;
66 68 });
67 69 });
68 70 }
69 71
70 72
71 73 vm.transformPartitionList = function (inputList) {
72 74 var outputList = [];
73 75
74 76 _.each(inputList, function (item) {
75 77 var time = [item[0], {
76 78 elasticsearch: [],
77 79 pg: []
78 80 }]
79 81 _.each(item[1].pg, function (index) {
80 82 time[1].pg.push({name: index, checked: false})
81 83 });
82 84 _.each(item[1].elasticsearch, function (index) {
83 85 time[1].elasticsearch.push({
84 86 name: index,
85 87 checked: false
86 88 })
87 89 });
88 90 outputList.push(time);
89 91 });
90 92 return outputList;
91 93 };
92 94
93 sectionViewResource.get({section:'admin_section', view: 'partitions'},
94 vm.loadPartitions);
95
96 95 vm.partitionsDelete = function (partitionType) {
97 96 var es_indices = [];
98 97 var pg_indices = [];
99 98 _.each(vm[partitionType], function (item) {
100 99 _.each(item[1].pg, function (index) {
101 100 if (index.checked) {
102 101 pg_indices.push(index.name)
103 102 }
104 103 });
105 104 _.each(item[1].elasticsearch, function (index) {
106 105 if (index.checked) {
107 106 es_indices.push(index.name)
108 107 }
109 108 });
110 109 });
111 110 console.log(es_indices, pg_indices);
112 111
113 112 vm.loading = {partitions: true};
114 sectionViewResource.save({section:'admin_section',
115 view: 'partitions_remove'}, {
113 sectionViewResource.save({
114 section: 'admin_section',
115 view: 'partitions_remove'
116 }, {
116 117 es_indices: es_indices,
117 118 pg_indices: pg_indices,
118 119 confirm: 'CONFIRM'
119 120 }, vm.loadPartitions);
120 121
121 122 }
122 123
123 124 }
@@ -1,43 +1,45 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminSystemView', [])
16 16 .component('adminSystemView', {
17 17 templateUrl: 'components/views/admin-system-view/admin-system-view.html',
18 18 controller: AdminSystemViewController
19 19 });
20 20
21 21 AdminSystemViewController.$inject = ['sectionViewResource'];
22 22
23 23 function AdminSystemViewController(sectionViewResource) {
24 24 var vm = this;
25 vm.tables = [];
26 vm.loading = {system: true};
27 sectionViewResource.get({
28 section: 'admin_section',
29 view: 'system'
30 }, null, function (data) {
31 vm.DBtables = data.db_tables;
32 vm.ESIndices = data.es_indices;
33 vm.queueStats = data.queue_stats;
34 vm.systemLoad = data.system_load;
35 vm.packages = data.packages;
36 vm.processInfo = data.process_info;
37 vm.disks = data.disks;
38 vm.memory = data.memory;
39 vm.selfInfo = data.self_info;
25 this.$onInit = function () {
26 vm.tables = [];
27 vm.loading = {system: true};
40 28
41 vm.loading.system = false;
42 });
29 sectionViewResource.get({
30 section: 'admin_section',
31 view: 'system'
32 }, null, function (data) {
33 vm.DBtables = data.db_tables;
34 vm.ESIndices = data.es_indices;
35 vm.queueStats = data.queue_stats;
36 vm.systemLoad = data.system_load;
37 vm.packages = data.packages;
38 vm.processInfo = data.process_info;
39 vm.disks = data.disks;
40 vm.memory = data.memory;
41 vm.selfInfo = data.self_info;
42 vm.loading.system = false;
43 });
44 }
43 45 };
@@ -1,121 +1,122 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminUsersCreateView', [])
16 16 .component('adminUsersCreateView', {
17 17 templateUrl: 'components/views/admin-users-create-view/admin-users-create-view.html',
18 18 controller: AdminUsersCreateViewController
19 19 });
20 20
21 21 AdminUsersCreateViewController.$inject = ['$state', 'usersResource', 'usersPropertyResource', 'sectionViewResource', 'AeConfig'];
22 22
23 23 function AdminUsersCreateViewController($state, usersResource, usersPropertyResource, sectionViewResource, AeConfig) {
24 24 console.debug('AdminUsersCreateViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {user: false};
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {user: false};
28 29
29 30
30 if (typeof $state.params.userId !== 'undefined') {
31 vm.loading.user = true;
32 var userId = $state.params.userId;
33 vm.user = usersResource.get({userId: userId}, function (data) {
34 vm.loading.user = false;
35 // cast to true for angular checkbox
36 if (vm.user.status === 1) {
37 vm.user.status = true;
38 }
39 });
31 if (typeof $state.params.userId !== 'undefined') {
32 vm.loading.user = true;
33 var userId = $state.params.userId;
34 vm.user = usersResource.get({userId: userId}, function (data) {
35 vm.loading.user = false;
36 // cast to true for angular checkbox
37 if (vm.user.status === 1) {
38 vm.user.status = true;
39 }
40 });
40 41
41 vm.resource_permissions = usersPropertyResource.query(
42 {userId: userId, key: 'resource_permissions'}, function (data) {
43 vm.loading.resource_permissions = false;
44 var tmpObj = {
45 'user': {
46 'application': {},
47 'dashboard': {}
48 },
49 'group': {
50 'application': {},
51 'dashboard': {}
52 }
53 };
54 _.each(data, function (item) {
55 console.log(item);
56 var section = tmpObj[item.type][item.resource_type];
57 if (typeof section[item.resource_id] == 'undefined'){
58 section[item.resource_id] = {
59 self:item,
60 permissions: []
42 vm.resource_permissions = usersPropertyResource.query(
43 {userId: userId, key: 'resource_permissions'}, function (data) {
44 vm.loading.resource_permissions = false;
45 var tmpObj = {
46 'user': {
47 'application': {},
48 'dashboard': {}
49 },
50 'group': {
51 'application': {},
52 'dashboard': {}
61 53 }
62 }
63 section[item.resource_id].permissions.push(item.perm_name);
54 };
55 _.each(data, function (item) {
56 console.log(item);
57 var section = tmpObj[item.type][item.resource_type];
58 if (typeof section[item.resource_id] == 'undefined') {
59 section[item.resource_id] = {
60 self: item,
61 permissions: []
62 }
63 }
64 section[item.resource_id].permissions.push(item.perm_name);
64 65
66 });
67 console.log(tmpObj)
68 vm.resourcePermissions = tmpObj;
65 69 });
66 console.log(tmpObj)
67 vm.resourcePermissions = tmpObj;
68 });
69 70
70 }
71 else {
72 var userId = null;
73 vm.user = {
74 status: true
71 } else {
72 var userId = null;
73 vm.user = {
74 status: true
75 }
75 76 }
76 77 }
77 78
78 79 var formResponse = function (response) {
79 80 if (response.status == 422) {
80 81 setServerValidation(vm.profileForm, response.data);
81 82 }
82 83 vm.loading.user = false;
83 84 }
84 85
85 86 vm.createUser = function () {
86 87 vm.loading.user = true;
87 88 console.log('updateProfile');
88 89 if (userId) {
89 90 usersResource.update({userId: vm.user.id}, vm.user, function (data) {
90 91 setServerValidation(vm.profileForm);
91 92 vm.loading.user = false;
92 93 }, formResponse);
93 94 }
94 95 else {
95 96 usersResource.save(vm.user, function (data) {
96 97 $state.go('admin.user.update', {userId: data.id});
97 98 }, formResponse);
98 99 }
99 100 }
100 101
101 102 vm.generatePassword = function () {
102 103 var length = 8;
103 104 var charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
104 105 vm.gen_pass = "";
105 106 for (var i = 0, n = charset.length; i < length; ++i) {
106 107 vm.gen_pass += charset.charAt(Math.floor(Math.random() * n));
107 108 }
108 109 vm.user.user_password = '' + vm.gen_pass;
109 110 console.log('x', vm.gen_pass);
110 111 }
111 112
112 113 vm.reloginUser = function () {
113 114 sectionViewResource.get({
114 115 section: 'admin_section', view: 'relogin_user',
115 116 user_id: vm.user.id
116 117 }, function () {
117 118 window.location = AeConfig.urls.baseUrl;
118 119 });
119 120
120 121 }
121 122 };
@@ -1,52 +1,53 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminUsersListView', [])
16 16 .component('adminUsersListView', {
17 17 templateUrl: 'components/views/admin-users-list-view/admin-users-list-view.html',
18 18 controller: AdminUserListViewController
19 19 });
20 20
21 21 AdminUserListViewController.$inject = ['usersResource'];
22 22
23 23 function AdminUserListViewController(usersResource) {
24 24 console.debug('AdminUsersController');
25 25 var vm = this;
26 vm.loading = {users: true};
27
28 vm.users = usersResource.query({}, function (data) {
29 vm.loading = {users: false};
30 vm.activeUsers = _.reduce(vm.users, function(memo, val){
31 if (val.status == 1){
32 return memo + 1;
33 }
34 return memo;
35 }, 0);
36 console.log(vm.users);
37 });
26 vm.$onInit = function () {
27 vm.loading = {users: true};
38 28
29 vm.users = usersResource.query({}, function (data) {
30 vm.loading = {users: false};
31 vm.activeUsers = _.reduce(vm.users, function (memo, val) {
32 if (val.status == 1) {
33 return memo + 1;
34 }
35 return memo;
36 }, 0);
37 console.log(vm.users);
38 });
39 }
39 40
40 41 vm.removeUser = function (user) {
41 42 usersResource.remove({userId: user.id}, function (data, responseHeaders) {
42 43 console.log('x',data, responseHeaders());
43 44 if (data) {
44 45 var index = vm.users.indexOf(user);
45 46 if (index !== -1) {
46 47 vm.users.splice(index, 1);
47 48 vm.activeUsers -= 1;
48 49 }
49 50 }
50 51 });
51 52 }
52 53 };
@@ -1,27 +1,30 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.adminView', [])
16 16 .component('adminView', {
17 17 templateUrl: 'components/views/admin-view/admin-view.html',
18 18 controller: AdminViewController
19 19 });
20 20
21 21 AdminViewController.$inject = ['$state', 'AeConfig'];
22 22
23 23 function AdminViewController($state, AeConfig) {
24 this.$state = $state;
25 this.AeConfig = AeConfig;
26 console.info('AdminViewController');
24 this.$onInit = function () {
25 this.$state = $state;
26 this.AeConfig = AeConfig;
27 console.info('AdminViewController');
28 }
29
27 30 }
@@ -1,31 +1,33 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.integrationsListView', [])
16 16 .component('integrationsListView', {
17 17 templateUrl: 'components/views/applications-integrations-view/applications-integrations-view.html',
18 18 controller: IntegrationsListViewController
19 19 });
20 20
21 21 IntegrationsListViewController.$inject = ['$state', 'applicationsResource'];
22 22
23 23 function IntegrationsListViewController($state, applicationsResource) {
24 24 console.debug('IntegrationsListController');
25 25 var vm = this;
26 vm.loading = {application: true};
27 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
28 vm.loading.application = false;
29 $state.current.data.resource = vm.resource;
30 });
26 vm.$onInit = function () {
27 vm.loading = {application: true};
28 vm.resource = applicationsResource.get({resourceId: $state.params.resourceId}, function (data) {
29 vm.loading.application = false;
30 $state.current.data.resource = vm.resource;
31 });
32 }
31 33 }
@@ -1,31 +1,33 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.applicationsListView', [])
16 16 .component('applicationsListView', {
17 17 templateUrl: 'components/views/applications-list-view/applications-list-view.html',
18 18 controller: ApplicationsListViewController
19 19 });
20 20
21 21 ApplicationsListViewController.$inject = ['$state', 'applicationsResource'];
22 22
23 23 function ApplicationsListViewController($state, applicationsResource) {
24 24 console.debug('ApplicationsListController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {applications: true};
28 vm.applications = applicationsResource.query(null, function(){
29 vm.loading.applications = false;
30 });
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {applications: true};
29 vm.applications = applicationsResource.query(null, function () {
30 vm.loading.applications = false;
31 });
32 }
31 33 }
@@ -1,59 +1,63 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.applicationsPurgeLogsView', [])
16 16 .component('applicationsPurgeLogsView', {
17 17 templateUrl: 'components/views/applications-purge-logs-view/applications-purge-logs-view.html',
18 18 controller: applicationsPurgeLogsViewController
19 19 });
20 20
21 applicationsPurgeLogsViewController.$inject = ['$state' ,'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
21 applicationsPurgeLogsViewController.$inject = ['$state', 'applicationsResource', 'sectionViewResource', 'logsNoIdResource'];
22 22
23 23 function applicationsPurgeLogsViewController($state, applicationsResource, sectionViewResource, logsNoIdResource) {
24 24 console.debug('applicationsPurgeLogsViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {applications: true};
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {applications: true};
28 29
29 vm.namespace = null;
30 vm.selectedResource = null;
31 vm.commonNamespaces = [];
30 vm.namespace = null;
31 vm.selectedResource = null;
32 vm.commonNamespaces = [];
32 33
33 vm.applications = applicationsResource.query({'type':'update_reports'}, function () {
34 vm.loading.applications = false;
35 vm.selectedResource = vm.applications[0].resource_id;
36 vm.getCommonKeys();
37 });
34 vm.applications = applicationsResource.query({'type': 'update_reports'}, function () {
35 vm.loading.applications = false;
36 vm.selectedResource = vm.applications[0].resource_id;
37 vm.getCommonKeys();
38 });
39 }
38 40
39 41 /**
40 42 * Fetches most commonly used tags in logs
41 43 */
42 44 vm.getCommonKeys = function () {
43 45 sectionViewResource.get({
44 46 section: 'logs_section',
45 47 view: 'common_tags',
46 48 resource: vm.selectedResource
47 49 }, function (data) {
48 50 vm.commonNamespaces = data['namespaces']
49 51 });
50 52 };
51 53
52 54 vm.purgeLogs = function () {
53 55 vm.loading.applications = true;
54 logsNoIdResource.delete({resource:vm.selectedResource,
55 namespace: vm.namespace}, function(){
56 logsNoIdResource.delete({
57 resource: vm.selectedResource,
58 namespace: vm.namespace
59 }, function () {
56 60 vm.loading.applications = false;
57 61 });
58 62 }
59 63 }
@@ -1,165 +1,165 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.applicationsUpdateView', [])
16 16 .component('applicationsUpdateView', {
17 17 templateUrl: 'components/views/applications-update-view/applications-update-view.html',
18 18 controller: applicationsUpdateViewController
19 19 });
20 20
21 21 applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder', 'AeConfig'];
22 22
23 23 function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder, AeConfig) {
24 24 'use strict';
25 25 console.debug('applicationsUpdateView');
26 26 var vm = this;
27 vm.AeConfig = AeConfig;
28 vm.$state = $state;
29 vm.loading = {application: false};
27 vm.$onInit = function () {
28 vm.AeConfig = AeConfig;
29 vm.$state = $state;
30 vm.loading = {application: false};
30 31
31 vm.groupingOptions = [
32 ['url_type', 'Error Type + location'],
33 ['url_traceback', 'Traceback + location'],
34 ['traceback_server', 'Traceback + Server'],
35 ];
36 var resourceId = $state.params.resourceId;
37 var options = {};
38 vm.momentJs = moment;
39 vm.formTransferModel = {password:''};
32 vm.groupingOptions = [
33 ['url_type', 'Error Type + location'],
34 ['url_traceback', 'Traceback + location'],
35 ['traceback_server', 'Traceback + Server'],
36 ];
37 var resourceId = $state.params.resourceId;
38 var options = {};
39 vm.momentJs = moment;
40 vm.formTransferModel = {password: ''};
40 41
41 // set initial data
42 // set initial data
42 43
43 if (resourceId === 'new') {
44 vm.resource = {
45 resource_id: null,
46 slow_report_threshold: 10,
47 error_report_threshold: 10,
48 allow_permanent_storage: true,
49 default_grouping: vm.groupingOptions[1][0]
50 };
51 }
52 else {
53 vm.loading.application = true;
54 vm.resource = applicationsResource.get({
55 'resourceId': resourceId
56 }, function (data) {
57 vm.loading.application = false;
58 });
44 if (resourceId === 'new') {
45 vm.resource = {
46 resource_id: null,
47 slow_report_threshold: 10,
48 error_report_threshold: 10,
49 allow_permanent_storage: true,
50 default_grouping: vm.groupingOptions[1][0]
51 };
52 } else {
53 vm.loading.application = true;
54 vm.resource = applicationsResource.get({
55 'resourceId': resourceId
56 }, function (data) {
57 vm.loading.application = false;
58 });
59 }
59 60 }
60 61
61
62 62 vm.updateBasicForm = function () {
63 63 vm.loading.application = true;
64 64 if (vm.resource.resource_id === null) {
65 65 applicationsNoIdResource.save(null, vm.resource, function (data) {
66 66 stateHolder.AeUser.addApplication(data);
67 67 $state.go('applications.update', {resourceId: data.resource_id});
68 68 setServerValidation(vm.BasicForm);
69 69 }, function (response) {
70 70 if (response.status == 422) {
71 71 setServerValidation(vm.BasicForm, response.data);
72 72 }
73 73 vm.loading.application = false;
74 74 console.log(vm.BasicForm);
75 75 });
76 76 }
77 77 else {
78 78 applicationsResource.update({resourceId: vm.resource.resource_id},
79 79 vm.resource, function (data) {
80 80 vm.resource = data;
81 81 vm.loading.application = false;
82 82 setServerValidation(vm.BasicForm);
83 83 }, function (response) {
84 84 if (response.status == 422) {
85 85 setServerValidation(vm.BasicForm, response.data);
86 86 }
87 87 vm.loading.application = false;
88 88 });
89 89 }
90 90 };
91 91
92 92 vm.addRule = function () {
93 93 console.log('addrule');
94 94 applicationsPropertyResource.save({
95 95 resourceId: vm.resource.resource_id,
96 96 key: 'postprocessing_rules'
97 97 }, null,
98 98 function (data) {
99 99 vm.resource.postprocessing_rules.push(data);
100 100 }
101 101 );
102 102 };
103 103
104 104 vm.regenerateAPIKeys = function(){
105 105 vm.loading.application = true;
106 106 applicationsPropertyResource.save({
107 107 resourceId: vm.resource.resource_id,
108 108 key: 'api_key'
109 109 }, {password: vm.regenerateAPIKeysPassword},
110 110 function (data) {
111 111 vm.resource = data;
112 112 vm.loading.application = false;
113 113 vm.regenerateAPIKeysPassword = '';
114 114 setServerValidation(vm.regenerateAPIKeysForm);
115 115 },
116 116 function (response) {
117 117 if (response.status == 422) {
118 118 setServerValidation(vm.regenerateAPIKeysForm, response.data);
119 119 console.log(response.data);
120 120 }
121 121 vm.loading.application = false;
122 122 }
123 123 )
124 124 };
125 125
126 126 vm.deleteApplication = function(){
127 127 vm.loading.application = true;
128 128 applicationsPropertyResource.update({
129 129 resourceId: vm.resource.resource_id,
130 130 key: 'delete_resource'
131 131 }, vm.formDeleteModel,
132 132 function (data) {
133 133 stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
134 134 $state.go('applications.list');
135 135 },
136 136 function (response) {
137 137 if (response.status == 422) {
138 138 setServerValidation(vm.formDelete, response.data);
139 139 console.log(response.data);
140 140 }
141 141 vm.loading.application = false;
142 142 }
143 143 );
144 144 };
145 145
146 146 vm.transferApplication = function(){
147 147 vm.loading.application = true;
148 148 applicationsPropertyResource.update({
149 149 resourceId: vm.resource.resource_id,
150 150 key: 'owner'
151 151 }, vm.formTransferModel,
152 152 function (data) {
153 153 $state.go('applications.list');
154 154 },
155 155 function (response) {
156 156 if (response.status == 422) {
157 157 setServerValidation(vm.formTransfer, response.data);
158 158 console.log(response.data);
159 159 }
160 160 vm.loading.application = false;
161 161 }
162 162 )
163 163 }
164 164
165 165 }
@@ -1,43 +1,44 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.eventBrowserView', [])
16 16 .component('eventBrowserView', {
17 17 templateUrl: 'components/views/event-browser/event-browser.html',
18 18 controller: EventBrowserController
19 19 });
20 20
21 21 EventBrowserController.$inject = ['eventsNoIdResource', 'eventsResource'];
22 22
23 23 function EventBrowserController(eventsNoIdResource, eventsResource) {
24 24 console.info('EventBrowserController');
25 25 var vm = this;
26 vm.$onInit = function () {
26 27
27 vm.loading = {events: true};
28
29 vm.events = eventsNoIdResource.query(
30 {key: 'events'},
31 function (data) {
32 vm.loading.events = false;
33 });
28 vm.loading = {events: true};
34 29
30 vm.events = eventsNoIdResource.query(
31 {key: 'events'},
32 function (data) {
33 vm.loading.events = false;
34 });
35 }
35 36
36 37 vm.closeEvent = function (event) {
37 38 console.log('closeEvent');
38 39 eventsResource.update({eventId: event.id}, {status: 0}, function (data) {
39 40 event.status = 0;
40 41 });
41 42 }
42 43
43 44 }
This diff has been collapsed as it changes many lines, (664 lines changed) Show them Hide them
@@ -1,661 +1,663 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.indexDashboardView', [])
16 16 .component('indexDashboardView', {
17 17 templateUrl: 'components/views/index-dashboard/index-dashboard.html',
18 18 controller: IndexDashboardController
19 19 });
20 20
21 21 IndexDashboardController.$inject = ['$rootScope', '$scope', '$location','$cookies', '$interval', 'stateHolder', 'applicationsPropertyResource', 'AeConfig'];
22 22
23 23 function IndexDashboardController($rootScope, $scope, $location, $cookies, $interval, stateHolder, applicationsPropertyResource, AeConfig) {
24 24 var vm = this;
25 stateHolder.section = 'dashboard';
26 vm.timeOptions = {};
27 var allowed = ['1h', '4h', '12h', '24h', '1w', '2w', '1M'];
28 _.each(allowed, function (key) {
29 if (allowed.indexOf(key) !== -1) {
30 vm.timeOptions[key] = AeConfig.timeOptions[key];
31 }
32 });
33 vm.stateHolder = stateHolder;
34 vm.urls = AeConfig.urls;
35 vm.applications = stateHolder.AeUser.applications_map;
36 vm.show_dashboard = false;
37 vm.resource = null;
38 vm.graphType = {selected: null};
39 vm.timeSpan = vm.timeOptions['1h'];
40 vm.trendingReports = [];
41 vm.exceptions = 0;
42 vm.satisfyingRequests = 0;
43 vm.toleratedRequests = 0;
44 vm.frustratingRequests = 0;
45 vm.uptimeStats = 0;
46 vm.apdexStats = [];
47 vm.seriesRequestsData = [];
48 vm.seriesMetricsData = [];
49 vm.seriesSlowData = [];
50 vm.slowCalls = [];
51 vm.slowURIS = [];
52
53 vm.reportChartConfig = {
54 data: {
55 json: [],
56 xFormat: '%Y-%m-%dT%H:%M:%S'
57 },
58 color: {
59 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
60 },
61 axis: {
62 x: {
63 type: 'timeseries',
64 tick: {
65 culling: {
66 max: 6 // the number of tick texts will be adjusted to less than this value
67 },
68 format: '%Y-%m-%d %H:%M'
25 vm.$onInit = function () {
26 stateHolder.section = 'dashboard';
27 vm.timeOptions = {};
28 var allowed = ['1h', '4h', '12h', '24h', '1w', '2w', '1M'];
29 _.each(allowed, function (key) {
30 if (allowed.indexOf(key) !== -1) {
31 vm.timeOptions[key] = AeConfig.timeOptions[key];
32 }
33 });
34 vm.stateHolder = stateHolder;
35 vm.urls = AeConfig.urls;
36 vm.applications = stateHolder.AeUser.applications_map;
37 vm.show_dashboard = false;
38 vm.resource = null;
39 vm.graphType = {selected: null};
40 vm.timeSpan = vm.timeOptions['1h'];
41 vm.trendingReports = [];
42 vm.exceptions = 0;
43 vm.satisfyingRequests = 0;
44 vm.toleratedRequests = 0;
45 vm.frustratingRequests = 0;
46 vm.uptimeStats = 0;
47 vm.apdexStats = [];
48 vm.seriesRequestsData = [];
49 vm.seriesMetricsData = [];
50 vm.seriesSlowData = [];
51 vm.slowCalls = [];
52 vm.slowURIS = [];
53
54 vm.reportChartConfig = {
55 data: {
56 json: [],
57 xFormat: '%Y-%m-%dT%H:%M:%S'
58 },
59 color: {
60 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
61 },
62 axis: {
63 x: {
64 type: 'timeseries',
65 tick: {
66 culling: {
67 max: 6 // the number of tick texts will be adjusted to less than this value
68 },
69 format: '%Y-%m-%d %H:%M'
70 }
71 },
72 y: {
73 tick: {
74 count: 5,
75 format: d3.format('.2s')
76 }
69 77 }
70 78 },
71 y: {
72 tick: {
73 count: 5,
74 format: d3.format('.2s')
79 subchart: {
80 show: true,
81 size: {
82 height: 20
75 83 }
76 }
77 },
78 subchart: {
79 show: true,
84 },
80 85 size: {
81 height: 20
82 }
83 },
84 size: {
85 height: 250
86 },
87 zoom: {
88 rescale: true
89 },
90 grid: {
91 x: {
92 show: true
93 },
94 y: {
95 show: true
96 }
97 },
98 tooltip: {
99 format: {
100 title: function (d) {
101 return '' + d;
86 height: 250
87 },
88 zoom: {
89 rescale: true
90 },
91 grid: {
92 x: {
93 show: true
102 94 },
103 value: function (v) {
104 return v
95 y: {
96 show: true
105 97 }
106 }
107 }
108 };
109 vm.reportChartData = {};
110
111 vm.reportSlowChartConfig = {
112 data: {
113 json: [],
114 xFormat: '%Y-%m-%dT%H:%M:%S'
115 },
116 color: {
117 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
118 },
119 axis: {
120 x: {
121 type: 'timeseries',
122 tick: {
123 culling: {
124 max: 6 // the number of tick texts will be adjusted to less than this value
98 },
99 tooltip: {
100 format: {
101 title: function (d) {
102 return '' + d;
125 103 },
126 format: '%Y-%m-%d %H:%M'
104 value: function (v) {
105 return v
106 }
127 107 }
108 }
109 };
110 vm.reportChartData = {};
111
112 vm.reportSlowChartConfig = {
113 data: {
114 json: [],
115 xFormat: '%Y-%m-%dT%H:%M:%S'
128 116 },
129 y: {
130 tick: {
131 count: 5,
132 format: d3.format('.2s')
117 color: {
118 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
119 },
120 axis: {
121 x: {
122 type: 'timeseries',
123 tick: {
124 culling: {
125 max: 6 // the number of tick texts will be adjusted to less than this value
126 },
127 format: '%Y-%m-%d %H:%M'
128 }
129 },
130 y: {
131 tick: {
132 count: 5,
133 format: d3.format('.2s')
134 }
133 135 }
134 }
135 },
136 subchart: {
137 show: true,
136 },
137 subchart: {
138 show: true,
139 size: {
140 height: 20
141 }
142 },
138 143 size: {
139 height: 20
140 }
141 },
142 size: {
143 height: 250
144 },
145 zoom: {
146 rescale: true
147 },
148 grid: {
149 x: {
150 show: true
151 },
152 y: {
153 show: true
154 }
155 },
156 tooltip: {
157 format: {
158 title: function (d) {
159 return '' + d;
144 height: 250
145 },
146 zoom: {
147 rescale: true
148 },
149 grid: {
150 x: {
151 show: true
160 152 },
161 value: function (v) {
162 return v
153 y: {
154 show: true
163 155 }
164 }
165 }
166 };
167 vm.reportSlowChartData = {};
168
169 vm.metricsChartConfig = {
170 data: {
171 json: [],
172 xFormat: '%Y-%m-%dT%H:%M:%S',
173 keys: {
174 x: 'x',
175 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
176 },
177 names: {
178 main: 'View/Application logic',
179 sql: 'Relational database queries',
180 nosql: 'NoSql datastore calls',
181 tmpl: 'Template rendering',
182 custom: 'Custom timed calls',
183 remote: 'Requests to remote resources'
184 },
185 type: 'area',
186 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
187 order: null
188 },
189 color: {
190 pattern: ['#6baed6', '#c7e9c0', '#fd8d3c', '#d6616b', '#ffcc00', '#c6dbef']
191 },
192 axis: {
193 x: {
194 type: 'timeseries',
195 tick: {
196 culling: {
197 max: 6 // the number of tick texts will be adjusted to less than this value
156 },
157 tooltip: {
158 format: {
159 title: function (d) {
160 return '' + d;
198 161 },
199 format: '%Y-%m-%d %H:%M'
162 value: function (v) {
163 return v
164 }
165 }
166 }
167 };
168 vm.reportSlowChartData = {};
169
170 vm.metricsChartConfig = {
171 data: {
172 json: [],
173 xFormat: '%Y-%m-%dT%H:%M:%S',
174 keys: {
175 x: 'x',
176 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
177 },
178 names: {
179 main: 'View/Application logic',
180 sql: 'Relational database queries',
181 nosql: 'NoSql datastore calls',
182 tmpl: 'Template rendering',
183 custom: 'Custom timed calls',
184 remote: 'Requests to remote resources'
185 },
186 type: 'area',
187 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
188 order: null
189 },
190 color: {
191 pattern: ['#6baed6', '#c7e9c0', '#fd8d3c', '#d6616b', '#ffcc00', '#c6dbef']
192 },
193 axis: {
194 x: {
195 type: 'timeseries',
196 tick: {
197 culling: {
198 max: 6 // the number of tick texts will be adjusted to less than this value
199 },
200 format: '%Y-%m-%d %H:%M'
201 }
202 },
203 y: {
204 tick: {
205 count: 5,
206 format: d3.format('.2f')
207 }
200 208 }
201 209 },
202 y: {
203 tick: {
204 count: 5,
205 format: d3.format('.2f')
210 point: {
211 show: false
212 },
213 subchart: {
214 show: true,
215 size: {
216 height: 20
206 217 }
207 }
208 },
209 point: {
210 show: false
211 },
212 subchart: {
213 show: true,
218 },
214 219 size: {
215 height: 20
216 }
217 },
218 size: {
219 height: 350
220 },
221 zoom: {
222 rescale: true
223 },
224 grid: {
225 x: {
226 show: true
227 },
228 y: {
229 show: true
230 }
231 },
232 tooltip: {
233 format: {
234 title: function (d) {
235 return '' + d;
220 height: 350
221 },
222 zoom: {
223 rescale: true
224 },
225 grid: {
226 x: {
227 show: true
236 228 },
237 value: function (v) {
238 return v
229 y: {
230 show: true
239 231 }
240 }
241 }
242 };
243 vm.metricsChartData = {};
244
245 vm.responseChartConfig = {
246 data: {
247 json: [],
248 xFormat: '%Y-%m-%dT%H:%M:%S'
249 },
250 color: {
251 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
252 },
253 axis: {
254 x: {
255 type: 'timeseries',
256 tick: {
257 culling: {
258 max: 6 // the number of tick texts will be adjusted to less than this value
232 },
233 tooltip: {
234 format: {
235 title: function (d) {
236 return '' + d;
259 237 },
260 format: '%Y-%m-%d %H:%M'
238 value: function (v) {
239 return v
240 }
261 241 }
242 }
243 };
244 vm.metricsChartData = {};
245
246 vm.responseChartConfig = {
247 data: {
248 json: [],
249 xFormat: '%Y-%m-%dT%H:%M:%S'
262 250 },
263 y: {
264 tick: {
265 count: 5,
266 format: d3.format('.2f')
251 color: {
252 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
253 },
254 axis: {
255 x: {
256 type: 'timeseries',
257 tick: {
258 culling: {
259 max: 6 // the number of tick texts will be adjusted to less than this value
260 },
261 format: '%Y-%m-%d %H:%M'
262 }
263 },
264 y: {
265 tick: {
266 count: 5,
267 format: d3.format('.2f')
268 }
267 269 }
268 }
269 },
270 point: {
271 show: false
272 },
273 subchart: {
274 show: true,
270 },
271 point: {
272 show: false
273 },
274 subchart: {
275 show: true,
276 size: {
277 height: 20
278 }
279 },
275 280 size: {
276 height: 20
277 }
278 },
279 size: {
280 height: 350
281 },
282 zoom: {
283 rescale: true
284 },
285 grid: {
286 x: {
287 show: true
288 },
289 y: {
290 show: true
291 }
292 },
293 tooltip: {
294 format: {
295 title: function (d) {
296 return '' + d;
281 height: 350
282 },
283 zoom: {
284 rescale: true
285 },
286 grid: {
287 x: {
288 show: true
297 289 },
298 value: function (v) {
299 return v
290 y: {
291 show: true
300 292 }
301 }
302 }
303 };
304 vm.responseChartData = {};
305
306 vm.requestsChartConfig = {
307 data: {
308 json: [],
309 xFormat: '%Y-%m-%dT%H:%M:%S'
310 },
311 color: {
312 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
313 },
314 axis: {
315 x: {
316 type: 'timeseries',
317 tick: {
318 culling: {
319 max: 6 // the number of tick texts will be adjusted to less than this value
293 },
294 tooltip: {
295 format: {
296 title: function (d) {
297 return '' + d;
320 298 },
321 format: '%Y-%m-%d %H:%M'
299 value: function (v) {
300 return v
301 }
322 302 }
303 }
304 };
305 vm.responseChartData = {};
306
307 vm.requestsChartConfig = {
308 data: {
309 json: [],
310 xFormat: '%Y-%m-%dT%H:%M:%S'
311 },
312 color: {
313 pattern: ['#d6616b', '#6baed6', '#fd8d3c']
323 314 },
324 y: {
325 tick: {
326 count: 5,
327 format: d3.format('.2f')
315 axis: {
316 x: {
317 type: 'timeseries',
318 tick: {
319 culling: {
320 max: 6 // the number of tick texts will be adjusted to less than this value
321 },
322 format: '%Y-%m-%d %H:%M'
323 }
324 },
325 y: {
326 tick: {
327 count: 5,
328 format: d3.format('.2f')
329 }
328 330 }
329 }
330 },
331 point: {
332 show: false
333 },
334 subchart: {
335 show: true,
331 },
332 point: {
333 show: false
334 },
335 subchart: {
336 show: true,
337 size: {
338 height: 20
339 }
340 },
336 341 size: {
337 height: 20
338 }
339 },
340 size: {
341 height: 350
342 },
343 zoom: {
344 rescale: true
345 },
346 grid: {
347 x: {
348 show: true
349 },
350 y: {
351 show: true
352 }
353 },
354 tooltip: {
355 format: {
356 title: function (d) {
357 return '' + d;
342 height: 350
343 },
344 zoom: {
345 rescale: true
346 },
347 grid: {
348 x: {
349 show: true
358 350 },
359 value: function (v) {
360 return v
351 y: {
352 show: true
361 353 }
354 },
355 tooltip: {
356 format: {
357 title: function (d) {
358 return '' + d;
359 },
360 value: function (v) {
361 return v
362 }
363 }
364 }
365 };
366 vm.requestsChartData = {};
367
368 vm.loading = {
369 'apdex': true,
370 'reports': true,
371 'graphs': true,
372 'slowCalls': true,
373 'slowURIS': true,
374 'requestsBreakdown': true,
375 'series': true
376 };
377 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
378
379 vm.intervalId = $interval(function () {
380 if (_.contains(['30m', "1h"], vm.timeSpan.key)) {
381 // don't do anything if window is unfocused
382 if(document.hidden === true){
383 return ;
384 }
385 vm.refreshData();
362 386 }
387 }, 60000);
388
389 if (stateHolder.AeUser.applications.length){
390 vm.show_dashboard = true;
391 vm.determineStartState();
363 392 }
364 };
365 vm.requestsChartData = {};
366
367 vm.loading = {
368 'apdex': true,
369 'reports': true,
370 'graphs': true,
371 'slowCalls': true,
372 'slowURIS': true,
373 'requestsBreakdown': true,
374 'series': true
375 };
376 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
377 393
394 }
378 395 $rootScope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
379 396 var ws_report = message.message.report;
380 397 if (ws_report.http_status != 500) {
381 398 return
382 399 }
383 400 if (vm.stream.paused == true) {
384 401 return
385 402 }
386 403 if (vm.stream.filtered && ws_report.resource_id != vm.resource) {
387 404 return
388 405 }
389 406 var should_insert = true;
390 407 _.each(vm.stream.reports, function (report) {
391 408 if (report.report_id == ws_report.report_id) {
392 409 report.occurences = ws_report.occurences;
393 410 should_insert = false;
394 411 }
395 412 });
396 413 if (should_insert) {
397 414 if (vm.stream.reports.length > 7) {
398 415 vm.stream.reports.pop();
399 416 }
400 417 vm.stream.reports.unshift(ws_report);
401 418 }
402 419 });
403 420
404 421 vm.determineStartState = function () {
405 422 if (stateHolder.AeUser.applications.length) {
406 423 vm.resource = Number($location.search().resource);
407 424
408 425 if (!vm.resource){
409 426 var cookieResource = $cookies.getObject('resource');
410 427 console.log('cookieResource', cookieResource);
411 428
412 429 if (cookieResource) {
413 430 vm.resource = cookieResource;
414 431 }
415 432 else{
416 433 vm.resource = stateHolder.AeUser.applications[0].resource_id;
417 434 }
418 435 }
419 436 }
420 437
421 438 var timespan = $location.search().timespan;
422 439
423 440 if(_.has(vm.timeOptions, timespan)){
424 441 vm.timeSpan = vm.timeOptions[timespan];
425 442 }
426 443 else{
427 444 vm.timeSpan = vm.timeOptions['1h'];
428 445 }
429 446
430 447 var graphType = $location.search().graphtype;
431 448 if(!graphType){
432 449 vm.graphType = {selected: 'metrics_graphs'};
433 450 }
434 451 else{
435 452 vm.graphType = {selected: graphType};
436 453 }
437 454 vm.updateSearchParams();
438 455 };
439 456
440 457 vm.updateSearchParams = function () {
441 458 $location.search('resource', vm.resource);
442 459 $location.search('timespan', vm.timeSpan.key);
443 460 $location.search('graphtype', vm.graphType.selected);
444 461 stateHolder.resource = vm.resource;
445 462
446 463 if (vm.resource){
447 464 $cookies.putObject('resource', vm.resource,
448 465 {expires:new Date(3000, 1, 1)});
449 466 }
450 467 vm.refreshData();
451 468 };
452 469
453 470 vm.refreshData = function () {
454 471 vm.fetchApdexStats();
455 472 vm.fetchTrendingReports();
456 473 vm.fetchMetrics();
457 474 vm.fetchRequestsBreakdown();
458 475 vm.fetchSlowCalls();
459 476 };
460 477
461 478 vm.changedTimeSpan = function(){
462 479 vm.startDateFilter = timeSpanToStartDate(vm.timeSpan.key);
463 480 vm.refreshData();
464 481 };
465 482
466 vm.intervalId = $interval(function () {
467 if (_.contains(['30m', "1h"], vm.timeSpan.key)) {
468 // don't do anything if window is unfocused
469 if(document.hidden === true){
470 return ;
471 }
472 vm.refreshData();
473 }
474 }, 60000);
475
476 483 vm.fetchApdexStats = function () {
477 484 vm.loading.apdex = true;
478 485 vm.apdexStats = applicationsPropertyResource.query({
479 486 'key': 'apdex_stats',
480 487 'resourceId': vm.resource,
481 488 "start_date": timeSpanToStartDate(vm.timeSpan.key)
482 489 },
483 490 function (data) {
484 491 vm.loading.apdex = false;
485 492
486 493 vm.exceptions = _.reduce(data, function (memo, row) {
487 494 return memo + row.errors;
488 495 }, 0);
489 496 vm.satisfyingRequests = _.reduce(data, function (memo, row) {
490 497 return memo + row.satisfying_requests;
491 498 }, 0);
492 499 vm.toleratedRequests = _.reduce(data, function (memo, row) {
493 500 return memo + row.tolerated_requests;
494 501 }, 0);
495 502 vm.frustratingRequests = _.reduce(data, function (memo, row) {
496 503 return memo + row.frustrating_requests;
497 504 }, 0);
498 505 if (data.length) {
499 506 vm.uptimeStats = data[0].uptime;
500 507 }
501 508
502 509 },
503 510 function () {
504 511 vm.loading.apdex = false;
505 512 }
506 513 );
507 514 }
508 515
509 516 vm.fetchMetrics = function () {
510 517 vm.loading.series = true;
511 518 applicationsPropertyResource.query({
512 519 'resourceId': vm.resource,
513 520 'key': vm.graphType.selected,
514 521 "start_date": timeSpanToStartDate(vm.timeSpan.key)
515 522 }, function (data) {
516 523 if (vm.graphType.selected == 'metrics_graphs') {
517 524 vm.metricsChartData = {
518 525 json: data,
519 526 xFormat: '%Y-%m-%dT%H:%M:%S',
520 527 keys: {
521 528 x: 'x',
522 529 value: ["main", "sql", "nosql", "tmpl", "remote", "custom"]
523 530 },
524 531 names: {
525 532 main: 'View/Application logic',
526 533 sql: 'Relational database queries',
527 534 nosql: 'NoSql datastore calls',
528 535 tmpl: 'Template rendering',
529 536 custom: 'Custom timed calls',
530 537 remote: 'Requests to remote resources'
531 538 },
532 539 type: 'area',
533 540 groups: [["main", "sql", "nosql", "remote", "custom", "tmpl"]],
534 541 order: null
535 542 };
536 543 }
537 544 else if (vm.graphType.selected == 'report_graphs') {
538 545 vm.reportChartData = {
539 546 json: data,
540 547 xFormat: '%Y-%m-%dT%H:%M:%S',
541 548 keys: {
542 549 x: 'x',
543 550 value: ["not_found", "report"]
544 551 },
545 552 names: {
546 553 report: 'Errors',
547 554 not_found: '404\'s requests'
548 555 },
549 556 type: 'bar'
550 557 };
551 558 }
552 559 else if (vm.graphType.selected == 'slow_report_graphs') {
553 560 vm.reportSlowChartData = {
554 561 json: data,
555 562 xFormat: '%Y-%m-%dT%H:%M:%S',
556 563 keys: {
557 564 x: 'x',
558 565 value: ["slow_report"]
559 566 },
560 567 names: {
561 568 slow_report: 'Slow reports'
562 569 },
563 570 type: 'bar'
564 571 };
565 572 }
566 573 else if (vm.graphType.selected == 'response_graphs') {
567 574 vm.responseChartData = {
568 575 json: data,
569 576 xFormat: '%Y-%m-%dT%H:%M:%S',
570 577 keys: {
571 578 x: 'x',
572 579 value: ["today", "days_ago_2", "days_ago_7"]
573 580 },
574 581 names: {
575 582 today: 'Today',
576 583 "days_ago_2": '2 days ago',
577 584 "days_ago_7": '7 days ago'
578 585 }
579 586 };
580 587 }
581 588 else if (vm.graphType.selected == 'requests_graphs') {
582 589 vm.requestsChartData = {
583 590 json: data,
584 591 xFormat: '%Y-%m-%dT%H:%M:%S',
585 592 keys: {
586 593 x: 'x',
587 594 value: ["requests"]
588 595 },
589 596 names: {
590 597 requests: 'Requests/s'
591 598 }
592 599 };
593 600 }
594 601 vm.loading.series = false;
595 602 }, function(){
596 603 vm.loading.series = false;
597 604 });
598 605 }
599 606
600 607 vm.fetchSlowCalls = function () {
601 608 vm.loading.slowCalls = true;
602 609 applicationsPropertyResource.query({
603 610 'resourceId': vm.resource,
604 611 "start_date": timeSpanToStartDate(vm.timeSpan.key),
605 612 'key': 'slow_calls'
606 613 }, function (data) {
607 614 vm.slowCalls = data;
608 615 vm.loading.slowCalls = false;
609 616 }, function () {
610 617 vm.loading.slowCalls = false;
611 618 });
612 619 }
613 620
614 621 vm.fetchRequestsBreakdown = function () {
615 622 vm.loading.requestsBreakdown = true;
616 623 applicationsPropertyResource.query({
617 624 'resourceId': vm.resource,
618 625 "start_date": timeSpanToStartDate(vm.timeSpan.key),
619 626 'key': 'requests_breakdown'
620 627 }, function (data) {
621 628 vm.requestsBreakdown = data;
622 629 vm.loading.requestsBreakdown = false;
623 630 }, function () {
624 631 vm.loading.requestsBreakdown = false;
625 632 });
626 633 }
627 634
628 635 vm.fetchTrendingReports = function () {
629 636
630 637 if (vm.graphType.selected == 'slow_report_graphs') {
631 638 var report_type = 'slow';
632 639 }
633 640 else {
634 641 var report_type = 'error';
635 642 }
636 643
637 644 vm.loading.reports = true;
638 645 vm.trendingReports = applicationsPropertyResource.query({
639 646 'key': 'trending_reports',
640 647 'resourceId': vm.resource,
641 648 "start_date": timeSpanToStartDate(vm.timeSpan.key),
642 649 "report_type": report_type
643 650 },
644 651 function () {
645 652 vm.loading.reports = false;
646 653 },
647 654 function () {
648 655 vm.loading.reports = false;
649 656 }
650 657 );
651 658 };
652 659
653 660 $scope.$on('$destroy',function(){
654 661 $interval.cancel(vm.intervalId);
655 662 });
656
657 if (stateHolder.AeUser.applications.length){
658 vm.show_dashboard = true;
659 vm.determineStartState();
660 }
661 663 }
@@ -1,81 +1,82 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15
16 16 ApplicationsIntegrationsEditViewController.$inject = ['$state', 'integrationResource'];
17 17
18 18 function ApplicationsIntegrationsEditViewController($state, integrationResource) {
19 19 console.debug('IntegrationController');
20 20 var vm = this;
21 vm.$state = $state;
22 vm.loading = {integration: true};
23 vm.config = integrationResource.get(
24 {
25 integration: $state.params.integration,
26 action: 'setup',
27 resourceId: $state.params.resourceId
28 }, function (data) {
29 vm.loading.integration = false;
30 });
31
21 vm.$onInit = function () {
22 vm.$state = $state;
23 vm.loading = {integration: true};
24 vm.config = integrationResource.get(
25 {
26 integration: $state.params.integration,
27 action: 'setup',
28 resourceId: $state.params.resourceId
29 }, function (data) {
30 vm.loading.integration = false;
31 });
32 }
32 33 vm.configureIntegration = function () {
33 34 console.info('configureIntegration');
34 35 vm.loading.integration = true;
35 36 integrationResource.save(
36 37 {
37 38 integration: $state.params.integration,
38 39 action: 'setup',
39 40 resourceId: $state.params.resourceId
40 41 }, vm.config, function (data) {
41 42 vm.loading.integration = false;
42 43 setServerValidation(vm.integrationForm);
43 44 }, function (response) {
44 45 if (response.status == 422) {
45 46 setServerValidation(vm.integrationForm, response.data);
46 47 }
47 48 vm.loading.integration = false;
48 49 });
49 50 };
50 51
51 52 vm.removeIntegration = function () {
52 53 console.info('removeIntegration');
53 54 integrationResource.remove({
54 55 integration: $state.params.integration,
55 56 resourceId: $state.params.resourceId,
56 57 action: 'delete'
57 58 },
58 59 function () {
59 60 $state.go('applications.integrations',
60 61 {resourceId: $state.params.resourceId});
61 62 }
62 63 );
63 64 }
64 65
65 66 vm.testIntegration = function (to_test) {
66 67 console.info('testIntegration', to_test);
67 68 vm.loading.integration = true;
68 69 integrationResource.save(
69 70 {
70 71 integration: $state.params.integration,
71 72 action: 'test_' + to_test,
72 73 resourceId: $state.params.resourceId
73 74 }, vm.config, function (data) {
74 75 vm.loading.integration = false;
75 76 }, function (response) {
76 77 vm.loading.integration = false;
77 78 });
78 79 }
79 80
80 81 console.log(vm);
81 82 }
@@ -1,293 +1,295 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.logsBrowserView', [])
16 16 .component('logsBrowserView', {
17 17 templateUrl: 'components/views/logs-browser/logs-browser.html',
18 18 controller: LogsBrowserController
19 19 });
20 20
21 21 LogsBrowserController.$inject = ['$location', 'stateHolder', 'typeAheadTagHelper', 'logsNoIdResource', 'sectionViewResource'];
22 22
23 23 function LogsBrowserController($location, stateHolder, typeAheadTagHelper, logsNoIdResource, sectionViewResource) {
24 24 var vm = this;
25 vm.logEventsChartConfig = {
26 data: {
27 json: [],
28 xFormat: '%Y-%m-%dT%H:%M:%S'
29 },
30 color: {
31 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
32 },
33 axis: {
34 x: {
35 type: 'timeseries',
36 tick: {
37 format: '%Y-%m-%d'
25 vm.$onInit = function () {
26 vm.logEventsChartConfig = {
27 data: {
28 json: [],
29 xFormat: '%Y-%m-%dT%H:%M:%S'
30 },
31 color: {
32 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
33 },
34 axis: {
35 x: {
36 type: 'timeseries',
37 tick: {
38 format: '%Y-%m-%d'
39 }
40 },
41 y: {
42 tick: {
43 count: 5,
44 format: d3.format('.2s')
45 }
38 46 }
39 47 },
40 y: {
41 tick: {
42 count: 5,
43 format: d3.format('.2s')
48 subchart: {
49 show: true,
50 size: {
51 height: 20
44 52 }
45 }
46 },
47 subchart: {
48 show: true,
53 },
49 54 size: {
50 height: 20
51 }
52 },
53 size: {
54 height: 250
55 },
56 zoom: {
57 rescale: true
58 },
59 grid: {
60 x: {
61 show: true
55 height: 250
62 56 },
63 y: {
64 show: true
65 }
66 },
67 tooltip: {
68 format: {
69 title: function (d) {
70 return '' + d;
57 zoom: {
58 rescale: true
59 },
60 grid: {
61 x: {
62 show: true
71 63 },
72 value: function (v) {
73 return v
64 y: {
65 show: true
66 }
67 },
68 tooltip: {
69 format: {
70 title: function (d) {
71 return '' + d;
72 },
73 value: function (v) {
74 return v
75 }
74 76 }
75 77 }
76 }
77 };
78 vm.logEventsChartData = {};
79 stateHolder.section = 'logs';
80 vm.today = function () {
81 vm.pickerDate = new Date();
82 };
83 vm.today();
78 };
79 vm.logEventsChartData = {};
80 stateHolder.section = 'logs';
81 vm.today = function () {
82 vm.pickerDate = new Date();
83 };
84 vm.today();
84 85
85 vm.applications = stateHolder.AeUser.applications_map;
86 vm.logsPage = [];
87 vm.itemCount = 0;
88 vm.itemsPerPage = 250;
89 vm.page = 1;
90 vm.$location = $location;
91 vm.isLoading = {
92 logs: true,
93 series: true
94 };
95 vm.filterTypeAheadOptions = [
96 {
97 type: 'message',
98 text: 'message:',
99 'description': 'Full-text search in your logs',
100 tag: 'Message',
101 example: 'message:text-im-looking-for'
102 },
103 {
104 type: 'namespace',
105 text: 'namespace:',
106 'description': 'Query logs from specific namespace',
107 tag: 'Namespace',
108 example: "namespace:module.foo"
109 },
110 {
111 type: 'resource',
112 text: 'resource:',
113 'description': 'Restrict resultset to application',
114 tag: 'Application',
115 example: "resource:ID"
116 },
117 {
118 type: 'request_id',
119 text: 'request_id:',
120 'description': 'Show logs with specific request id',
121 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
122 tag: 'Request ID'
123 },
124 {
125 type: 'level',
126 text: 'level:',
127 'description': 'Show entries with specific log level',
128 example: 'level:warning',
129 tag: 'Level'
130 },
131 {
132 type: 'server_name',
133 text: 'server_name:',
134 'description': 'Show entries tagged with this key/value pair',
135 example: 'server_name:hostname',
136 tag: 'Tag'
137 },
138 {
139 type: 'start_date',
140 text: 'start_date:',
141 'description': 'Show results newer than this date (press TAB for dropdown)',
142 example: 'start_date:2014-08-15T13:00',
143 tag: 'Start Date'
144 },
145 {
146 type: 'end_date',
147 text: 'end_date:',
148 'description': 'Show results older than this date (press TAB for dropdown)',
149 example: 'start_date:2014-08-15T23:59',
150 tag: 'End Date'
151 },
152 {type: 'level', value: 'debug', text: 'level:debug'},
153 {type: 'level', value: 'info', text: 'level:info'},
154 {type: 'level', value: 'warning', text: 'level:warning'},
155 {type: 'level', value: 'critical', text: 'level:critical'}
156 ];
157 vm.filterTypeAhead = null;
158 vm.showDatePicker = false;
159 vm.manualOpen = false;
160 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
86 vm.applications = stateHolder.AeUser.applications_map;
87 vm.logsPage = [];
88 vm.itemCount = 0;
89 vm.itemsPerPage = 250;
90 vm.page = 1;
91 vm.$location = $location;
92 vm.isLoading = {
93 logs: true,
94 series: true
95 };
96 vm.filterTypeAheadOptions = [
97 {
98 type: 'message',
99 text: 'message:',
100 'description': 'Full-text search in your logs',
101 tag: 'Message',
102 example: 'message:text-im-looking-for'
103 },
104 {
105 type: 'namespace',
106 text: 'namespace:',
107 'description': 'Query logs from specific namespace',
108 tag: 'Namespace',
109 example: "namespace:module.foo"
110 },
111 {
112 type: 'resource',
113 text: 'resource:',
114 'description': 'Restrict resultset to application',
115 tag: 'Application',
116 example: "resource:ID"
117 },
118 {
119 type: 'request_id',
120 text: 'request_id:',
121 'description': 'Show logs with specific request id',
122 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
123 tag: 'Request ID'
124 },
125 {
126 type: 'level',
127 text: 'level:',
128 'description': 'Show entries with specific log level',
129 example: 'level:warning',
130 tag: 'Level'
131 },
132 {
133 type: 'server_name',
134 text: 'server_name:',
135 'description': 'Show entries tagged with this key/value pair',
136 example: 'server_name:hostname',
137 tag: 'Tag'
138 },
139 {
140 type: 'start_date',
141 text: 'start_date:',
142 'description': 'Show results newer than this date (press TAB for dropdown)',
143 example: 'start_date:2014-08-15T13:00',
144 tag: 'Start Date'
145 },
146 {
147 type: 'end_date',
148 text: 'end_date:',
149 'description': 'Show results older than this date (press TAB for dropdown)',
150 example: 'start_date:2014-08-15T23:59',
151 tag: 'End Date'
152 },
153 {type: 'level', value: 'debug', text: 'level:debug'},
154 {type: 'level', value: 'info', text: 'level:info'},
155 {type: 'level', value: 'warning', text: 'level:warning'},
156 {type: 'level', value: 'critical', text: 'level:critical'}
157 ];
158 vm.filterTypeAhead = null;
159 vm.showDatePicker = false;
160 vm.manualOpen = false;
161 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
162
163 _.each(vm.applications, function (item) {
164 vm.filterTypeAheadOptions.push({
165 type: 'resource',
166 text: 'resource:' + item.resource_id + ':' + item.resource_name,
167 example: 'resource:' + item.resource_id,
168 'tag': item.resource_name,
169 'description': 'Restrict resultset to this application'
170 });
171 });
172 console.info('page load');
173 vm.refresh();
174 }
161 175 vm.removeSearchTag = function (tag) {
162 176 $location.search(tag.type, null);
163 177 vm.refresh();
164 178 };
165 179 vm.addSearchTag = function (tag) {
166 180 $location.search(tag.type, tag.value);
167 181 vm.refresh();
168 182 };
169 183
170 184 vm.paginationChange = function(){
171 185 $location.search('page', vm.page);
172 186 vm.refresh();
173 187 };
174 188
175
176 _.each(vm.applications, function (item) {
177 vm.filterTypeAheadOptions.push({
178 type: 'resource',
179 text: 'resource:' + item.resource_id + ':' + item.resource_name,
180 example: 'resource:' + item.resource_id,
181 'tag': item.resource_name,
182 'description': 'Restrict resultset to this application'
183 });
184 });
185
186 189 vm.typeAheadTag = function (event) {
187 190 var text = vm.filterTypeAhead;
188 191 if (_.isObject(vm.filterTypeAhead)) {
189 192 text = vm.filterTypeAhead.text;
190 193 };
191 194 if (!vm.filterTypeAhead) {
192 195 return
193 196 }
194 197 var parsed = text.split(':');
195 198 var tag = {'type': null, 'value': null};
196 199 // app tags have : twice
197 200 if (parsed.length > 2 && parsed[0] == 'resource') {
198 201 tag.type = 'resource';
199 202 tag.value = parsed[1];
200 203 }
201 204 // normal tag:value
202 205 else if (parsed.length > 1) {
203 206 tag.type = parsed[0];
204 207 tag.value = parsed.slice(1).join(':');
205 208 }
206 209 else {
207 210 tag.type = 'message';
208 211 tag.value = parsed.join(':');
209 212 }
210 213
211 214 // set datepicker hour based on type of field
212 215 if ('start_date:' == text) {
213 216 vm.showDatePicker = true;
214 217 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
215 218 }
216 219 else if ('end_date:' == text) {
217 220 vm.showDatePicker = true;
218 221 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
219 222 }
220 223
221 224 if (event.keyCode != 13 || !tag.type || !tag.value) {
222 225 return
223 226 }
224 227 vm.showDatePicker = false;
225 228 // aka we selected one of main options
226 229 vm.addSearchTag({type: tag.type, value: tag.value});
227 230 // clear typeahead
228 231 vm.filterTypeAhead = undefined;
229 232 };
230 233
231 234
232 235 vm.pickerDateChanged = function(){
233 236 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
234 237 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
235 238 }
236 239 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
237 240 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
238 241 }
239 242 vm.showDatePicker = false;
240 243 };
241 244
242 245 vm.fetchLogs = function (searchParams) {
243 246 vm.isLoading.logs = true;
244 247 logsNoIdResource.query(searchParams, function (data, getResponseHeaders) {
245 248 vm.isLoading.logs = false;
246 249 var headers = getResponseHeaders();
247 250 vm.logsPage = data;
248 251 vm.itemCount = headers['x-total-count'];
249 252 vm.itemsPerPage = headers['x-items-per-page'];
250 253 }, function () {
251 254 vm.isLoading.logs = false;
252 255 });
253 256 };
254 257
255 258 vm.fetchSeriesData = function (searchParams) {
256 259 searchParams['section'] = 'logs_section';
257 260 searchParams['view'] = 'fetch_series';
258 261 vm.isLoading.series = true;
259 262 sectionViewResource.query(searchParams, function (data) {
260 263 console.log('show node here');
261 264 vm.logEventsChartData = {
262 265 json: data,
263 266 xFormat: '%Y-%m-%dT%H:%M:%S',
264 267 keys: {
265 268 x: 'x',
266 269 value: ["logs"]
267 270 },
268 271 names: {
269 272 logs: 'Log events'
270 273 },
271 274 type: 'bar'
272 275 };
273 276 vm.isLoading.series = false;
274 277 }, function () {
275 278 vm.isLoading.series = false;
276 279 });
277 280 };
278 281
279 282 vm.filterId = function (log) {
280 283 $location.search('request_id', log.request_id);
281 284 vm.refresh();
282 285 };
283 286
284 287 vm.refresh = function(){
285 288 vm.searchParams = parseSearchToTags($location.search());
286 289 vm.page = Number(vm.searchParams.page) || 1;
287 290 var params = parseTagsToSearch(vm.searchParams);
288 291 vm.fetchLogs(params);
289 292 vm.fetchSeriesData(params);
290 293 };
291 console.info('page load');
292 vm.refresh();
294
293 295 }
@@ -1,354 +1,355 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.reportView', [])
16 16 .component('reportView', {
17 17 templateUrl: 'components/views/report-view/report-view.html',
18 18 controller: ReportViewController
19 19 });
20 20
21 21 ReportViewController.$inject = ['$window', '$location', '$state', '$uibModal',
22 22 '$cookies', 'reportGroupPropertyResource', 'reportGroupResource',
23 23 'logsNoIdResource', 'stateHolder'];
24 24
25 25 function ReportViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
26 26 var vm = this;
27 vm.window = $window;
28 vm.stateHolder = stateHolder;
29 vm.$state = $state;
30 vm.reportHistoryConfig = {
31 data: {
32 json: [],
33 xFormat: '%Y-%m-%dT%H:%M:%S'
34 },
35 color: {
36 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
37 },
38 axis: {
39 x: {
40 type: 'timeseries',
41 tick: {
42 format: '%Y-%m-%d'
27 vm.$onInit = function () {
28 vm.window = $window;
29 vm.stateHolder = stateHolder;
30 vm.$state = $state;
31 vm.reportHistoryConfig = {
32 data: {
33 json: [],
34 xFormat: '%Y-%m-%dT%H:%M:%S'
35 },
36 color: {
37 pattern: ['#6baed6', '#e6550d', '#74c476', '#fdd0a2', '#8c564b']
38 },
39 axis: {
40 x: {
41 type: 'timeseries',
42 tick: {
43 format: '%Y-%m-%d'
44 }
45 },
46 y: {
47 tick: {
48 count: 5,
49 format: d3.format('.2s')
50 }
43 51 }
44 52 },
45 y: {
46 tick: {
47 count: 5,
48 format: d3.format('.2s')
53 subchart: {
54 show: true,
55 size: {
56 height: 20
49 57 }
50 }
51 },
52 subchart: {
53 show: true,
58 },
54 59 size: {
55 height: 20
56 }
57 },
58 size: {
59 height: 250
60 },
61 zoom: {
62 rescale: true
63 },
64 grid: {
65 x: {
66 show: true
60 height: 250
67 61 },
68 y: {
69 show: true
70 }
71 },
72 tooltip: {
73 format: {
74 title: function (d) {
75 return '' + d;
62 zoom: {
63 rescale: true
64 },
65 grid: {
66 x: {
67 show: true
76 68 },
77 value: function (v) {
78 return v
69 y: {
70 show: true
71 }
72 },
73 tooltip: {
74 format: {
75 title: function (d) {
76 return '' + d;
77 },
78 value: function (v) {
79 return v
80 }
79 81 }
80 82 }
83 };
84 vm.mentionedPeople = [];
85 vm.reportHistoryData = {};
86 vm.textTraceback = true;
87 vm.rawTraceback = '';
88 vm.traceback = '';
89 vm.reportType = 'report';
90 vm.report = null;
91 vm.showLong = false;
92 vm.reportLogs = null;
93 vm.requestStats = null;
94 vm.comment = null;
95 vm.is_loading = {
96 report: true,
97 logs: true,
98 history: true
99 };
100
101 vm.tabs = {
102 slow_calls:false,
103 request_details:false,
104 logs:false,
105 comments:false,
106 affected_users:false
107 };
108 if ($cookies.selectedReportTab) {
109 vm.tabs[$cookies.selectedReportTab] = true;
110 }
111 else{
112 $cookies.selectedReportTab = 'request_details';
113 vm.tabs.request_details = true;
81 114 }
82 };
83 vm.mentionedPeople = [];
84 vm.reportHistoryData = {};
85 vm.textTraceback = true;
86 vm.rawTraceback = '';
87 vm.traceback = '';
88 vm.reportType = 'report';
89 vm.report = null;
90 vm.showLong = false;
91 vm.reportLogs = null;
92 vm.requestStats = null;
93 vm.comment = null;
94 vm.is_loading = {
95 report: true,
96 logs: true,
97 history: true
98 };
115
116 // load report
117 vm.fetchReport();
118 }
99 119
100 120 vm.searchMentionedPeople = function(term){
101 121 //vm.mentionedPeople = [];
102 122 var term = term.toLowerCase();
103 123 reportGroupPropertyResource.get({
104 124 groupId: vm.report.group_id,
105 125 key: 'assigned_users'
106 126 }, null,
107 127 function (data) {
108 128 var users = [];
109 129 _.each(data.assigned, function(u){
110 130 users.push({label: u.user_name});
111 131 });
112 132 _.each(data.unassigned, function(u){
113 133 users.push({label: u.user_name});
114 134 });
115 135
116 136 var result = _.filter(users, function(u){
117 return u.label.toLowerCase().indexOf(term) !== -1;
137 return u.label.toLowerCase().indexOf(term) !== -1;
118 138 });
119 139 vm.mentionedPeople = result;
120 140 });
121 141 };
122 142
123 143 vm.searchTag = function (tag, value) {
124 144 console.log(tag, value);
125 145 if (vm.report.report_type === 3) {
126 146 $location.url($state.href('report.list_slow'));
127 147 }
128 148 else {
129 149 $location.url($state.href('report.list'));
130 150 }
131 151 $location.search(tag, value);
132 152 };
133 153
134 vm.tabs = {
135 slow_calls:false,
136 request_details:false,
137 logs:false,
138 comments:false,
139 affected_users:false
140 };
141 if ($cookies.selectedReportTab) {
142 vm.tabs[$cookies.selectedReportTab] = true;
143 }
144 else{
145 $cookies.selectedReportTab = 'request_details';
146 vm.tabs.request_details = true;
147 }
148
149 154 vm.fetchLogs = function () {
150 155 if (!vm.report.request_id){
151 156 return
152 157 }
153 158 vm.is_loading.logs = true;
154 159 logsNoIdResource.query({request_id: vm.report.request_id},
155 160 function (data) {
156 161 vm.is_loading.logs = false;
157 162 vm.reportLogs = data;
158 163 }, function () {
159 164 vm.is_loading.logs = false;
160 165 });
161 166 };
162 167 vm.addComment = function () {
163 168 reportGroupPropertyResource.save({
164 169 groupId: vm.report.group_id,
165 170 key: 'comments'
166 171 }, {body: vm.comment},
167 172 function (data) {
168 173 vm.report.comments.push(data);
169 174 });
170 175 vm.comment = '';
171 176 };
172 177
173 178 vm.fetchReport = function () {
179 console.log(vm);
174 180 vm.is_loading.report = true;
175 181 reportGroupResource.get($state.params, function (data) {
176 182 vm.is_loading.report = false;
177 183 if (data.request) {
178 184 try {
179 185 var to_sort = _.pairs(data.request);
180 186 data.request = _.object(_.sortBy(to_sort, function (i) {
181 187 return i[0]
182 188 }));
183 189 }
184 190 catch (err) {
185 191 }
186 192 }
187 193 vm.report = data;
188 194 if (vm.report.req_stats) {
189 195 vm.requestStats = [];
190 196 _.each(_.pairs(vm.report.req_stats['percentages']), function (p) {
191 197 vm.requestStats.push({
192 198 name: p[0],
193 199 value: vm.report.req_stats[p[0]].toFixed(3),
194 200 percent: p[1],
195 201 calls: vm.report.req_stats[p[0] + '_calls']
196 202 })
197 203 });
198 204 }
199 205 vm.traceback = data.traceback;
200 206 _.each(vm.traceback, function (frame) {
201 207 if (frame.line) {
202 208 vm.rawTraceback += 'File ' + frame.file + ' line ' + frame.line + ' in ' + frame.fn + ": \r\n";
203 209 }
204 210 vm.rawTraceback += ' ' + frame.cline + "\r\n";
205 211 });
206 212
207 213 if (stateHolder.AeUser.id){
208 214 vm.fetchHistory();
209 215 }
210 216
211 217 vm.selectedTab($cookies.selectedReportTab);
212 218
213 219 }, function (response) {
214 220 console.log(response);
215 221 if (response.status == 403) {
216 222 var uid = response.headers('x-appenlight-uid');
217 223 if (!uid) {
218 224 window.location = '/register?came_from=' + encodeURIComponent(window.location);
219 225 }
220 226 }
221 227 vm.is_loading.report = false;
222 228 });
223 229 };
224 230
225 231 vm.selectedTab = function(tab_name){
226 232 $cookies.selectedReportTab = tab_name;
227 233 if (tab_name == 'logs' && vm.reportLogs === null) {
228 234 vm.fetchLogs();
229 235 }
230 236 };
231 237
232 238 vm.markFixed = function () {
233 239 reportGroupResource.update({
234 240 groupId: vm.report.group_id
235 241 }, {fixed: !vm.report.group.fixed},
236 242 function (data) {
237 243 vm.report.group.fixed = data.fixed;
238 244 });
239 245 };
240 246
241 247 vm.markPublic = function () {
242 248 reportGroupResource.update({
243 249 groupId: vm.report.group_id
244 250 }, {public: !vm.report.group.public},
245 251 function (data) {
246 252 vm.report.group.public = data.public;
247 253 });
248 254 };
249 255
250 256 vm.delete = function () {
251 257 reportGroupResource.delete({'groupId': vm.report.group_id},
252 258 function (data) {
253 259 $state.go('report.list');
254 260 })
255 261 };
256 262
257 263 vm.assignUsersModal = function (index) {
258 264 vm.opts = {
259 265 backdrop: 'static',
260 266 templateUrl: 'AssignReportCtrl.html',
261 267 controller: 'AssignReportCtrl as ctrl',
262 268 resolve: {
263 269 report: function () {
264 270 return vm.report;
265 271 }
266 272 }
267 273 };
268 274 var modalInstance = $uibModal.open(vm.opts);
269 275 modalInstance.result.then(function (report) {
270 276
271 277 }, function () {
272 278 console.info('Modal dismissed at: ' + new Date());
273 279 });
274 280
275 281 };
276 282
277 283 vm.fetchHistory = function () {
278 284 reportGroupPropertyResource.query({
279 285 groupId: vm.report.group_id,
280 286 key: 'history'
281 287 }, function (data) {
282 288 vm.reportHistoryData = {
283 289 json: data,
284 290 keys: {
285 291 x: 'x',
286 292 value: ["reports"]
287 293 },
288 294 names: {
289 295 reports: 'Reports history'
290 296 },
291 297 type: 'bar'
292 298 };
293 299 vm.is_loading.history = false;
294 300 });
295 301 };
296 302
297 303 vm.nextDetail = function () {
298 304 $state.go('report.view_detail', {
299 305 groupId: vm.report.group_id,
300 306 reportId: vm.report.group.next_report
301 307 });
302 308 };
303 309 vm.previousDetail = function () {
304 310 $state.go('report.view_detail', {
305 311 groupId: vm.report.group_id,
306 312 reportId: vm.report.group.previous_report
307 313 });
308 314 };
309 315
310 316 vm.runIntegration = function (integration_name) {
311 317 console.log(integration_name);
312 318 if (integration_name == 'bitbucket') {
313 319 var controller = 'BitbucketIntegrationCtrl as ctrl';
314 320 var template_url = 'templates/integrations/bitbucket.html';
315 321 }
316 322 else if (integration_name == 'github') {
317 323 var controller = 'GithubIntegrationCtrl as ctrl';
318 324 var template_url = 'templates/integrations/github.html';
319 325 }
320 326 else if (integration_name == 'jira') {
321 327 var controller = 'JiraIntegrationCtrl as ctrl';
322 328 var template_url = 'templates/integrations/jira.html';
323 329 }
324 330 else {
325 331 return false;
326 332 }
327 333
328 334 vm.opts = {
329 335 backdrop: 'static',
330 336 templateUrl: template_url,
331 337 controller: controller,
332 338 resolve: {
333 339 integrationName: function () {
334 340 return integration_name
335 341 },
336 342 report: function () {
337 343 return vm.report;
338 344 }
339 345 }
340 346 };
341 347 var modalInstance = $uibModal.open(vm.opts);
342 348 modalInstance.result.then(function (report) {
343 349
344 350 }, function () {
345 351 console.info('Modal dismissed at: ' + new Date());
346 352 });
347 353
348 354 };
349
350 // load report
351 vm.fetchReport();
352
353
354 355 }
@@ -1,315 +1,316 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.reportsBrowserView', [])
16 16 .component('reportsBrowserView', {
17 17 templateUrl: 'components/views/reports-browser-view/reports-browser-view.html',
18 18 controller: reportsBrowserViewController
19 19 });
20 20
21 21 reportsBrowserViewController.$inject = ['$location', '$cookies',
22 22 'stateHolder', 'typeAheadTagHelper', 'reportsResource'];
23 23
24 24 function reportsBrowserViewController($location, $cookies, stateHolder,
25 typeAheadTagHelper, reportsResource) {
25 typeAheadTagHelper, reportsResource) {
26 26 var vm = this;
27 vm.applications = stateHolder.AeUser.applications_map;
28 stateHolder.section = 'reports';
29 vm.today = function () {
30 vm.pickerDate = new Date();
31 };
32 vm.today();
33 vm.reportsPage = [];
34 vm.page = 1;
35 vm.itemCount = 0;
36 vm.itemsPerPage = 250;
37 typeAheadTagHelper.tags = [];
38 vm.searchParams = {tags: [], page: 1, type: 'report'};
39 vm.is_loading = false;
40 vm.filterTypeAheadOptions = [
41 {
42 type: 'error',
43 text: 'error:',
44 'description': 'Full-text search in your reports',
45 example: 'error:text-im-looking-for',
46 tag: 'Error'
47 },
48 {
49 type: 'view_name',
50 text: 'view_name:',
51 'description': 'Query reports occured in specific views',
52 example: "view_name:module.foo",
53 tag: 'View Name'
54 },
55 {
56 type: 'resource',
57 text: 'resource:',
58 'description': 'Restrict resultset to application',
59 example: "resource:ID",
60 tag: 'Application'
61 },
62 {
63 type: 'priority',
64 text: 'priority:',
65 'description': 'Show reports with specific priority',
66 example: 'priority:8',
67 tag: 'Priority'
68 },
69 {
70 type: 'min_occurences',
71 text: 'min_occurences:',
72 'description': 'Show reports from groups with at least X occurences',
73 example: 'min_occurences:25',
74 tag: 'Occurences'
75 },
76 {
77 type: 'url_path',
78 text: 'url_path:',
79 'description': 'Show reports from specific URL paths',
80 example: 'url_path:/foo/bar/baz',
81 tag: 'Url Path'
82 },
83 {
84 type: 'url_domain',
85 text: 'url_domain:',
86 'description': 'Show reports from specific domain',
87 example: 'url_domain:domain.com',
88 tag: 'Domain'
89 },
90 {
91 type: 'report_status',
92 text: 'report_status:',
93 'description': 'Show reports from groups with specific status',
94 example: 'report_status:never_reviewed',
95 tag: 'Status'
96 },
97 {
98 type: 'request_id',
99 text: 'request_id:',
100 'description': 'Show reports with specific request id',
101 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
102 tag: 'Request ID'
103 },
104 {
105 type: 'server_name',
106 text: 'server_name:',
107 'description': 'Show reports tagged with this key/value pair',
108 example: 'server_name:hostname',
109 tag: 'Tag'
110 },
111 {
112 type: 'http_status',
113 text: 'http_status:',
114 'description': 'Show reports with specific HTTP status code',
115 example: "http_status:",
116 tag: 'HTTP Status'
117 },
118 {
119 type: 'http_status',
120 text: 'http_status:500',
121 'description': 'Show reports with specific HTTP status code',
122 example: "http_status:500",
123 tag: 'HTTP Status'
124 },
125 {
126 type: 'http_status',
127 text: 'http_status:404',
128 'description': 'Include 404 reports in your search',
129 example: "http_status:404",
130 tag: 'HTTP Status'
131 },
132 {
133 type: 'start_date',
134 text: 'start_date:',
135 'description': 'Show reports newer than this date (press TAB for dropdown)',
136 example: 'start_date:2014-08-15T13:00',
137 tag: 'Start Date'
138 },
139 {
140 type: 'end_date',
141 text: 'end_date:',
142 'description': 'Show reports older than this date (press TAB for dropdown)',
143 example: 'start_date:2014-08-15T23:59',
144 tag: 'End Date'
27 vm.$onInit = function () {
28 vm.applications = stateHolder.AeUser.applications_map;
29 stateHolder.section = 'reports';
30 vm.today = function () {
31 vm.pickerDate = new Date();
32 };
33 vm.today();
34 vm.reportsPage = [];
35 vm.page = 1;
36 vm.itemCount = 0;
37 vm.itemsPerPage = 250;
38 typeAheadTagHelper.tags = [];
39 vm.searchParams = {tags: [], page: 1, type: 'report'};
40 vm.is_loading = false;
41 vm.filterTypeAheadOptions = [
42 {
43 type: 'error',
44 text: 'error:',
45 'description': 'Full-text search in your reports',
46 example: 'error:text-im-looking-for',
47 tag: 'Error'
48 },
49 {
50 type: 'view_name',
51 text: 'view_name:',
52 'description': 'Query reports occured in specific views',
53 example: "view_name:module.foo",
54 tag: 'View Name'
55 },
56 {
57 type: 'resource',
58 text: 'resource:',
59 'description': 'Restrict resultset to application',
60 example: "resource:ID",
61 tag: 'Application'
62 },
63 {
64 type: 'priority',
65 text: 'priority:',
66 'description': 'Show reports with specific priority',
67 example: 'priority:8',
68 tag: 'Priority'
69 },
70 {
71 type: 'min_occurences',
72 text: 'min_occurences:',
73 'description': 'Show reports from groups with at least X occurences',
74 example: 'min_occurences:25',
75 tag: 'Occurences'
76 },
77 {
78 type: 'url_path',
79 text: 'url_path:',
80 'description': 'Show reports from specific URL paths',
81 example: 'url_path:/foo/bar/baz',
82 tag: 'Url Path'
83 },
84 {
85 type: 'url_domain',
86 text: 'url_domain:',
87 'description': 'Show reports from specific domain',
88 example: 'url_domain:domain.com',
89 tag: 'Domain'
90 },
91 {
92 type: 'report_status',
93 text: 'report_status:',
94 'description': 'Show reports from groups with specific status',
95 example: 'report_status:never_reviewed',
96 tag: 'Status'
97 },
98 {
99 type: 'request_id',
100 text: 'request_id:',
101 'description': 'Show reports with specific request id',
102 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
103 tag: 'Request ID'
104 },
105 {
106 type: 'server_name',
107 text: 'server_name:',
108 'description': 'Show reports tagged with this key/value pair',
109 example: 'server_name:hostname',
110 tag: 'Tag'
111 },
112 {
113 type: 'http_status',
114 text: 'http_status:',
115 'description': 'Show reports with specific HTTP status code',
116 example: "http_status:",
117 tag: 'HTTP Status'
118 },
119 {
120 type: 'http_status',
121 text: 'http_status:500',
122 'description': 'Show reports with specific HTTP status code',
123 example: "http_status:500",
124 tag: 'HTTP Status'
125 },
126 {
127 type: 'http_status',
128 text: 'http_status:404',
129 'description': 'Include 404 reports in your search',
130 example: "http_status:404",
131 tag: 'HTTP Status'
132 },
133 {
134 type: 'start_date',
135 text: 'start_date:',
136 'description': 'Show reports newer than this date (press TAB for dropdown)',
137 example: 'start_date:2014-08-15T13:00',
138 tag: 'Start Date'
139 },
140 {
141 type: 'end_date',
142 text: 'end_date:',
143 'description': 'Show reports older than this date (press TAB for dropdown)',
144 example: 'start_date:2014-08-15T23:59',
145 tag: 'End Date'
146 }
147 ];
148
149 vm.filterTypeAhead = undefined;
150 vm.showDatePicker = false;
151 vm.manualOpen = false;
152 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
153
154 vm.notRelativeTime = false;
155 if ($cookies.notRelativeTime) {
156 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
145 157 }
146 ];
147 158
148 vm.filterTypeAhead = undefined;
149 vm.showDatePicker = false;
150 vm.manualOpen = false;
151 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
159 _.each(_.range(1, 11), function (priority) {
160 vm.filterTypeAheadOptions.push({
161 type: 'priority',
162 text: 'priority:' + priority.toString(),
163 description: 'Show entries with specific priority',
164 example: 'priority:' + priority,
165 tag: 'Priority'
166 });
167 });
168 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
169 vm.filterTypeAheadOptions.push({
170 type: 'report_status',
171 text: 'report_status:' + status,
172 'description': 'Show only reports with this status',
173 example: 'report_status:' + status,
174 tag: 'Status ' + status.toUpperCase()
175 });
176 });
177 _.each(stateHolder.AeUser.applications, function (item) {
178 vm.filterTypeAheadOptions.push({
179 type: 'resource',
180 text: 'resource:' + item.resource_id + ':' + item.resource_name,
181 example: 'resource:' + item.resource_id,
182 'tag': item.resource_name,
183 'description': 'Restrict resultset to this application'
184 });
185 });
186
187 // initial load
188 vm.refresh();
189
190 }
191
152 192 vm.removeSearchTag = function (tag) {
153 193 $location.search(tag.type, null);
154 194 vm.refresh();
155 195 };
156 196 vm.addSearchTag = function (tag) {
157 197 $location.search(tag.type, tag.value);
158 198 vm.refresh();
159 199 };
160 vm.notRelativeTime = false;
161 if ($cookies.notRelativeTime) {
162 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
163 }
164 200
165 201 vm.changeRelativeTime = function () {
166 202 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
167 203 };
168 204
169 _.each(_.range(1, 11), function (priority) {
170 vm.filterTypeAheadOptions.push({
171 type: 'priority',
172 text: 'priority:' + priority.toString(),
173 description: 'Show entries with specific priority',
174 example: 'priority:' + priority,
175 tag: 'Priority'
176 });
177 });
178 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
179 vm.filterTypeAheadOptions.push({
180 type: 'report_status',
181 text: 'report_status:' + status,
182 'description': 'Show only reports with this status',
183 example: 'report_status:' + status,
184 tag: 'Status ' + status.toUpperCase()
185 });
186 });
187 _.each(stateHolder.AeUser.applications, function (item) {
188 vm.filterTypeAheadOptions.push({
189 type: 'resource',
190 text: 'resource:' + item.resource_id + ':' + item.resource_name,
191 example: 'resource:' + item.resource_id,
192 'tag': item.resource_name,
193 'description': 'Restrict resultset to this application'
194 });
195 });
196
197 vm.paginationChange = function(){
205 vm.paginationChange = function () {
198 206 $location.search('page', vm.page);
199 207 vm.refresh();
200 208 };
201 209
202 210 vm.typeAheadTag = function (event) {
203 211 var text = vm.filterTypeAhead;
204 212 if (_.isObject(vm.filterTypeAhead)) {
205 213 text = vm.filterTypeAhead.text;
206 214 }
207 215 if (!vm.filterTypeAhead) {
208 216 return
209 217 }
210 218
211 219 var parsed = text.split(':');
212 220 var tag = {'type': null, 'value': null};
213 221 // app tags have : twice
214 222 if (parsed.length > 2 && parsed[0] == 'resource') {
215 223 tag.type = 'resource';
216 224 tag.value = parsed[1];
217 225 }
218 226 // normal tag:value
219 227 else if (parsed.length > 1) {
220 228 tag.type = parsed[0];
221 229 var tagValue = parsed.slice(1);
222 230 if (tagValue) {
223 231 tag.value = tagValue.join(':');
224 232 }
225 }
226 else {
233 } else {
227 234 tag.type = 'error';
228 235 tag.value = parsed.join(':');
229 236 }
230 237
231 238 // set datepicker hour based on type of field
232 239 if ('start_date:' == text) {
233 240 vm.showDatePicker = true;
234 241 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
235 }
236 else if ('end_date:' == text) {
242 } else if ('end_date:' == text) {
237 243 vm.showDatePicker = true;
238 244 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
239 245 }
240 246
241 247 if (event.keyCode != 13 || !tag.type || !tag.value) {
242 248 return
243 249 }
244 250 vm.showDatePicker = false;
245 251 // aka we selected one of main options
246 252 vm.addSearchTag({type: tag.type, value: tag.value});
247 253 // clear typeahead
248 254 vm.filterTypeAhead = undefined;
249 255 };
250 256
251 vm.pickerDateChanged = function(){
257 vm.pickerDateChanged = function () {
252 258 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
253 259 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
254 }
255 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
260 } else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
256 261 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
257 262 }
258 263 vm.showDatePicker = false;
259 264 };
260 265
261 266 var reportPresentation = function (report) {
262 267 report.presentation = {};
263 268 if (report.group.public) {
264 269 report.presentation.className = 'public';
265 270 report.presentation.tooltip = 'Public';
266 }
267 else if (report.group.fixed) {
271 } else if (report.group.fixed) {
268 272 report.presentation.className = 'fixed';
269 273 report.presentation.tooltip = 'Fixed';
270 }
271 else if (report.group.read) {
274 } else if (report.group.read) {
272 275 report.presentation.className = 'reviewed';
273 276 report.presentation.tooltip = 'Reviewed';
274 }
275 else {
277 } else {
276 278 report.presentation.className = 'new';
277 279 report.presentation.tooltip = 'New';
278 280 }
279 281 return report;
280 282 };
281 283
282 284 vm.fetchReports = function (searchParams) {
283 285 vm.is_loading = true;
284 286 reportsResource.query(searchParams, function (data, getResponseHeaders) {
285 287 var headers = getResponseHeaders();
286 288 console.log(headers);
287 289 vm.is_loading = false;
288 290 vm.reportsPage = _.map(data, function (item) {
289 291 return reportPresentation(item);
290 292 });
291 293 vm.itemCount = headers['x-total-count'];
292 294 vm.itemsPerPage = headers['x-items-per-page'];
293 295 }, function () {
294 296 vm.is_loading = false;
295 297 });
296 298 };
297 299
298 300 vm.filterId = function (log) {
299 301 vm.searchParams.tags.push({
300 302 type: "request_id",
301 303 value: log.request_id
302 304 });
303 305 vm.refresh();
304 306 };
305 307
306 vm.refresh = function(){
308 vm.refresh = function () {
307 309 vm.searchParams = parseSearchToTags($location.search());
308 310 vm.page = Number(vm.searchParams.page) || 1;
309 311 var params = parseTagsToSearch(vm.searchParams);
310 312 console.log(params);
311 313 vm.fetchReports(params);
312 314 };
313 // initial load
314 vm.refresh();
315
315 316 }
@@ -1,292 +1,297 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 'use strict';
16 16
17 17 /* Controllers */
18 18
19 19 angular.module('appenlight.components.reportsSlowBrowserView', [])
20 20 .component('reportsSlowBrowserView', {
21 21 templateUrl: 'components/views/reports-slow-browser-view/reports-slow-browser-view.html',
22 22 controller: ReportsSlowBrowserViewController
23 23 });
24 24
25 25 ReportsSlowBrowserViewController.$inject = ['$location', '$cookies',
26 26 'stateHolder', 'typeAheadTagHelper', 'slowReportsResource']
27 27
28 28 function ReportsSlowBrowserViewController($location, $cookies, stateHolder, typeAheadTagHelper, slowReportsResource) {
29 29 var vm = this;
30 vm.applications = stateHolder.AeUser.applications_map;
31 stateHolder.section = 'slow_reports';
32 vm.today = function () {
33 vm.pickerDate = new Date();
34 };
35 vm.today();
36 vm.reportsPage = [];
37 vm.page = 1;
38 vm.itemCount = 0;
39 vm.itemsPerPage = 250;
40 typeAheadTagHelper.tags = [];
41 vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
42 vm.is_loading = false;
43 vm.filterTypeAheadOptions = [
44 {
45 type: 'view_name',
46 text: 'view_name:',
47 'description': 'Query reports occured in specific views',
48 tag: 'View Name',
49 example: "view_name:module.foo"
50 },
51 {
52 type: 'resource',
53 text: 'resource:',
54 'description': 'Restrict resultset to application',
55 tag: 'Application',
56 example: "resource:ID"
57 },
58 {
59 type: 'priority',
60 text: 'priority:',
61 'description': 'Show reports with specific priority',
62 example: 'priority:8',
63 tag: 'Priority'
64 },
65 {
66 type: 'min_occurences',
67 text: 'min_occurences:',
68 'description': 'Show reports from groups with at least X occurences',
69 example: 'min_occurences:25',
70 tag: 'Min. occurences'
71 },
72 {
73 type: 'min_duration',
74 text: 'min_duration:',
75 'description': 'Show reports from groups with average duration >= Xs',
76 example: 'min_duration:4.5',
77 tag: 'Min. duration'
78 },
79 {
80 type: 'url_path',
81 text: 'url_path:',
82 'description': 'Show reports from specific URL paths',
83 example: 'url_path:/foo/bar/baz',
84 tag: 'Url Path'
85 },
86 {
87 type: 'url_domain',
88 text: 'url_domain:',
89 'description': 'Show reports from specific domain',
90 example: 'url_domain:domain.com',
91 tag: 'Domain'
92 },
93 {
94 type: 'request_id',
95 text: 'request_id:',
96 'description': 'Show reports with specific request id',
97 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
98 tag: 'Request ID'
99 },
100 {
101 type: 'report_status',
102 text: 'report_status:',
103 'description': 'Show reports from groups with specific status',
104 example: 'report_status:never_reviewed',
105 tag: 'Status'
106 },
107 {
108 type: 'server_name',
109 text: 'server_name:',
110 'description': 'Show reports tagged with this key/value pair',
111 example: 'server_name:hostname',
112 tag: 'Tag'
113 },
114 {
115 type: 'start_date',
116 text: 'start_date:',
117 'description': 'Show reports newer than this date (press TAB for dropdown)',
118 example: 'start_date:2014-08-15T13:00',
119 tag: 'Start Date'
120 },
121 {
122 type: 'end_date',
123 text: 'end_date:',
124 'description': 'Show reports older than this date (press TAB for dropdown)',
125 example: 'start_date:2014-08-15T23:59',
126 tag: 'End Date'
30 vm.$onInit = function () {
31 vm.applications = stateHolder.AeUser.applications_map;
32 stateHolder.section = 'slow_reports';
33 vm.today = function () {
34 vm.pickerDate = new Date();
35 };
36 vm.today();
37 vm.reportsPage = [];
38 vm.page = 1;
39 vm.itemCount = 0;
40 vm.itemsPerPage = 250;
41 typeAheadTagHelper.tags = [];
42 vm.searchParams = {tags: [], page: 1, type: 'slow_report'};
43 vm.is_loading = false;
44 vm.filterTypeAheadOptions = [
45 {
46 type: 'view_name',
47 text: 'view_name:',
48 'description': 'Query reports occured in specific views',
49 tag: 'View Name',
50 example: "view_name:module.foo"
51 },
52 {
53 type: 'resource',
54 text: 'resource:',
55 'description': 'Restrict resultset to application',
56 tag: 'Application',
57 example: "resource:ID"
58 },
59 {
60 type: 'priority',
61 text: 'priority:',
62 'description': 'Show reports with specific priority',
63 example: 'priority:8',
64 tag: 'Priority'
65 },
66 {
67 type: 'min_occurences',
68 text: 'min_occurences:',
69 'description': 'Show reports from groups with at least X occurences',
70 example: 'min_occurences:25',
71 tag: 'Min. occurences'
72 },
73 {
74 type: 'min_duration',
75 text: 'min_duration:',
76 'description': 'Show reports from groups with average duration >= Xs',
77 example: 'min_duration:4.5',
78 tag: 'Min. duration'
79 },
80 {
81 type: 'url_path',
82 text: 'url_path:',
83 'description': 'Show reports from specific URL paths',
84 example: 'url_path:/foo/bar/baz',
85 tag: 'Url Path'
86 },
87 {
88 type: 'url_domain',
89 text: 'url_domain:',
90 'description': 'Show reports from specific domain',
91 example: 'url_domain:domain.com',
92 tag: 'Domain'
93 },
94 {
95 type: 'request_id',
96 text: 'request_id:',
97 'description': 'Show reports with specific request id',
98 example: "request_id:883143dc572e4c38aceae92af0ea5ae0",
99 tag: 'Request ID'
100 },
101 {
102 type: 'report_status',
103 text: 'report_status:',
104 'description': 'Show reports from groups with specific status',
105 example: 'report_status:never_reviewed',
106 tag: 'Status'
107 },
108 {
109 type: 'server_name',
110 text: 'server_name:',
111 'description': 'Show reports tagged with this key/value pair',
112 example: 'server_name:hostname',
113 tag: 'Tag'
114 },
115 {
116 type: 'start_date',
117 text: 'start_date:',
118 'description': 'Show reports newer than this date (press TAB for dropdown)',
119 example: 'start_date:2014-08-15T13:00',
120 tag: 'Start Date'
121 },
122 {
123 type: 'end_date',
124 text: 'end_date:',
125 'description': 'Show reports older than this date (press TAB for dropdown)',
126 example: 'start_date:2014-08-15T23:59',
127 tag: 'End Date'
128 }
129 ];
130
131 vm.filterTypeAhead = undefined;
132 vm.showDatePicker = false;
133 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
134
135 vm.manualOpen = false;
136 vm.notRelativeTime = false;
137 if ($cookies.notRelativeTime) {
138 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
127 139 }
128 ];
129 140
130 vm.filterTypeAhead = undefined;
131 vm.showDatePicker = false;
132 vm.aheadFilter = typeAheadTagHelper.aheadFilter;
141 _.each(_.range(1, 11), function (priority) {
142 vm.filterTypeAheadOptions.push({
143 type: 'priority',
144 text: 'priority:' + priority.toString(),
145 description: 'Show entries with specific priority',
146 example: 'priority:' + priority,
147 tag: 'Priority'
148 });
149 });
150 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
151 vm.filterTypeAheadOptions.push({
152 type: 'report_status',
153 text: 'report_status:' + status,
154 'description': 'Show only reports with this status',
155 example: 'report_status:' + status,
156 tag: 'Status ' + status.toUpperCase()
157 });
158 });
159 _.each(stateHolder.AeUser.applications, function (item) {
160 vm.filterTypeAheadOptions.push({
161 type: 'resource',
162 text: 'resource:' + item.resource_id + ':' + item.resource_name,
163 example: 'resource:' + item.resource_id,
164 'tag': item.resource_name,
165 'description': 'Restrict resultset to this application'
166 });
167 });
168
169 //initial load
170 vm.refresh();
171 }
172
133 173 vm.removeSearchTag = function (tag) {
134 174 $location.search(tag.type, null);
135 175 vm.refresh();
136 176 };
137 177 vm.addSearchTag = function (tag) {
138 178 $location.search(tag.type, tag.value);
139 179 vm.refresh();
140 180 };
141 vm.manualOpen = false;
142 vm.notRelativeTime = false;
143 if ($cookies.notRelativeTime) {
144 vm.notRelativeTime = JSON.parse($cookies.notRelativeTime);
145 }
146 181
147 182
148 183 vm.changeRelativeTime = function () {
149 184 $cookies.notRelativeTime = JSON.stringify(vm.notRelativeTime);
150 185 };
151 186
152 _.each(_.range(1, 11), function (priority) {
153 vm.filterTypeAheadOptions.push({
154 type: 'priority',
155 text: 'priority:' + priority.toString(),
156 description: 'Show entries with specific priority',
157 example: 'priority:' + priority,
158 tag: 'Priority'
159 });
160 });
161 _.each(['never_reviewed', 'reviewed', 'fixed', 'public'], function (status) {
162 vm.filterTypeAheadOptions.push({
163 type: 'report_status',
164 text: 'report_status:' + status,
165 'description': 'Show only reports with this status',
166 example: 'report_status:' + status,
167 tag: 'Status ' + status.toUpperCase()
168 });
169 });
170 _.each(stateHolder.AeUser.applications, function (item) {
171 vm.filterTypeAheadOptions.push({
172 type: 'resource',
173 text: 'resource:' + item.resource_id + ':' + item.resource_name,
174 example: 'resource:' + item.resource_id,
175 'tag': item.resource_name,
176 'description': 'Restrict resultset to this application'
177 });
178 });
179
180 187 vm.typeAheadTag = function (event) {
181 188 var text = vm.filterTypeAhead;
182 189 if (_.isObject(vm.filterTypeAhead)) {
183 190 text = vm.filterTypeAhead.text;
184 191 };
185 192 if (!vm.filterTypeAhead) {
186 193 return
187 194 }
188 195 var parsed = text.split(':');
189 196 var tag = {'type': null, 'value': null};
190 197 // app tags have : twice
191 198 if (parsed.length > 2 && parsed[0] == 'resource') {
192 199 tag.type = 'resource';
193 200 tag.value = parsed[1];
194 201 }
195 202 // normal tag:value
196 203 else if (parsed.length > 1) {
197 204 tag.type = parsed[0];
198 205 var tagValue = parsed.slice(1);
199 206 if (tagValue) {
200 207 tag.value = tagValue.join(':');
201 208 }
202 209 }
203 210
204 211 // set datepicker hour based on type of field
205 212 if ('start_date:' == text) {
206 213 vm.showDatePicker = true;
207 214 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
208 215 }
209 216 else if ('end_date:' == text) {
210 217 vm.showDatePicker = true;
211 218 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
212 219 }
213 220
214 221 if (event.keyCode != 13 || !tag.type || !tag.value) {
215 222 return
216 223 }
217 224 vm.showDatePicker = false;
218 225 // aka we selected one of main options
219 226 vm.addSearchTag({type: tag.type, value: tag.value});
220 227 // clear typeahead
221 228 vm.filterTypeAhead = undefined;
222 229 };
223 230
224 231 vm.paginationChange = function(){
225 232 $location.search('page', vm.page);
226 233 vm.refresh();
227 234 };
228 235
229 236 vm.pickerDateChanged = function(){
230 237 if (vm.filterTypeAhead.indexOf('start_date:') == '0') {
231 238 vm.filterTypeAhead = 'start_date:' + moment(vm.pickerDate).utc().format();
232 239 }
233 240 else if (vm.filterTypeAhead.indexOf('end_date:') == '0') {
234 241 vm.filterTypeAhead = 'end_date:' + moment(vm.pickerDate).utc().hour(23).minute(59).format();
235 242 }
236 243 vm.showDatePicker = false;
237 244 };
238 245
239 246 var reportPresentation = function (report) {
240 247 report.presentation = {};
241 248 if (report.group.public) {
242 249 report.presentation.className = 'public';
243 250 report.presentation.tooltip = 'Public';
244 251 }
245 252 else if (report.group.fixed) {
246 253 report.presentation.className = 'fixed';
247 254 report.presentation.tooltip = 'Fixed';
248 255 }
249 256 else if (report.group.read) {
250 257 report.presentation.className = 'reviewed';
251 258 report.presentation.tooltip = 'Reviewed';
252 259 }
253 260 else {
254 261 report.presentation.className = 'new';
255 262 report.presentation.tooltip = 'New';
256 263 }
257 264 return report;
258 265 };
259 266
260 267 vm.fetchReports = function (searchParams) {
261 268 vm.is_loading = true;
262 269 slowReportsResource.query(searchParams, function (data, getResponseHeaders) {
263 270 var headers = getResponseHeaders();
264 271 console.log(headers);
265 272 vm.is_loading = false;
266 273 vm.reportsPage = _.map(data, function (item) {
267 274 return reportPresentation(item);
268 275 });
269 276 vm.itemCount = headers['x-total-count'];
270 277 vm.itemsPerPage = headers['x-items-per-page'];
271 278 }, function () {
272 279 vm.is_loading = false;
273 280 });
274 281 };
275 282
276 283 vm.filterId = function (log) {
277 284 vm.searchParams.tags.push({
278 285 type: "request_id",
279 286 value: log.request_id
280 287 });
281 288 vm.refresh();
282 289 };
283 290 vm.refresh = function(){
284 291 vm.searchParams = parseSearchToTags($location.search());
285 292 vm.page = Number(vm.searchParams.page) || 1;
286 293 var params = parseTagsToSearch(vm.searchParams);
287 294 vm.fetchReports(params);
288 295 };
289 296
290 //initial load
291 vm.refresh();
292 297 }
@@ -1,27 +1,29 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.settingsView', [])
16 16 .component('settingsView', {
17 17 templateUrl: 'components/views/settings-view/settings-view.html',
18 18 controller: SettingsViewController
19 19 });
20 20
21 21 SettingsViewController.$inject = ['$state', 'AeConfig'];
22 22
23 23 function SettingsViewController($state, AeConfig) {
24 this.$state = $state;
25 this.AeConfig = AeConfig;
26 console.info('SettingsViewController');
24 this.$onInit = function () {
25 this.$state = $state;
26 this.AeConfig = AeConfig;
27 console.info('SettingsViewController');
28 }
27 29 }
@@ -1,45 +1,47 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userAlertChannelsEmailNewView', [])
16 16 .component('userAlertChannelsEmailNewView', {
17 17 templateUrl: 'components/views/user-alert-channel-email-new-view/user-alert-channel-email-new-view.html',
18 18 controller: AlertChannelsEmailController
19 19 });
20 20
21 AlertChannelsEmailController.$inject = ['$state','userSelfPropertyResource'];
21 AlertChannelsEmailController.$inject = ['$state', 'userSelfPropertyResource'];
22 22
23 23 function AlertChannelsEmailController($state, userSelfPropertyResource) {
24 24 console.debug('AlertChannelsEmailController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {email: false};
28 vm.form = {};
29
26 vm.$onInit = function () {
27 var vm = this;
28 vm.$state = $state;
29 vm.loading = {email: false};
30 vm.form = {};
31 }
30 32 vm.createChannel = function () {
31 33 vm.loading.email = true;
32 34 console.log('createChannel');
33 35 userSelfPropertyResource.save({key: 'alert_channels'}, vm.form, function () {
34 36 //vm.loading.email = false;
35 37 //setServerValidation(vm.channelForm);
36 38 //vm.form = {};
37 39 $state.go('user.alert_channels.list');
38 40 }, function (response) {
39 41 if (response.status == 422) {
40 42 setServerValidation(vm.channelForm, response.data);
41 43 }
42 44 vm.loading.email = false;
43 45 });
44 46 }
45 47 }
@@ -1,130 +1,131 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userAlertChannelsListView', [])
16 16 .component('userAlertChannelsListView', {
17 17 templateUrl: 'components/views/user-alert-channels-list-view/user-alert-channels-list-view.html',
18 18 controller: userAlertChannelsListViewController
19 19 });
20 20
21 userAlertChannelsListViewController.$inject = ['$state','userSelfPropertyResource', 'applicationsNoIdResource'];
21 userAlertChannelsListViewController.$inject = ['$state', 'userSelfPropertyResource', 'applicationsNoIdResource'];
22 22
23 23 function userAlertChannelsListViewController($state, userSelfPropertyResource, applicationsNoIdResource) {
24 24 console.debug('AlertChannelsController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {channels: true, applications: true, actions:true};
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {channels: true, applications: true, actions: true};
28 29
29 vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
30 function (data) {
31 vm.loading.channels = false;
32 });
33
34 vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
35 function (data) {
36 vm.loading.actions = false;
37 });
30 vm.alertChannels = userSelfPropertyResource.query({key: 'alert_channels'},
31 function (data) {
32 vm.loading.channels = false;
33 });
38 34
39 vm.applications = applicationsNoIdResource.query({permission: 'view'},
40 function (data) {
41 vm.loading.applications = false;
42 });
35 vm.alertActions = userSelfPropertyResource.query({key: 'alert_actions'},
36 function (data) {
37 vm.loading.actions = false;
38 });
43 39
44 var allOps = {
45 'eq': 'Equal',
46 'ne': 'Not equal',
47 'ge': 'Greater or equal',
48 'gt': 'Greater than',
49 'le': 'Lesser or equal',
50 'lt': 'Lesser than',
51 'startswith': 'Starts with',
52 'endswith': 'Ends with',
53 'contains': 'Contains'
54 };
40 vm.applications = applicationsNoIdResource.query({permission: 'view'},
41 function (data) {
42 vm.loading.applications = false;
43 });
55 44
56 var fieldOps = {};
57 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
58 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
59 fieldOps['duration'] = ['ge', 'le'];
60 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
61 'contains'];
62 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
63 'contains'];
64 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
65 'contains'];
66 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
67 'contains'];
68 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
45 var allOps = {
46 'eq': 'Equal',
47 'ne': 'Not equal',
48 'ge': 'Greater or equal',
49 'gt': 'Greater than',
50 'le': 'Lesser or equal',
51 'lt': 'Lesser than',
52 'startswith': 'Starts with',
53 'endswith': 'Ends with',
54 'contains': 'Contains'
55 };
69 56
70 var possibleFields = {
71 '__AND__': 'All met (composite rule)',
72 '__OR__': 'One met (composite rule)',
73 '__NOT__': 'Not met (composite rule)',
74 'http_status': 'HTTP Status',
75 'duration': 'Request duration',
76 'group:priority': 'Group -> Priority',
77 'url_domain': 'Domain',
78 'url_path': 'URL Path',
79 'error': 'Error',
80 'tags:server_name': 'Tag -> Server name',
81 'group:occurences': 'Group -> Occurences'
82 };
57 var fieldOps = {};
58 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
59 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
60 fieldOps['duration'] = ['ge', 'le'];
61 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
62 'contains'];
63 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
64 'contains'];
65 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
66 'contains'];
67 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
68 'contains'];
69 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
83 70
84 vm.ruleDefinitions = {
85 fieldOps: fieldOps,
86 allOps: allOps,
87 possibleFields: possibleFields
88 };
71 var possibleFields = {
72 '__AND__': 'All met (composite rule)',
73 '__OR__': 'One met (composite rule)',
74 '__NOT__': 'Not met (composite rule)',
75 'http_status': 'HTTP Status',
76 'duration': 'Request duration',
77 'group:priority': 'Group -> Priority',
78 'url_domain': 'Domain',
79 'url_path': 'URL Path',
80 'error': 'Error',
81 'tags:server_name': 'Tag -> Server name',
82 'group:occurences': 'Group -> Occurences'
83 };
89 84
85 vm.ruleDefinitions = {
86 fieldOps: fieldOps,
87 allOps: allOps,
88 possibleFields: possibleFields
89 };
90 }
90 91 vm.addAction = function (channel) {
91 92 console.log('test');
92 93 userSelfPropertyResource.save({key: 'alert_channels_rules'}, {}, function (data) {
93 94 vm.alertActions.push(data);
94 95 }, function (response) {
95 96 if (response.status == 422) {
96 97 console.log('scope', response);
97 98 }
98 99 });
99 100 };
100 101
101 102 vm.updateChannel = function (channel, subKey) {
102 103 var params = {
103 104 key: 'alert_channels',
104 105 channel_name: channel['channel_name'],
105 106 channel_value: channel['channel_value']
106 107 };
107 108 var toUpdate = {};
108 109 if (['daily_digest', 'send_alerts'].indexOf(subKey) !== -1) {
109 110 toUpdate[subKey] = !channel[subKey];
110 111 }
111 112 userSelfPropertyResource.update(params, toUpdate, function (data) {
112 113 _.extend(channel, data);
113 114 });
114 115 };
115 116
116 117 vm.removeChannel = function (channel) {
117 118 console.log(channel);
118 119 userSelfPropertyResource.delete({
119 120 key: 'alert_channels',
120 121 channel_name: channel.channel_name,
121 122 channel_value: channel.channel_value
122 123 }, function () {
123 vm.alertChannels = _.filter(vm.alertChannels, function(item){
124 vm.alertChannels = _.filter(vm.alertChannels, function (item) {
124 125 return item != channel;
125 126 });
126 127 });
127 128
128 129 }
129 130
130 131 }
@@ -1,65 +1,66 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userAuthTokensView', [])
16 16 .component('userAuthTokensView', {
17 17 templateUrl: 'components/views/user-auth-tokens-view/user-auth-tokens-view.html',
18 18 controller: userAuthTokensViewController
19 19 });
20 20
21 21 userAuthTokensViewController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
22 22
23 23 function userAuthTokensViewController($state, userSelfPropertyResource, AeConfig) {
24 24 console.debug('userAuthTokensViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {tokens: true};
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {tokens: true};
28 29
29 vm.expireOptions = AeConfig.timeOptions;
30
31 vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
32 function (data) {
33 vm.loading.tokens = false;
34 });
30 vm.expireOptions = AeConfig.timeOptions;
35 31
32 vm.tokens = userSelfPropertyResource.query({key: 'auth_tokens'},
33 function (data) {
34 vm.loading.tokens = false;
35 });
36 }
36 37 vm.addToken = function () {
37 38 vm.loading.tokens = true;
38 39 userSelfPropertyResource.save({key: 'auth_tokens'},
39 40 vm.form,
40 41 function (data) {
41 42 vm.loading.tokens = false;
42 43 setServerValidation(vm.TokenForm);
43 44 vm.form = {};
44 45 vm.tokens.push(data);
45 46 }, function (response) {
46 47 vm.loading.tokens = false;
47 48 if (response.status == 422) {
48 49 setServerValidation(vm.TokenForm, response.data);
49 50 }
50 51 })
51 52 };
52 53
53 54 vm.removeToken = function (token) {
54 55 userSelfPropertyResource.delete({
55 56 key: 'auth_tokens',
56 57 token: token.token
57 58 },
58 59 function () {
59 60 var index = vm.tokens.indexOf(token);
60 61 if (index !== -1) {
61 62 vm.tokens.splice(index, 1);
62 63 }
63 64 })
64 65 }
65 66 }
@@ -1,54 +1,55 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userIdentitiesView', [])
16 16 .component('userIdentitiesView', {
17 17 templateUrl: 'components/views/user-identities-view/user-identities-view.html',
18 18 controller: UserIdentitiesController
19 19 });
20 20
21 21 UserIdentitiesController.$inject = ['$state', 'userSelfPropertyResource', 'AeConfig'];
22 22
23 23 function UserIdentitiesController($state, userSelfPropertyResource, AeConfig) {
24 24 console.debug('UserIdentitiesController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.AeConfig = AeConfig;
28 vm.loading = {identities: true};
29
30 vm.identities = userSelfPropertyResource.query(
31 {key: 'external_identities'},
32 function (data) {
33 vm.loading.identities = false;
34 console.log(vm.identities);
35 });
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.AeConfig = AeConfig;
29 vm.loading = {identities: true};
36 30
31 vm.identities = userSelfPropertyResource.query(
32 {key: 'external_identities'},
33 function (data) {
34 vm.loading.identities = false;
35 console.log(vm.identities);
36 });
37 }
37 38 vm.removeProvider = function (provider) {
38 39 console.log('provider', provider);
39 40 userSelfPropertyResource.delete(
40 41 {
41 42 key: 'external_identities',
42 43 provider: provider.provider,
43 44 id: provider.id
44 45 },
45 46 function (status) {
46 if (status){
47 if (status) {
47 48 vm.identities = _.filter(vm.identities, function (item) {
48 49 return item != provider
49 50 });
50 51 }
51 52
52 53 });
53 54 }
54 55 }
@@ -1,46 +1,47 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userPasswordView', [])
16 16 .component('userPasswordView', {
17 17 templateUrl: 'components/views/user-password-view/user-password-view.html',
18 18 controller: UserPasswordViewController
19 19 });
20 20
21 21 UserPasswordViewController.$inject = ['$state', 'userSelfPropertyResource'];
22 22
23 23 function UserPasswordViewController($state, userSelfPropertyResource) {
24 24 console.debug('UserPasswordViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {password: false};
28 vm.form = {};
29
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {password: false};
29 vm.form = {};
30 }
30 31 vm.updatePassword = function () {
31 32 vm.loading.password = true;
32 33 console.log('updatePassword');
33 34 userSelfPropertyResource.update({key: 'password'}, vm.form, function () {
34 35 vm.loading.password = false;
35 36 vm.form = {};
36 37 setServerValidation(vm.passwordForm);
37 38 }, function (response) {
38 39 if (response.status == 422) {
39 40 console.log('vm', vm);
40 41 setServerValidation(vm.passwordForm, response.data);
41 42 console.log(response.data);
42 43 }
43 44 vm.loading.password = false;
44 45 });
45 46 }
46 47 }
@@ -1,48 +1,49 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.components.userProfileView', [])
16 16 .component('userProfileView', {
17 17 templateUrl: 'components/views/user-profile-view/user-profile-view.html',
18 18 controller: UserProfileViewController
19 19 });
20 20
21 21 UserProfileViewController.$inject = ['$state', 'userSelfResource'];
22 22
23 23 function UserProfileViewController($state, userSelfResource) {
24 24 console.debug('UserProfileViewController');
25 25 var vm = this;
26 vm.$state = $state;
27 vm.loading = {profile: true};
28
29 vm.user = userSelfResource.get(null, function (data) {
30 vm.loading.profile = false;
31 console.log('loaded profile');
32 });
26 vm.$onInit = function () {
27 vm.$state = $state;
28 vm.loading = {profile: true};
33 29
30 vm.user = userSelfResource.get(null, function (data) {
31 vm.loading.profile = false;
32 console.log('loaded profile');
33 });
34 }
34 35 vm.updateProfile = function () {
35 36 vm.loading.profile = true;
36 37
37 38 console.log('updateProfile');
38 39 vm.user.$update(null, function () {
39 40 vm.loading.profile = false;
40 41 setServerValidation(vm.profileForm);
41 42 }, function (response) {
42 43 if (response.status == 422) {
43 44 setServerValidation(vm.profileForm, response.data);
44 45 }
45 46 vm.loading.profile = false;
46 47 });
47 48 }
48 49 }
@@ -1,88 +1,87 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.controllers')
16 16 .controller('BitbucketIntegrationCtrl', BitbucketIntegrationCtrl)
17 17
18 18 BitbucketIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
19 19
20 20 function BitbucketIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
21 21 var vm = this;
22 vm.loading = true;
23 vm.assignees = [];
24 vm.report = report;
25 vm.integrationName = integrationName;
26 vm.statuses = [];
27 vm.priorities = [];
28 vm.error_messages = [];
29 vm.form = {
30 content: '\n' +
31 'Issue created for report: ' +
32 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
33 };
34
22 vm.$onInit = function () {
23 vm.loading = true;
24 vm.assignees = [];
25 vm.report = report;
26 vm.integrationName = integrationName;
27 vm.statuses = [];
28 vm.priorities = [];
29 vm.error_messages = [];
30 vm.form = {
31 content: '\n' +
32 'Issue created for report: ' +
33 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
34 };
35 vm.fetchInfo();
36 }
35 37 vm.fetchInfo = function () {
36 38 integrationResource.get({
37 39 resourceId: vm.report.resource_id,
38 40 action: 'info',
39 41 integration: vm.integrationName
40 42 }, null,
41 43 function (data) {
42 44 vm.loading = false;
43 45 if (data.error_messages) {
44 46 vm.error_messages = data.error_messages;
45 47 }
46 48 vm.assignees = data.assignees;
47 49 vm.priorities = data.priorities;
48 50 vm.form.responsible = vm.assignees[0];
49 51 vm.form.priority = vm.priorities[0];
50 52 }, function (error_data) {
51 53 if (error_data.data.error_messages) {
52 54 vm.error_messages = error_data.data.error_messages;
53 }
54 else {
55 } else {
55 56 vm.error_messages = ['There was a problem processing your request'];
56 57 }
57 58 });
58 59 };
59 60 vm.ok = function () {
60 61 vm.loading = true;
61 62 vm.form.group_id = vm.report.group_id;
62 63 integrationResource.save({
63 64 resourceId: vm.report.resource_id,
64 65 action: 'create-issue',
65 66 integration: vm.integrationName
66 67 }, vm.form,
67 68 function (data) {
68 69 vm.loading = false;
69 70 if (data.error_messages) {
70 71 vm.error_messages = data.error_messages;
71 72 }
72 73 if (data !== false) {
73 74 $uibModalInstance.dismiss('success');
74 75 }
75 76 }, function (error_data) {
76 77 if (error_data.data.error_messages) {
77 78 vm.error_messages = error_data.data.error_messages;
78 }
79 else {
79 } else {
80 80 vm.error_messages = ['There was a problem processing your request'];
81 81 }
82 82 });
83 83 };
84 84 vm.cancel = function () {
85 85 $uibModalInstance.dismiss('cancel');
86 86 };
87 vm.fetchInfo();
88 87 }
@@ -1,90 +1,87 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.controllers')
16 16 .controller('GithubIntegrationCtrl', GithubIntegrationCtrl);
17 17
18 18 GithubIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
19 19
20 20 function GithubIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
21 21 var vm = this;
22 vm.loading = true;
23 vm.assignees = [];
24 vm.report = report;
25 vm.integrationName = integrationName;
26 vm.statuses = [];
27 vm.assignees = [];
28 vm.error_messages = [];
29 vm.form = {
30 content: '\n' +
31 'Issue created for report: ' +
32 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
33 };
34
22 vm.$onInit = function () {
23 vm.loading = true;
24 vm.assignees = [];
25 vm.report = report;
26 vm.integrationName = integrationName;
27 vm.statuses = [];
28 vm.assignees = [];
29 vm.error_messages = [];
30 vm.form = {
31 content: '\n' +
32 'Issue created for report: ' +
33 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
34 };
35 vm.fetchInfo();
36 }
35 37 vm.fetchInfo = function () {
36 38 integrationResource.get({
37 39 resourceId: vm.report.resource_id,
38 40 action: 'info',
39 41 integration: vm.integrationName
40 42 }, null,
41 43 function (data) {
42 44 vm.loading = false;
43 45 if (data.error_messages) {
44 46 vm.error_messages = data.error_messages;
45 }
46 else {
47 } else {
47 48 vm.assignees = data.assignees;
48 49 vm.statuses = data.statuses;
49 50 vm.form.responsible = vm.assignees[0];
50 51 vm.form.status = vm.statuses[0];
51 52 }
52 53 }, function (error_data) {
53 54 if (error_data.data.error_messages) {
54 55 vm.error_messages = error_data.data.error_messages;
55 }
56 else {
56 } else {
57 57 vm.error_messages = ['There was a problem processing your request'];
58 58 }
59 59 });
60 60 };
61 61 vm.ok = function () {
62 62 vm.loading = true;
63 63 vm.form.group_id = vm.report.group_id;
64 64 integrationResource.save({
65 65 resourceId: vm.report.resource_id,
66 66 action: 'create-issue',
67 67 integration: vm.integrationName
68 68 }, vm.form,
69 69 function (data) {
70 70 vm.loading = false;
71 71 if (data.error_messages) {
72 72 vm.error_messages = data.error_messages;
73 }
74 else {
73 } else {
75 74 $uibModalInstance.dismiss('success');
76 75 }
77 76 }, function (error_data) {
78 77 if (error_data.data.error_messages) {
79 78 vm.error_messages = error_data.data.error_messages;
80 }
81 else {
79 } else {
82 80 vm.error_messages = ['There was a problem processing your request'];
83 81 }
84 82 });
85 83 };
86 84 vm.cancel = function () {
87 85 $uibModalInstance.dismiss('cancel');
88 86 };
89 vm.fetchInfo();
90 87 }
@@ -1,92 +1,91 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.controllers')
16 16 .controller('JiraIntegrationCtrl', JiraIntegrationCtrl)
17 17
18 18 JiraIntegrationCtrl.$inject = ['$uibModalInstance', '$state', 'report', 'integrationName', 'integrationResource'];
19 19
20 20 function JiraIntegrationCtrl($uibModalInstance, $state, report, integrationName, integrationResource) {
21 21 var vm = this;
22 vm.loading = true;
23 vm.assignees = [];
24 vm.report = report;
25 vm.integrationName = integrationName;
26 vm.statuses = [];
27 vm.priorities = [];
28 vm.issue_types = [];
29 vm.error_messages = [];
30 vm.form = {
31 content: '\n' +
32 'Issue created for report: ' +
33 $state.href('report.view_detail', {groupId:report.group_id, reportId:report.id}, {absolute:true})
34 };
35
22 vm.$onInit = function () {
23 vm.loading = true;
24 vm.assignees = [];
25 vm.report = report;
26 vm.integrationName = integrationName;
27 vm.statuses = [];
28 vm.priorities = [];
29 vm.issue_types = [];
30 vm.error_messages = [];
31 vm.form = {
32 content: '\n' +
33 'Issue created for report: ' +
34 $state.href('report.view_detail', {groupId: report.group_id, reportId: report.id}, {absolute: true})
35 };
36 vm.fetchInfo();
37 }
36 38 vm.fetchInfo = function () {
37 39 integrationResource.get({
38 40 resourceId: vm.report.resource_id,
39 41 action: 'info',
40 42 integration: vm.integrationName
41 43 }, null,
42 44 function (data) {
43 45 vm.loading = false;
44 46 if (data.error_messages) {
45 47 vm.error_messages = data.error_messages;
46 48 }
47 49 vm.assignees = data.assignees;
48 50 vm.priorities = data.priorities;
49 51 vm.issue_types = data.issue_types;
50 52 vm.form.issue_type = vm.issue_types[0];
51 53 vm.form.responsible = vm.assignees[0];
52 54 vm.form.priority = vm.priorities[0];
53 55 }, function (error_data) {
54 56 console.log('ERROR');
55 57 if (error_data.data.error_messages) {
56 58 vm.error_messages = error_data.data.error_messages;
57 }
58 else {
59 } else {
59 60 vm.error_messages = ['There was a problem processing your request'];
60 61 }
61 62 });
62 63 };
63 64 vm.ok = function () {
64 65 vm.loading = true;
65 66 vm.form.group_id = vm.report.group_id;
66 67 integrationResource.save({
67 68 resourceId: vm.report.resource_id,
68 69 action: 'create-issue',
69 70 integration: vm.integrationName
70 71 }, vm.form,
71 72 function (data) {
72 73 vm.loading = false;
73 74 if (data.error_messages) {
74 75 vm.error_messages = data.error_messages;
75 76 }
76 77 if (data !== false) {
77 78 $uibModalInstance.dismiss('success');
78 79 }
79 80 }, function (error_data) {
80 81 if (error_data.data.error_messages) {
81 82 vm.error_messages = error_data.data.error_messages;
82 }
83 else {
83 } else {
84 84 vm.error_messages = ['There was a problem processing your request'];
85 85 }
86 86 });
87 87 };
88 88 vm.cancel = function () {
89 89 $uibModalInstance.dismiss('cancel');
90 90 };
91 vm.fetchInfo();
92 91 }
@@ -1,80 +1,79 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.controllers').controller('AssignReportCtrl', AssignReportCtrl);
16 16 AssignReportCtrl.$inject = ['$uibModalInstance', 'reportGroupPropertyResource', 'report'];
17 17
18 18 function AssignReportCtrl($uibModalInstance, reportGroupPropertyResource, report) {
19 19 var vm = this;
20 vm.loading = true;
21 vm.assignedUsers = [];
22 vm.unAssignedUsers = [];
23 vm.report = report;
24 vm.fetchAssignments = function () {
25 reportGroupPropertyResource.get({
26 groupId: vm.report.group_id,
27 key: 'assigned_users'
28 }, null,
29 function (data) {
30 vm.assignedUsers = data.assigned;
31 vm.unAssignedUsers = data.unassigned;
32 vm.loading = false;
33 });
20 vm.$onInit = function () {
21 vm.loading = true;
22 vm.assignedUsers = [];
23 vm.unAssignedUsers = [];
24 vm.report = report;
25 vm.fetchAssignments = function () {
26 reportGroupPropertyResource.get({
27 groupId: vm.report.group_id,
28 key: 'assigned_users'
29 }, null,
30 function (data) {
31 vm.assignedUsers = data.assigned;
32 vm.unAssignedUsers = data.unassigned;
33 vm.loading = false;
34 });
35 }
36 vm.fetchAssignments();
34 37 }
35
36 38 vm.reassignUser = function (user) {
37 39 var is_assigned = vm.assignedUsers.indexOf(user);
38 40 if (is_assigned != -1) {
39 41 vm.assignedUsers.splice(is_assigned, 1);
40 42 vm.unAssignedUsers.push(user);
41 43 return
42 44 }
43 45 var is_unassigned = vm.unAssignedUsers.indexOf(user);
44 46 if (is_unassigned != -1) {
45 47 vm.unAssignedUsers.splice(is_unassigned, 1);
46 48 vm.assignedUsers.push(user);
47 49 return
48 50 }
49 51 }
50 52 vm.updateAssignments = function () {
51 53 var post = {'unassigned': [], 'assigned': []};
52 54 _.each(vm.assignedUsers, function (u) {
53 55 post['assigned'].push(u.user_name)
54 56 });
55 57 _.each(vm.unAssignedUsers, function (u) {
56 58 post['unassigned'].push(u.user_name)
57 59 });
58 60 vm.loading = true;
59 61 reportGroupPropertyResource.update({
60 62 groupId: vm.report.group_id,
61 63 key: 'assigned_users'
62 64 }, post,
63 65 function (data) {
64 66 vm.loading = false;
65 67 $uibModalInstance.close(vm.report);
66 68 });
67 69 };
68 70
69 71
70 72 vm.ok = function () {
71 73 vm.updateAssignments();
72 74 };
73 75
74 76 vm.cancel = function () {
75 77 $uibModalInstance.dismiss('cancel');
76 78 };
77
78 vm.fetchAssignments();
79
80 79 }
@@ -1,212 +1,213 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.controllers')
16 16 .controller('ApplicationPermissionsController', ApplicationPermissionsController);
17 17
18 18 ApplicationPermissionsController.$inject = ['sectionViewResource',
19 19 'applicationsPropertyResource', 'groupsResource']
20 20
21 21
22 22 function ApplicationPermissionsController(sectionViewResource, applicationsPropertyResource , groupsResource) {
23 23 var vm = this;
24 vm.form = {
25 autocompleteUser: '',
26 selectedGroup: null,
27 selectedUserPermissions: {},
28 selectedGroupPermissions: {}
29 }
30 vm.possibleGroups = groupsResource.query(null, function(){
31 if (vm.possibleGroups.length > 0){
32 vm.form.selectedGroup = vm.possibleGroups[0].id;
24 vm.$onInit = function () {
25 vm.form = {
26 autocompleteUser: '',
27 selectedGroup: null,
28 selectedUserPermissions: {},
29 selectedGroupPermissions: {}
33 30 }
34 });
35 console.log('g', vm.possibleGroups);
36 vm.possibleUsers = [];
37 _.each(vm.resource.possible_permissions, function (perm) {
38 vm.form.selectedUserPermissions[perm] = false;
39 vm.form.selectedGroupPermissions[perm] = false;
40 });
41
42 /**
43 * Converts the permission list into {user, permission_list objects}
44 * for rendering in templates
45 * **/
46 var tmpObj = {
47 user: {},
48 group: {}
49 };
50 _.each(vm.currentPermissions, function (perm) {
51 console.log(perm);
52 if (perm.type == 'user') {
53 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
54 tmpObj[perm.type][perm.user_name] = {
55 self: perm,
56 permissions: []
57 }
31 vm.possibleGroups = groupsResource.query(null, function () {
32 if (vm.possibleGroups.length > 0) {
33 vm.form.selectedGroup = vm.possibleGroups[0].id;
58 34 }
59 if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
60 tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
61 }
62 }
63 else {
64 if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
65 tmpObj[perm.type][perm.group_name] = {
66 self: perm,
67 permissions: []
35 });
36 console.log('g', vm.possibleGroups);
37 vm.possibleUsers = [];
38 _.each(vm.resource.possible_permissions, function (perm) {
39 vm.form.selectedUserPermissions[perm] = false;
40 vm.form.selectedGroupPermissions[perm] = false;
41 });
42
43 /**
44 * Converts the permission list into {user, permission_list objects}
45 * for rendering in templates
46 * **/
47 var tmpObj = {
48 user: {},
49 group: {}
50 };
51 _.each(vm.currentPermissions, function (perm) {
52 console.log(perm);
53 if (perm.type == 'user') {
54 if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
55 tmpObj[perm.type][perm.user_name] = {
56 self: perm,
57 permissions: []
58 }
59 }
60 if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
61 tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
62 }
63 } else {
64 if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
65 tmpObj[perm.type][perm.group_name] = {
66 self: perm,
67 permissions: []
68 }
69 }
70 if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
71 tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
68 72 }
69 }
70 if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
71 tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
72 }
73 73
74 }
75 });
76 vm.currentPermissions = {
77 user: _.values(tmpObj.user),
78 group: _.values(tmpObj.group),
79 };
74 }
75 });
76 vm.currentPermissions = {
77 user: _.values(tmpObj.user),
78 group: _.values(tmpObj.group),
79 };
80 console.log('test', tmpObj, vm.currentPermissions);
81 }
80 82
81 console.log('test', tmpObj, vm.currentPermissions);
82 83
83 84 vm.searchUsers = function (searchPhrase) {
84 85 console.log('SEARCHING');
85 86 vm.searchingUsers = true;
86 87 return sectionViewResource.query({
87 88 section: 'users_section',
88 89 view: 'search_users',
89 90 'user_name': searchPhrase
90 91 }).$promise.then(function (data) {
91 92 vm.searchingUsers = false;
92 93 return _.map(data, function (item) {
93 94 return item;
94 95 });
95 96 });
96 97 };
97 98
98 99
99 100 vm.setGroupPermission = function(){
100 101 var POSTObj = {
101 102 'group_id': vm.form.selectedGroup,
102 103 'permissions': []
103 104 };
104 105 for (var key in vm.form.selectedGroupPermissions) {
105 106 if (vm.form.selectedGroupPermissions[key]) {
106 107 POSTObj.permissions.push(key)
107 108 }
108 109 }
109 110 applicationsPropertyResource.save({
110 111 key: 'group_permissions',
111 112 resourceId: vm.resource.resource_id
112 113 }, POSTObj,
113 114 function (data) {
114 115 var found_row = false;
115 116 _.each(vm.currentPermissions.group, function (perm) {
116 117 if (perm.self.group_id == data.group.id) {
117 118 perm['permissions'] = data['permissions'];
118 119 found_row = true;
119 120 }
120 121 });
121 122 if (!found_row) {
122 123 data.self = data.group;
123 124 // normalize data format
124 125 data.self.group_id = data.self.id;
125 126 vm.currentPermissions.group.push(data);
126 127 }
127 128 });
128 129
129 130 }
130 131
131 132
132 133 vm.setUserPermission = function () {
133 134 console.log('set permissions');
134 135 var POSTObj = {
135 136 'user_name': vm.form.autocompleteUser,
136 137 'permissions': []
137 138 };
138 139 for (var key in vm.form.selectedUserPermissions) {
139 140 if (vm.form.selectedUserPermissions[key]) {
140 141 POSTObj.permissions.push(key)
141 142 }
142 143 }
143 144 applicationsPropertyResource.save({
144 145 key: 'user_permissions',
145 146 resourceId: vm.resource.resource_id
146 147 }, POSTObj,
147 148 function (data) {
148 149 var found_row = false;
149 150 _.each(vm.currentPermissions.user, function (perm) {
150 151 if (perm.self.user_name == data['user_name']) {
151 152 perm['permissions'] = data['permissions'];
152 153 found_row = true;
153 154 }
154 155 });
155 156 if (!found_row) {
156 157 data.self = data;
157 158 vm.currentPermissions.user.push(data);
158 159 }
159 160 });
160 161 }
161 162
162 163 vm.removeUserPermission = function (perm_name, curr_perm) {
163 164 console.log(perm_name);
164 165 console.log(curr_perm);
165 166 var POSTObj = {
166 167 key: 'user_permissions',
167 168 user_name: curr_perm.self.user_name,
168 169 permissions: [perm_name],
169 170 resourceId: vm.resource.resource_id
170 171 }
171 172 applicationsPropertyResource.delete(POSTObj, function (data) {
172 173 _.each(vm.currentPermissions.user, function (perm) {
173 174 if (perm.self.user_name == data['user_name']) {
174 175 perm['permissions'] = data['permissions']
175 176 }
176 177 });
177 178 });
178 179 }
179 180
180 181 vm.removeGroupPermission = function (perm_name, curr_perm) {
181 182 console.log('g', curr_perm);
182 183 var POSTObj = {
183 184 key: 'group_permissions',
184 185 group_id: curr_perm.self.group_id,
185 186 permissions: [perm_name],
186 187 resourceId: vm.resource.resource_id
187 188 }
188 189 applicationsPropertyResource.delete(POSTObj, function (data) {
189 190 _.each(vm.currentPermissions.group, function (perm) {
190 191 if (perm.self.group_id == data.group.id) {
191 192 perm['permissions'] = data['permissions']
192 193 }
193 194 });
194 195 });
195 196 }
196 197 }
197 198
198 199 angular.module('appenlight.directives.permissionsForm',[])
199 200 .directive('permissionsForm', function () {
200 201 return {
201 202 "restrict": "E",
202 203 "controller": "ApplicationPermissionsController",
203 204 controllerAs: 'permissions',
204 205 bindToController: true,
205 206 scope: {
206 207 currentPermissions: '=',
207 208 possiblePermissions: '=',
208 209 resource: '='
209 210 },
210 211 templateUrl: 'directives/permissions/permissions.html'
211 212 }
212 213 })
@@ -1,34 +1,36 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.directives.pluginConfig', []).directive('pluginConfig', function () {
16 16 return {
17 17 scope: {},
18 18 bindToController: {
19 19 resource: '=',
20 20 section: '='
21 21 },
22 22 restrict: 'E',
23 23 templateUrl: 'directives/plugin_config/plugin_config.html',
24 24 controller: PluginConfig,
25 25 controllerAs: 'plugin_ctrlr'
26 26 };
27 27
28 28 PluginConfig.$inject = ['stateHolder'];
29 29
30 30 function PluginConfig(stateHolder) {
31 this.plugins = {};
32 this.inclusions = stateHolder.plugins.inclusions[this.section];
31 this.$onInit = function () {
32 this.plugins = {};
33 this.inclusions = stateHolder.plugins.inclusions[this.section];
34 }
33 35 }
34 36 });
@@ -1,117 +1,119 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.directives.postProcessAction', []).directive('postProcessAction', ['applicationsPropertyResource', function (applicationsPropertyResource) {
16 16 return {
17 17 scope: {},
18 bindToController:{
18 bindToController: {
19 19 action: '=',
20 20 resource: '='
21 21 },
22 controller:postProcessActionController,
23 controllerAs:'ctrl',
22 controller: postProcessActionController,
23 controllerAs: 'ctrl',
24 24 restrict: 'E',
25 25 templateUrl: 'directives/postprocess_action/postprocess_action.html'
26 26 };
27 function postProcessActionController(){
28 var vm = this;
29 console.log(vm);
30 var allOps = {
31 'eq': 'Equal',
32 'ne': 'Not equal',
33 'ge': 'Greater or equal',
34 'gt': 'Greater than',
35 'le': 'Lesser or equal',
36 'lt': 'Lesser than',
37 'startswith': 'Starts with',
38 'endswith': 'Ends with',
39 'contains': 'Contains'
40 };
41 27
42 var fieldOps = {};
43 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
44 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
45 fieldOps['duration'] = ['ge', 'le'];
46 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
47 'contains'];
48 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
49 'contains'];
50 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
51 'contains'];
52 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
53 'contains'];
54 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
28 function postProcessActionController() {
29 var vm = this;
30 vm.$onInit = function () {
31 console.log(vm);
32 var allOps = {
33 'eq': 'Equal',
34 'ne': 'Not equal',
35 'ge': 'Greater or equal',
36 'gt': 'Greater than',
37 'le': 'Lesser or equal',
38 'lt': 'Lesser than',
39 'startswith': 'Starts with',
40 'endswith': 'Ends with',
41 'contains': 'Contains'
42 };
55 43
56 var possibleFields = {
57 '__AND__': 'All met (composite rule)',
58 '__OR__': 'One met (composite rule)',
59 '__NOT__': 'Not met (composite rule)',
60 'http_status': 'HTTP Status',
61 'duration': 'Request duration',
62 'group:priority': 'Group -> Priority',
63 'url_domain': 'Domain',
64 'url_path': 'URL Path',
65 'error': 'Error',
66 'tags:server_name': 'Tag -> Server name',
67 'group:occurences': 'Group -> Occurences'
68 };
44 var fieldOps = {};
45 fieldOps['http_status'] = ['eq', 'ne', 'ge', 'le'];
46 fieldOps['group:priority'] = ['eq', 'ne', 'ge', 'le'];
47 fieldOps['duration'] = ['ge', 'le'];
48 fieldOps['url_domain'] = ['eq', 'ne', 'startswith', 'endswith',
49 'contains'];
50 fieldOps['url_path'] = ['eq', 'ne', 'startswith', 'endswith',
51 'contains'];
52 fieldOps['error'] = ['eq', 'ne', 'startswith', 'endswith',
53 'contains'];
54 fieldOps['tags:server_name'] = ['eq', 'ne', 'startswith', 'endswith',
55 'contains'];
56 fieldOps['group:occurences'] = ['eq', 'ne', 'ge', 'le'];
69 57
70 vm.ruleDefinitions = {
71 fieldOps: fieldOps,
72 allOps: allOps,
73 possibleFields: possibleFields
74 };
58 var possibleFields = {
59 '__AND__': 'All met (composite rule)',
60 '__OR__': 'One met (composite rule)',
61 '__NOT__': 'Not met (composite rule)',
62 'http_status': 'HTTP Status',
63 'duration': 'Request duration',
64 'group:priority': 'Group -> Priority',
65 'url_domain': 'Domain',
66 'url_path': 'URL Path',
67 'error': 'Error',
68 'tags:server_name': 'Tag -> Server name',
69 'group:occurences': 'Group -> Occurences'
70 };
75 71
76 vm.possibleActions = [
77 ['1', 'Priority +1'],
78 ['-1', 'Priority -1']
79 ];
72 vm.ruleDefinitions = {
73 fieldOps: fieldOps,
74 allOps: allOps,
75 possibleFields: possibleFields
76 };
80 77
78 vm.possibleActions = [
79 ['1', 'Priority +1'],
80 ['-1', 'Priority -1']
81 ];
82 }
81 83 vm.deleteAction = function (action) {
82 84 applicationsPropertyResource.remove({
83 85 pkey: vm.action.pkey,
84 86 resourceId: vm.resource.resource_id,
85 87 key: 'postprocessing_rules'
86 88 }, function () {
87 89 vm.resource.postprocessing_rules.splice(
88 90 vm.resource.postprocessing_rules.indexOf(action), 1);
89 91 });
90 92 };
91 93
92 94
93 95 vm.saveAction = function () {
94 96 var params = {
95 97 'pkey': vm.action.pkey,
96 98 'resourceId': vm.resource.resource_id,
97 99 key: 'postprocessing_rules'
98 100 };
99 101 applicationsPropertyResource.update(params, vm.action,
100 102 function (data) {
101 103 vm.action.dirty = false;
102 104 vm.errors = [];
103 105 }, function (response) {
104 106 if (response.status == 422) {
105 107 var errorDict = angular.fromJson(response.data);
106 108 vm.errors = _.values(errorDict);
107 109 }
108 110 });
109 111 };
110 112
111 vm.setDirty = function() {
113 vm.setDirty = function () {
112 114 vm.action.dirty = true;
113 115 console.log('set dirty');
114 116 };
115 117 }
116 118
117 119 }]);
@@ -1,112 +1,115 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.directives.reportAlertAction', []).directive('reportAlertAction', ['userSelfPropertyResource', function (userSelfPropertyResource) {
16 16 return {
17 17 scope: {},
18 bindToController:{
18 bindToController: {
19 19 action: '=',
20 20 applications: '=',
21 21 possibleChannels: '=',
22 22 actions: '=',
23 23 ruleDefinitions: '='
24 24 },
25 controller:reportAlertActionController,
26 controllerAs:'ctrl',
25 controller: reportAlertActionController,
26 controllerAs: 'ctrl',
27 27 restrict: 'E',
28 28 templateUrl: 'directives/report_alert_action/report_alert_action.html'
29 29 };
30 function reportAlertActionController(){
30
31 function reportAlertActionController() {
31 32 var vm = this;
33 vm.$onInit = function () {
34 vm.possibleNotifications = [
35 ['always', 'Always'],
36 ['only_first', 'Only New'],
37 ];
38
39 vm.possibleChannels = _.filter(vm.possibleChannels, function (c) {
40 return c.supports_report_alerting
41 }
42 );
43
44 if (vm.possibleChannels.length > 0) {
45 vm.channelToBind = vm.possibleChannels[0];
46 }
47 }
32 48 vm.deleteAction = function (actions, action) {
33 49 var get = {
34 50 key: 'alert_channels_rules',
35 51 pkey: action.pkey
36 52 };
37 53 userSelfPropertyResource.remove(get, function (data) {
38 54 actions.splice(actions.indexOf(action), 1);
39 55 });
40 56
41 57 };
42 58
43 vm.bindChannel = function(){
59 vm.bindChannel = function () {
44 60 var post = {
45 61 channel_pkey: vm.channelToBind.pkey,
46 62 action_pkey: vm.action.pkey
47 63 };
48 64 console.log(post);
49 65 userSelfPropertyResource.save({key: 'alert_channels_actions_binds'}, post,
50 66 function (data) {
51 67 vm.action.channels = [];
52 68 vm.action.channels = data.channels;
53 69 }, function (response) {
54 70 if (response.status == 422) {
55 71 console.log('scope', response);
56 72 }
57 73 });
58 74 };
59 75
60 vm.unBindChannel = function(channel){
76 vm.unBindChannel = function (channel) {
61 77 userSelfPropertyResource.delete({
62 78 key: 'alert_channels_actions_binds',
63 79 channel_pkey: channel.pkey,
64 80 action_pkey: vm.action.pkey
65 81 },
66 82 function (data) {
67 83 vm.action.channels = [];
68 84 vm.action.channels = data.channels;
69 85 }, function (response) {
70 86 if (response.status == 422) {
71 87 console.log('scope', response);
72 88 }
73 89 });
74 90 };
75 91
76 92 vm.saveAction = function () {
77 93 var params = {
78 94 key: 'alert_channels_rules',
79 95 pkey: vm.action.pkey
80 96 };
81 97 userSelfPropertyResource.update(params, vm.action,
82 98 function (data) {
83 99 vm.action.dirty = false;
84 100 vm.errors = [];
85 101 }, function (response) {
86 102 if (response.status == 422) {
87 103 var errorDict = angular.fromJson(response.data);
88 104 vm.errors = _.values(errorDict);
89 105 }
90 106 });
91 107 };
92 108
93 vm.possibleNotifications = [
94 ['always', 'Always'],
95 ['only_first', 'Only New'],
96 ];
97
98 vm.possibleChannels = _.filter(vm.possibleChannels, function(c){
99 return c.supports_report_alerting }
100 );
101
102 if (vm.possibleChannels.length > 0){
103 vm.channelToBind = vm.possibleChannels[0];
104 }
105
106 vm.setDirty = function() {
109 vm.setDirty = function () {
107 110 vm.action.dirty = true;
108 111 console.log('set dirty');
109 112 };
110 113 }
111 114
112 115 }]);
@@ -1,81 +1,81 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.directives.rule', []).directive('rule', function () {
16 16 return {
17 17 scope: {},
18 18 bindToController:{
19 19 parentObj: '=',
20 20 rule: '=',
21 21 ruleDefinitions: '=',
22 22 parentRule: "=",
23 23 config: "="
24 24 },
25 25 restrict: 'E',
26 26 templateUrl: 'directives/rule/rule.html',
27 27 controller:RuleController,
28 28 controllerAs:'rule_ctrlr'
29 29 };
30 30 function RuleController(){
31 31 var vm = this;
32
33 vm.rule.dirty = false;
34 vm.oldField = vm.rule.field;
35
32 vm.$onInit = function () {
33 vm.rule.dirty = false;
34 vm.oldField = vm.rule.field;
35 }
36 36 vm.add = function () {
37 37 vm.rule.rules.push(
38 38 {op: "eq", field: 'http_status', value: ""}
39 39 );
40 40 vm.setDirty();
41 41 };
42 42
43 43 vm.setDirty = function() {
44 44 vm.rule.dirty = true;
45 45 console.log('set dirty');
46 46 if (vm.parentObj){
47 47 console.log('p', vm.parentObj);
48 48 console.log('set parent dirty');
49 49 vm.parentObj.dirty = true;
50 50 }
51 51 };
52 52
53 53 vm.fieldChange = function () {
54 54 var compound_types = ['__AND__', '__OR__', '__NOT__'];
55 55 var new_is_compound = compound_types.indexOf(vm.rule.field) !== -1;
56 56 var old_was_compound = compound_types.indexOf(vm.oldField) !== -1;
57 57
58 58 if (!new_is_compound) {
59 59 vm.rule.op = vm.ruleDefinitions.fieldOps[vm.rule.field][0];
60 60 }
61 61 if ((new_is_compound && !old_was_compound)) {
62 62 console.log('resetting config');
63 63 delete vm.rule.value;
64 64 vm.rule.rules = [];
65 65 vm.add();
66 66 }
67 67 else if (!new_is_compound && old_was_compound) {
68 68 console.log('resetting config');
69 69 delete vm.rule.rules;
70 70 vm.rule.value = '';
71 71 }
72 72 vm.oldField = vm.rule.field;
73 73 vm.setDirty();
74 74 };
75 75
76 76 vm.deleteRule = function (parent, rule) {
77 77 parent.rules.splice(parent.rules.indexOf(rule), 1);
78 78 vm.setDirty();
79 79 }
80 80 }
81 81 });
@@ -1,38 +1,41 b''
1 1 // Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
2 2 //
3 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 4 // you may not use this file except in compliance with the License.
5 5 // You may obtain a copy of the License at
6 6 //
7 7 // http://www.apache.org/licenses/LICENSE-2.0
8 8 //
9 9 // Unless required by applicable law or agreed to in writing, software
10 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 12 // See the License for the specific language governing permissions and
13 13 // limitations under the License.
14 14
15 15 angular.module('appenlight.directives.ruleReadOnly', []).directive('ruleReadOnly', ['userSelfPropertyResource', function (userSelfPropertyResource) {
16 16 return {
17 17 scope: {},
18 bindToController:{
18 bindToController: {
19 19 parentObj: '=',
20 20 rule: '=',
21 21 ruleDefinitions: '=',
22 22 parentRule: "=",
23 23 config: "="
24 24 },
25 25 restrict: 'E',
26 26 templateUrl: 'directives/rule_read_only/rule_read_only.html',
27 controller:RuleController,
28 controllerAs:'rule_ctrlr'
27 controller: RuleController,
28 controllerAs: 'rule_ctrlr'
29 29 }
30 function RuleController(){
30
31 function RuleController() {
31 32 var vm = this;
32 vm.readOnlyPossibleFields = {};
33 var labelPairs = _.pairs(vm.parentObj.config);
34 _.each(labelPairs, function (entry) {
35 vm.readOnlyPossibleFields[entry[0]] = entry[1].human_label;
36 });
33 vm.$onInit = function () {
34 vm.readOnlyPossibleFields = {};
35 var labelPairs = _.pairs(vm.parentObj.config);
36 _.each(labelPairs, function (entry) {
37 vm.readOnlyPossibleFields[entry[0]] = entry[1].human_label;
38 });
39 }
37 40 }
38 41 }]);
General Comments 0
You need to be logged in to leave comments. Login now