From 29aa175a595601eae6c87b7c6663c4554d49a1a0 Mon Sep 17 00:00:00 2001 From: Chris Houseknecht Date: Sat, 5 Apr 2014 19:34:02 -0400 Subject: [PATCH] AC-1141 fixed inventory group scheduling issues. Added scope cleanup. Now only loading the schedules list 1x rather than each time schedule tab clicked. Destroying the schedule edit scope consistently on save and cancel. --- awx/ui/static/js/forms/Credentials.js | 21 + awx/ui/static/js/helpers/Groups.js | 17 +- .../static/lib/angular-scheduler/.bower.json | 10 +- .../static/lib/angular-scheduler/bower.json | 2 +- .../lib/angular-scheduler.js | 15 +- .../lib/angular-scheduler.min.js | 2 +- awx/ui/static/lib/angular/.bower.json | 10 +- awx/ui/static/lib/angular/angular.js | 1295 ++++++++--------- awx/ui/static/lib/angular/angular.min.js | 409 +++--- awx/ui/static/lib/angular/angular.min.js.gzip | Bin 38454 -> 38685 bytes awx/ui/static/lib/angular/angular.min.js.map | 6 +- awx/ui/static/lib/angular/bower.json | 2 +- bower.json | 2 +- 13 files changed, 837 insertions(+), 954 deletions(-) diff --git a/awx/ui/static/js/forms/Credentials.js b/awx/ui/static/js/forms/Credentials.js index 31ec9dec2b..b8b0e8bbcd 100644 --- a/awx/ui/static/js/forms/Credentials.js +++ b/awx/ui/static/js/forms/Credentials.js @@ -254,6 +254,27 @@ angular.module('CredentialFormDefinition', []) awPassMatch: true, associated: 'sudo_password', autocomplete: false + }, + "vault_password": { + label: "Vault Password", + type: 'password', + ngShow: "kind.value == 'ssh'", + addRequired: false, + editRequired: false, + ngChange: "clearPWConfirm('vault_password_confirm')", + ask: true, + clear: true, + associated: 'vault_password_confirm', + autocomplete: false + }, + "vault_password_confirm": { + label: "Confirm Vault Password", + type: 'password', + addRequired: false, + editRequired: false, + awPassMatch: true, + associated: 'vault_password', + autocomplete: false } }, diff --git a/awx/ui/static/js/helpers/Groups.js b/awx/ui/static/js/helpers/Groups.js index 0f3a7ac95b..1aed1a1ac8 100644 --- a/awx/ui/static/js/helpers/Groups.js +++ b/awx/ui/static/js/helpers/Groups.js @@ -343,14 +343,13 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' * Add the list of schedules to the Group Edit modal * */ -.factory('GroupsScheduleList', ['GroupsScheduleEdit', 'SchedulesList', 'GenerateList', 'SearchInit', 'PaginateInit', 'Rest', 'PageRangeSetup', +.factory('GroupsScheduleListInit', ['GroupsScheduleEdit', 'SchedulesList', 'GenerateList', 'SearchInit', 'PaginateInit', 'Rest', 'PageRangeSetup', 'Wait', 'ProcessErrors', 'Find', 'ToggleSchedule', 'DeleteSchedule', 'GetBasePath', 'SchedulesListInit', function(GroupsScheduleEdit, SchedulesList, GenerateList, SearchInit, PaginateInit, Rest, PageRangeSetup, Wait, ProcessErrors, Find, ToggleSchedule, DeleteSchedule, GetBasePath, SchedulesListInit) { return function(params) { - var parent_scope = params.scope, + var schedule_scope = params.scope, url = params.url, - schedule_scope = parent_scope.$new(), list; // Clean up @@ -561,6 +560,7 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched scope.removeScheduleSaved = scope.$on('ScheduleSaved', function() { Wait('stop'); container.hide('slide', { direction: 'right' }, 500, restoreList); + scope.$destroy(); }); scope.saveScheduleForm = function() { @@ -582,6 +582,7 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched scope.cancelScheduleForm = function() { container.hide('slide', { direction: 'right' }, 500, restoreList); + scope.$destroy(); }; if (mode === 'edit') { @@ -612,10 +613,10 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched .factory('GroupsEdit', ['$rootScope', '$location', '$log', '$routeParams', '$compile', 'Rest', 'Alert', 'GroupForm', 'GenerateForm', 'Prompt', 'ProcessErrors', 'GetBasePath', 'SetNodeName', 'ParseTypeChange', 'GetSourceTypeOptions', 'InventoryUpdate', 'LookUpInit', 'Empty', 'Wait', 'GetChoices', 'UpdateGroup', 'SourceChange', 'Find','WatchInventoryWindowResize', - 'ParseVariableString', 'ToJSON', 'GroupsScheduleList', 'SourceForm', 'SetSchedulesInnerDialogSize', 'BuildTree', + 'ParseVariableString', 'ToJSON', 'GroupsScheduleListInit', 'SourceForm', 'SetSchedulesInnerDialogSize', 'BuildTree', function ($rootScope, $location, $log, $routeParams, $compile, Rest, Alert, GroupForm, GenerateForm, Prompt, ProcessErrors, GetBasePath, SetNodeName, ParseTypeChange, GetSourceTypeOptions, InventoryUpdate, LookUpInit, Empty, Wait, - GetChoices, UpdateGroup, SourceChange, Find, WatchInventoryWindowResize, ParseVariableString, ToJSON, GroupsScheduleList, + GetChoices, UpdateGroup, SourceChange, Find, WatchInventoryWindowResize, ParseVariableString, ToJSON, GroupsScheduleListInit, SourceForm, SetSchedulesInnerDialogSize, BuildTree) { return function (params) { @@ -811,7 +812,6 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched } else if ($(e.target).text() === 'Schedule') { $('#schedules-overlay').hide(); - GroupsScheduleList({ scope: modal_scope, url: schedules_url }); } }); @@ -820,6 +820,11 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched } modal_scope.groupVariablesLoadedRemove = modal_scope.$on('groupVariablesLoaded', function () { modal_scope.showSourceTab = (mode === 'edit' && group.has_inventory_sources && Empty(group.summary_fields.inventory_source.source)) ? false : true; + modal_scope.showSchedulesTab = (mode === 'edit' && sources_scope.source && sources_scope.source.value) ? true : false; + if (mode === 'edit' && modal_scope.showSourceTab) { + // the use has access to the source tab, so they may create a schedule + GroupsScheduleListInit({ scope: modal_scope, url: schedules_url }); + } $('#group_tabs a:first').tab('show'); Wait('start'); $('#group-modal-dialog').dialog('open'); diff --git a/awx/ui/static/lib/angular-scheduler/.bower.json b/awx/ui/static/lib/angular-scheduler/.bower.json index 555b0fc949..d376fdee76 100644 --- a/awx/ui/static/lib/angular-scheduler/.bower.json +++ b/awx/ui/static/lib/angular-scheduler/.bower.json @@ -1,6 +1,6 @@ { "name": "angular-scheduler", - "version": "0.0.13", + "version": "0.0.14", "authors": [ "Chris Houseknecht " ], @@ -36,13 +36,13 @@ "rrule", "calendar" ], - "_release": "0.0.13", + "_release": "0.0.14", "_resolution": { "type": "version", - "tag": "v0.0.13", - "commit": "b1ffbc8058dc668f5b8baf5f3baca39a77445e61" + "tag": "v0.0.14", + "commit": "618c50fabaf774f91db3ed3fb086ac9f45c22136" }, "_source": "git://github.com/chouseknecht/angular-scheduler.git", - "_target": "~0.0.13", + "_target": "~0.0.14", "_originalSource": "angular-scheduler" } \ No newline at end of file diff --git a/awx/ui/static/lib/angular-scheduler/bower.json b/awx/ui/static/lib/angular-scheduler/bower.json index 025ace5e22..d706b50d34 100644 --- a/awx/ui/static/lib/angular-scheduler/bower.json +++ b/awx/ui/static/lib/angular-scheduler/bower.json @@ -1,6 +1,6 @@ { "name": "angular-scheduler", - "version": "0.0.13", + "version": "0.0.14", "authors": [ "Chris Houseknecht " ], diff --git a/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.js b/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.js index 9942484467..e343e83eb2 100644 --- a/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.js +++ b/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.js @@ -1042,24 +1042,21 @@ angular.module('AngularScheduler', ['underscore']) $(element).spinner({ min: min, max: max, - change: function() { + stop: function() { + //update the model immediately setTimeout(function() { scope.$apply(function() { if (zeroPad) { scope[attr.ngModel] = $filter('schZeroPad')($(element).spinner('value'),zeroPad); - $(element).val(scope[attr.ngModel]); - if (attr.ngChange) { - scope.$eval(attr.ngChange); - } } else { scope[attr.ngModel] = $(element).spinner('value'); - if (attr.ngChange) { - scope.$eval(attr.ngChange); - } + } + if (attr.ngChange) { + scope.$eval(attr.ngChange); } }); - },100); + }, 100); }, spin: function() { scope[form].$setDirty(); diff --git a/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.min.js b/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.min.js index 24690dc631..4910a26500 100644 --- a/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.min.js +++ b/awx/ui/static/lib/angular-scheduler/lib/angular-scheduler.min.js @@ -1 +1 @@ -/*! angular-scheduler - v0.0.13 - 2014-04-05 */"use strict";angular.module("underscore",[]).factory("_",[function(){return window._}]),angular.module("AngularScheduler",["underscore"]).constant("AngularScheduler.partials","/lib/").constant("AngularScheduler.useTimezone",!1).constant("AngularScheduler.showUTCField",!1).factory("SchedulerInit",["$log","$filter","$timezones","LoadLookupValues","SetDefaults","CreateObject","_","AngularScheduler.useTimezone","AngularScheduler.showUTCField","InRange",function(a,b,c,d,e,f,g,h,i,j){return function(k){var l=k.scope,m=k.requireFutureStartTime||!1;return l.schedulerShowTimeZone=h,l.schedulerShowUTCStartTime=i,l.setDefaults=function(){h&&(l.current_timezone=c.getLocal(),($.isEmptyObject(l.current_timezone)||!l.current_timezone.name)&&(a.error("Failed to find local timezone. Defaulting to America/New_York."),l.current_timezone={name:"America/New_York"}),l.schedulerTimeZone=g.find(l.timeZones,function(a){return a.name===l.current_timezone.name})),d(l),e(l),l.scheduleTimeChange(),l.scheduleRepeatChange()},l.scheduleTimeChange=function(){if(""===l.schedulerStartDt||null===l.schedulerStartDt||void 0===l.schedulerStartDt)l.startDateError("Provide a valid start date and time"),l.schedulerUTCTime="";else if(j(l.schedulerStartHour,0,23,2)&&j(l.schedulerStartMinute,0,59,2)&&j(l.schedulerStartSecond,0,59,2))if(h){l.resetStartDate();try{var a=l.schedulerStartDt.replace(/(\d{2})\/(\d{2})\/(\d{4})/,function(a,b,c,d){return d+"-"+b+"-"+c});a+="T"+b("schZeroPad")(l.schedulerStartHour,2)+":"+b("schZeroPad")(l.schedulerStartMinute,2)+":"+b("schZeroPad")(l.schedulerStartSecond,2)+".000Z",l.schedulerUTCTime=b("schDateStrFix")(c.toUTC(a,l.schedulerTimeZone.name).toISOString()),l.scheduler_form_schedulerStartDt_error=!1,l.scheduler_startTime_error=!1}catch(d){l.startDateError("Provide a valid start date and time")}}else l.scheduler_startTime_error=!1,l.scheduler_form_schedulerStartDt_error=!1,l.schedulerUTCTime=b("schDateStrFix")(l.schedulerStartDt+"T"+l.schedulerStartHour+":"+l.schedulerStartMinute+":"+l.schedulerStartSecond+".000Z");else l.scheduler_startTime_error=!0},l.resetError=function(a){l[a]=!1},l.scheduleRepeatChange=function(){l.schedulerFrequency&&""!==l.schedulerFrequency.value&&"none"!==l.schedulerFrequency.value?(l.schedulerInterval=1,l.schedulerShowInterval=!0,l.schedulerIntervalLabel=l.schedulerFrequency.intervalLabel):(l.schedulerShowInterval=!1,l.schedulerEnd=l.endOptions[0]),l.sheduler_frequency_error=!1},l.showCalendar=function(a){$("#"+a).focus()},l.monthlyRepeatChange=function(){$("#monthDay").spinner("day"!==l.monthlyRepeatOption?"disable":"enable")},l.yearlyRepeatChange=function(){$("#yearlyRepeatDay").spinner("month"!==l.yearlyRepeatOption?"disable":"enable")},l.setWeekday=function(a,b){var c=l.weekDays.indexOf(b);c>=0?l.weekDays.splice(c,1):l.weekDays.push(b),$(a.target).blur(),l.scheduler_weekDays_error=!1},l.startDateError=function(a){l.scheduler_form&&(l.scheduler_form.schedulerStartDt&&(l.scheduler_form_schedulerStartDt_error=a,l.scheduler_form.schedulerStartDt.$pristine=!1,l.scheduler_form.schedulerStartDt.$dirty=!0),$("#schedulerStartDt").removeClass("ng-pristine").removeClass("ng-valid").removeClass("ng-valid-custom-error").addClass("ng-dirty").addClass("ng-invalid").addClass("ng-invalid-custom-error"))},l.resetStartDate=function(){l.scheduler_form&&(l.scheduler_form_schedulerStartDt_error="",l.scheduler_form.schedulerStartDt&&(l.scheduler_form.schedulerStartDt.$setValidity("custom-error",!0),l.scheduler_form.schedulerStartDt.$setPristine()))},l.schedulerEndChange=function(){var a=new Date,c=b("schZeroPad")(a.getMonth()+1,2),d=b("schZeroPad")(a.getDate(),2);l.schedulerEndDt=c+"/"+d+"/"+a.getFullYear(),l.schedulerOccurrenceCount=1},l.removeZonesReady&&l.removeZonesReady(),l.removeZonesReady=l.$on("zonesReady",function(){l.timeZones=JSON.parse(localStorage.zones),l.setDefaults()}),h?c.getZoneList(l):l.setDefaults(),f(l,m)}}]).factory("CreateObject",["AngularScheduler.useTimezone","$filter","GetRule","Inject","InjectDetail","SetDefaults","$timezones","SetRule","InRange",function(a,b,c,d,e,f,g,h,i){return function(f,j){var k=function(){this.scope=f,this.useTimezone=a,this.requireFutureStartTime=j,this.getOptions=function(){var a={};return a.startDate=this.scope.schedulerUTCTime,a.frequency=this.scope.schedulerFrequency.value,a.interval=this.scope.schedulerInterval,"after"===this.scope.schedulerEnd.value&&(a.occurrenceCount=this.scope.schedulerOccurrenceCount),"on"===this.scope.schedulerEnd.value&&(a.endDate=f.schedulerEndDt.replace(/(\d{2})\/(\d{2})\/(\d{4})/,function(a,b,c,d){return d+"-"+b+"-"+c})+"T"+this.scope.schedulerUTCTime.replace(/\d{2}\/\d{2}\/\d{4} /,"").replace(/ UTC/,"")+"Z"),"weekly"===this.scope.schedulerFrequency.value?a.weekDays=this.scope.weekDays:"yearly"===this.scope.schedulerFrequency.value?"month"===this.scope.yearlyRepeatOption?(a.month=this.scope.yearlyMonth.value,a.monthDay=this.scope.yearlyMonthDay):(a.setOccurrence=this.scope.yearlyOccurrence.value,a.weekDays=this.scope.yearlyWeekDay.value,a.month=this.scope.yearlyOtherMonth.value):"monthly"===this.scope.schedulerFrequency.value&&("day"===this.scope.monthlyRepeatOption?a.monthDay=this.scope.monthDay:(a.setOccurrence=this.scope.monthlyOccurrence.value,a.weekDays=this.scope.monthlyWeekDay.value)),a},this.clearErrors=function(){this.scope.scheduler_weekDays_error=!1,this.scope.scheduler_endDt_error=!1,this.scope.resetStartDate(),this.scope.scheduler_endDt_error=!1,this.scope.scheduler_interval_error=!1,this.scope.scheduler_occurrenceCount_error=!1,this.scope.scheduler_monthDay_error=!1,this.scope.scheduler_yearlyMonthDay_error=!1,this.scope.scheduler_form&&this.scope.scheduler_form.schedulerEndDt&&(this.scope.scheduler_form.schedulerEndDt.$setValidity("custom-error",!0),this.scope.scheduler_form.schedulerEndDt.$setPristine(),this.scope.scheduler_form.$setPristine())},this.setDetails=function(){var c=this.getRRule(),d=this.scope;c&&(d.rrule_nlp_description=c.toText(),d.dateChoice="local",d.occurrence_list=[],c.all(function(c,e){var f,h;return 10>e?(a?(h=g.align(c,d.schedulerTimeZone.name),f=b("schZeroPad")(h.getMonth()+1,2)+"/"+b("schZeroPad")(h.getDate(),2)+"/"+h.getFullYear()+" "+b("schZeroPad")(h.getHours(),2)+":"+b("schZeroPad")(h.getMinutes(),2)+":"+b("schZeroPad")(h.getSeconds(),2)+" "+h.getTimezoneAbbreviation()):f=b("date")(c,"MM/dd/yyyy HH:mm:ss Z"),d.occurrence_list.push({utc:b("schDateStrFix")(c.toISOString()),local:f}),!0):!1}),d.rrule_nlp_description=c.toText().replace(/^RRule error.*$/,"Natural language description not available"),d.rrule=c.toString())},this.isValid=function(){var a,c,d,e,h,j,k=!0;if(this.clearErrors(),"none"===this.scope.schedulerFrequency.value||i(this.scope.schedulerInterval,1,999,3)||(this.scope.scheduler_interval_error=!0,k=!1),"after"!==this.scope.schedulerEnd.value||i(this.scope.schedulerOccurrenceCount,1,999,3)||(this.scope.scheduler_occurrenceCount_error=!0,k=!1),"weekly"===this.scope.schedulerFrequency.value&&0===this.scope.weekDays.length&&(this.scope.scheduler_weekDays_error=!0,k=!1),"monthly"!==this.scope.schedulerFrequency.value||"day"!==this.scope.monthlyRepeatOption||i(this.scope.monthDay,1,31,99)||(this.scope.scheduler_monthDay_error=!0,k=!1),"yearly"!==this.scope.schedulerFrequency.value||"month"!==this.scope.yearlyRepeatOption||i(this.scope.yearlyMonthDay,1,31,99)||(this.scope.scheduler_yearlyMonthDay_error=!0,k=!1),i(f.schedulerStartHour,0,23,2)&&i(f.schedulerStartMinute,0,59,2)&&i(f.schedulerStartSecond,0,59,2)||(this.scope.scheduler_startTime_error=!0,k=!1),this.scope.scheduler_form.schedulerName.$valid||(this.scope.scheduler_form.schedulerName.$dirty=!0,$("#schedulerName").addClass("ng-dirty"),k=!1),"on"===this.scope.schedulerEnd.value&&(/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)||(this.scope.scheduler_form.schedulerEndDt.$pristine=!1,this.scope.scheduler_form.schedulerEndDt.$dirty=!0,$("#schedulerEndDt").removeClass("ng-pristine").removeClass("ng-valid").removeClass("ng-valid-custom-error").addClass("ng-dirty").addClass("ng-invalid").addClass("ng-invalid-custom-error"),this.scope.scheduler_endDt_error=!0,k=!1)),this.scope.schedulerUTCTime)try{a=new Date(this.scope.schedulerUTCTime),isNaN(a)?(this.scope.startDateError("Invalid start time"),k=!1):(j=a.getTime(),c=new Date,this.useTimezone?(d=c.getFullYear()+"-"+b("schZeroPad")(c.getMonth()+1,2)+"-"+b("schZeroPad")(c.getDate(),2)+"T"+b("schZeroPad")(c.getHours(),2)+":"+b("schZeroPad")(c.getMinutes(),2)+":"+b("schZeroPad")(c.getSeconds(),2)+".000Z",e=g.toUTC(d,this.scope.schedulerTimeZone.name),h=e.getTime()):h=c.getTime(),this.requireFutureStartTime&&h>=j&&(this.scope.startDateError("Start time must be in the future"),k=!1))}catch(l){this.scope.startDateError("Invalid start time"),k=!1}else this.scope.startDateError("Provide a start time"),k=!1;return f.schedulerIsValid=k,k&&this.setDetails(),k},this.getRRule=function(){var a=this.getOptions();return c(a)},this.getValue=function(){var a=this.getRRule(),b=this.getOptions();return{name:f.schedulerName,rrule:a.toString(),options:b}},this.setRRule=function(a){return this.clear(),h(a,this.scope)},this.setName=function(a){this.scope.schedulerName=a},this.inject=function(a,b){return d({scope:this.scope,target:a,buttons:b})},this.injectDetail=function(a,b){return e({scope:this.scope,target:a,showRRule:b})},this.clear=function(){this.clearErrors(),this.scope.scheduler_form&&this.scope.scheduler_form.schedulerName&&this.scope.scheduler_form.schedulerName.$setPristine(),this.scope.setDefaults()},this.getUserTimezone=function(){return g.getLocal()},this.setRequireFutureStartTime=function(a){this.requireFutureStartTime=a},this.getRequireFutureStartTime=function(){return this.requireFutureStartTime},this.setShowRRule=function(a){f.showRRule=a}};return new k}}]).factory("InRange",[function(){return function(a,b,c,d){var e=new RegExp("\\d{1,"+d+"}");return e.test(a)?b>a||a>c?!1:!0:!1}}]).factory("Inject",["AngularScheduler.partials","$compile","$http","$log",function(a,b,c){return function(d){var e=d.scope,f=d.target,g=d.buttons;e.removeHtmlReady&&e.removeHtmlReady(),e.removeHtmlReady=e.$on("htmlReady",function(a,c){var d=angular.isObject(f)?f:angular.element(document.getElementById(f));d.html(c),b(d)(e),g&&$("#scheduler-buttons").show()}),c({method:"GET",url:a+"angular-scheduler.html"}).success(function(a){e.$emit("htmlReady",a)}).error(function(b,c){throw"Error reading "+a+"angular-scheduler.html. "+c})}}]).factory("InjectDetail",["AngularScheduler.partials","$compile","$http","$log",function(a,b,c){return function(d){var e=d.scope,f=d.target,g=d.showRRule;e.showRRule=g||!1,e.removeHtmlDetailReady&&e.removeHtmlDetailReady(),e.removeHtmlDetailReady=e.$on("htmlDetailReady",function(a,c){var d=angular.isObject(f)?f:angular.element(document.getElementById(f));d.html(c),b(d)(e)}),c({method:"GET",url:a+"angular-scheduler-detail.html"}).success(function(a){e.$emit("htmlDetailReady",a)}).error(function(b,c){throw"Error reading "+a+"angular-scheduler-detail.html. "+c})}}]).factory("GetRule",["$log",function(a){return function(b){var c,d=b.startDate,e=b.frequency,f=b.interval,g=b.occurrenceCount,h=b.endDate,i=b.month,j=b.monthDay,k=b.weekDays,l=b.setOccurrence,m={};if(angular.isDate(d))m.dtstart=d;else try{m.dtstart=new Date(d)}catch(n){a.error("Date conversion failed. Attempted to convert "+d+" to Date. "+n.message)}if(e&&"none"!==e){if(m.freq=RRule[e.toUpperCase()],m.interval=f,k&&"string"==typeof k&&(m.byweekday=RRule[k.toUpperCase()]),k&&angular.isArray(k))for(m.byweekday=[],c=0;c 0"),"BYDAY"===r)if("WEEKLY"===g(d,"FREQ"))for(i=s.split(/,/),f.weekDays=[],k=0;k0&&parseInt(s,10)<32?(f.monthDay=parseInt(s,10),f.monhthlyRepeatOption="day"):m="BYMONTHDAY must contain an integer between 1 and 31"),"DTSTART"===r&&(n=!0,/\d{8}T\d{6}.*Z/.test(s)&&(s=s.replace(/(\d{4})(\d{2})(\d{2}T)(\d{2})(\d{2})(\d{2}.*$)/,function(a,b,c,d,e,f,g){return b+"-"+c+"-"+d+e+":"+f+":"+g.substr(0,2)+"Z"})),a?(l=new Date(s),o=e("schZeroPad")(l.getMonth()+1,2),p=e("schZeroPad")(l.getDate(),2),f.schedulerStartDt=o+"/"+p+"/"+l.getFullYear(),f.schedulerStartHour=e("schZeroPad")(l.getHours(),2),f.schedulerStartMinute=e("schZeroPad")(l.getMinutes(),2),f.schedulerStartSecond=e("schZeroPad")(l.getSeconds(),2),f.scheduleTimeChange()):(f.schedulerStartDt=s.replace(/T.*$/,"").replace(/(\d{4})-(\d{2})-(\d{2})/,function(a,b,c,d){return c+"/"+d+"/"+b}),q=s.replace(/^.*T/,""),f.schedulerStartHour=e("schZeroPad")(q.substr(0,2),2),f.schedulerStartMinute=e("schZeroPad")(q.substr(3,2),2),f.schedulerStartSecond=e("schZeroPad")(q.substr(6,2),2)),f.scheduleTimeChange()),"BYSETPOS"===r&&("YEARLY"===g(d,"FREQ")?(f.yearlRepeatOption="other",f.yearlyOccurrence=b.find(f.occurrences,function(a){return a.value===parseInt(s,10)}),f.yearlyOccurrence&&f.yearlyOccurrence.name||(m="BYSETPOS was not in the set of 1,2,3,4,-1")):(f.monthlyOccurrence=b.find(f.occurrences,function(a){return a.value===parseInt(s,10)}),f.monthlyOccurrence&&f.monthlyOccurrence.name||(m="BYSETPOS was not in the set of 1,2,3,4,-1"))),"COUNT"===r&&(parseInt(s,10)?(f.schedulerEnd=f.endOptions[1],f.schedulerOccurrenceCount=parseInt(s,10)):m="COUNT must be a valid integer > 0"),"UNTIL"===r&&(/\d{8}T\d{6}.*Z/.test(s)&&(s=s.replace(/(\d{4})(\d{2})(\d{2}T)(\d{2})(\d{2})(\d{2}.*$)/,function(a,b,c,d,e,f,g){return b+"-"+c+"-"+d+e+":"+f+":"+g.substr(0,2)+"Z"})),f.schedulerEnd=f.endOptions[2],a?(l=new Date(s),o=e("schZeroPad")(l.getMonth()+1,2),p=e("schZeroPad")(l.getDate(),2),f.schedulerEndDt=o+"/"+p+"/"+l.getFullYear()):f.schedulerEndDt=s.replace(/T.*$/,"").replace(/(\d{4})-(\d{2})-(\d{2})/,function(a,b,c,d){return c+"/"+d+"/"+b})),"BYMONTH"===r&&("YEARLY"===g(d,"FREQ")&&g(d,"BYDAY")?(f.yearlRepeatOption="other",f.yearlyOtherMonth=b.find(f.months,function(a){return a.value===parseInt(s,10)}),f.yearlyOtherMonth&&f.yearlyOtherMonth.name||(m="BYMONTH must be an integer between 1 and 12")):(f.yearlyOption="month",f.yearlyMonth=b.find(f.months,function(a){return a.value===parseInt(s,10)}),f.yearlyMonth&&f.yearlyMonth.name||(m="BYMONTH must be an integer between 1 and 12"))),"BYMONTHDAY"===r&&(parseInt(s,10)?f.yearlyMonthDay=parseInt(s,10):m="BYMONTHDAY must be an integer between 1 and 31")}function j(){"weekly"===f.schedulerFrequency.name&&0===f.weekDays.length&&(m="Frequency is weekly, but BYDAYS value is missing."),n||(m="Warning: start date was not provided")}var k,l,m="",n=!1;if(d)if(k=d.split(/;/),angular.isArray(k)){for(l=0;l=0?l.weekDays.splice(c,1):l.weekDays.push(b),$(a.target).blur(),l.scheduler_weekDays_error=!1},l.startDateError=function(a){l.scheduler_form&&(l.scheduler_form.schedulerStartDt&&(l.scheduler_form_schedulerStartDt_error=a,l.scheduler_form.schedulerStartDt.$pristine=!1,l.scheduler_form.schedulerStartDt.$dirty=!0),$("#schedulerStartDt").removeClass("ng-pristine").removeClass("ng-valid").removeClass("ng-valid-custom-error").addClass("ng-dirty").addClass("ng-invalid").addClass("ng-invalid-custom-error"))},l.resetStartDate=function(){l.scheduler_form&&(l.scheduler_form_schedulerStartDt_error="",l.scheduler_form.schedulerStartDt&&(l.scheduler_form.schedulerStartDt.$setValidity("custom-error",!0),l.scheduler_form.schedulerStartDt.$setPristine()))},l.schedulerEndChange=function(){var a=new Date,c=b("schZeroPad")(a.getMonth()+1,2),d=b("schZeroPad")(a.getDate(),2);l.schedulerEndDt=c+"/"+d+"/"+a.getFullYear(),l.schedulerOccurrenceCount=1},l.removeZonesReady&&l.removeZonesReady(),l.removeZonesReady=l.$on("zonesReady",function(){l.timeZones=JSON.parse(localStorage.zones),l.setDefaults()}),h?c.getZoneList(l):l.setDefaults(),f(l,m)}}]).factory("CreateObject",["AngularScheduler.useTimezone","$filter","GetRule","Inject","InjectDetail","SetDefaults","$timezones","SetRule","InRange",function(a,b,c,d,e,f,g,h,i){return function(f,j){var k=function(){this.scope=f,this.useTimezone=a,this.requireFutureStartTime=j,this.getOptions=function(){var a={};return a.startDate=this.scope.schedulerUTCTime,a.frequency=this.scope.schedulerFrequency.value,a.interval=this.scope.schedulerInterval,"after"===this.scope.schedulerEnd.value&&(a.occurrenceCount=this.scope.schedulerOccurrenceCount),"on"===this.scope.schedulerEnd.value&&(a.endDate=f.schedulerEndDt.replace(/(\d{2})\/(\d{2})\/(\d{4})/,function(a,b,c,d){return d+"-"+b+"-"+c})+"T"+this.scope.schedulerUTCTime.replace(/\d{2}\/\d{2}\/\d{4} /,"").replace(/ UTC/,"")+"Z"),"weekly"===this.scope.schedulerFrequency.value?a.weekDays=this.scope.weekDays:"yearly"===this.scope.schedulerFrequency.value?"month"===this.scope.yearlyRepeatOption?(a.month=this.scope.yearlyMonth.value,a.monthDay=this.scope.yearlyMonthDay):(a.setOccurrence=this.scope.yearlyOccurrence.value,a.weekDays=this.scope.yearlyWeekDay.value,a.month=this.scope.yearlyOtherMonth.value):"monthly"===this.scope.schedulerFrequency.value&&("day"===this.scope.monthlyRepeatOption?a.monthDay=this.scope.monthDay:(a.setOccurrence=this.scope.monthlyOccurrence.value,a.weekDays=this.scope.monthlyWeekDay.value)),a},this.clearErrors=function(){this.scope.scheduler_weekDays_error=!1,this.scope.scheduler_endDt_error=!1,this.scope.resetStartDate(),this.scope.scheduler_endDt_error=!1,this.scope.scheduler_interval_error=!1,this.scope.scheduler_occurrenceCount_error=!1,this.scope.scheduler_monthDay_error=!1,this.scope.scheduler_yearlyMonthDay_error=!1,this.scope.scheduler_form&&this.scope.scheduler_form.schedulerEndDt&&(this.scope.scheduler_form.schedulerEndDt.$setValidity("custom-error",!0),this.scope.scheduler_form.schedulerEndDt.$setPristine(),this.scope.scheduler_form.$setPristine())},this.setDetails=function(){var c=this.getRRule(),d=this.scope;c&&(d.rrule_nlp_description=c.toText(),d.dateChoice="local",d.occurrence_list=[],c.all(function(c,e){var f,h;return 10>e?(a?(h=g.align(c,d.schedulerTimeZone.name),f=b("schZeroPad")(h.getMonth()+1,2)+"/"+b("schZeroPad")(h.getDate(),2)+"/"+h.getFullYear()+" "+b("schZeroPad")(h.getHours(),2)+":"+b("schZeroPad")(h.getMinutes(),2)+":"+b("schZeroPad")(h.getSeconds(),2)+" "+h.getTimezoneAbbreviation()):f=b("date")(c,"MM/dd/yyyy HH:mm:ss Z"),d.occurrence_list.push({utc:b("schDateStrFix")(c.toISOString()),local:f}),!0):!1}),d.rrule_nlp_description=c.toText().replace(/^RRule error.*$/,"Natural language description not available"),d.rrule=c.toString())},this.isValid=function(){var a,c,d,e,h,j,k=!0;if(this.clearErrors(),"none"===this.scope.schedulerFrequency.value||i(this.scope.schedulerInterval,1,999,3)||(this.scope.scheduler_interval_error=!0,k=!1),"after"!==this.scope.schedulerEnd.value||i(this.scope.schedulerOccurrenceCount,1,999,3)||(this.scope.scheduler_occurrenceCount_error=!0,k=!1),"weekly"===this.scope.schedulerFrequency.value&&0===this.scope.weekDays.length&&(this.scope.scheduler_weekDays_error=!0,k=!1),"monthly"!==this.scope.schedulerFrequency.value||"day"!==this.scope.monthlyRepeatOption||i(this.scope.monthDay,1,31,99)||(this.scope.scheduler_monthDay_error=!0,k=!1),"yearly"!==this.scope.schedulerFrequency.value||"month"!==this.scope.yearlyRepeatOption||i(this.scope.yearlyMonthDay,1,31,99)||(this.scope.scheduler_yearlyMonthDay_error=!0,k=!1),i(f.schedulerStartHour,0,23,2)&&i(f.schedulerStartMinute,0,59,2)&&i(f.schedulerStartSecond,0,59,2)||(this.scope.scheduler_startTime_error=!0,k=!1),this.scope.scheduler_form.schedulerName.$valid||(this.scope.scheduler_form.schedulerName.$dirty=!0,$("#schedulerName").addClass("ng-dirty"),k=!1),"on"===this.scope.schedulerEnd.value&&(/^\d{2}\/\d{2}\/\d{4}$/.test(this.scope.schedulerEndDt)||(this.scope.scheduler_form.schedulerEndDt.$pristine=!1,this.scope.scheduler_form.schedulerEndDt.$dirty=!0,$("#schedulerEndDt").removeClass("ng-pristine").removeClass("ng-valid").removeClass("ng-valid-custom-error").addClass("ng-dirty").addClass("ng-invalid").addClass("ng-invalid-custom-error"),this.scope.scheduler_endDt_error=!0,k=!1)),this.scope.schedulerUTCTime)try{a=new Date(this.scope.schedulerUTCTime),isNaN(a)?(this.scope.startDateError("Invalid start time"),k=!1):(j=a.getTime(),c=new Date,this.useTimezone?(d=c.getFullYear()+"-"+b("schZeroPad")(c.getMonth()+1,2)+"-"+b("schZeroPad")(c.getDate(),2)+"T"+b("schZeroPad")(c.getHours(),2)+":"+b("schZeroPad")(c.getMinutes(),2)+":"+b("schZeroPad")(c.getSeconds(),2)+".000Z",e=g.toUTC(d,this.scope.schedulerTimeZone.name),h=e.getTime()):h=c.getTime(),this.requireFutureStartTime&&h>=j&&(this.scope.startDateError("Start time must be in the future"),k=!1))}catch(l){this.scope.startDateError("Invalid start time"),k=!1}else this.scope.startDateError("Provide a start time"),k=!1;return f.schedulerIsValid=k,k&&this.setDetails(),k},this.getRRule=function(){var a=this.getOptions();return c(a)},this.getValue=function(){var a=this.getRRule(),b=this.getOptions();return{name:f.schedulerName,rrule:a.toString(),options:b}},this.setRRule=function(a){return this.clear(),h(a,this.scope)},this.setName=function(a){this.scope.schedulerName=a},this.inject=function(a,b){return d({scope:this.scope,target:a,buttons:b})},this.injectDetail=function(a,b){return e({scope:this.scope,target:a,showRRule:b})},this.clear=function(){this.clearErrors(),this.scope.scheduler_form&&this.scope.scheduler_form.schedulerName&&this.scope.scheduler_form.schedulerName.$setPristine(),this.scope.setDefaults()},this.getUserTimezone=function(){return g.getLocal()},this.setRequireFutureStartTime=function(a){this.requireFutureStartTime=a},this.getRequireFutureStartTime=function(){return this.requireFutureStartTime},this.setShowRRule=function(a){f.showRRule=a}};return new k}}]).factory("InRange",[function(){return function(a,b,c,d){var e=new RegExp("\\d{1,"+d+"}");return e.test(a)?b>a||a>c?!1:!0:!1}}]).factory("Inject",["AngularScheduler.partials","$compile","$http","$log",function(a,b,c){return function(d){var e=d.scope,f=d.target,g=d.buttons;e.removeHtmlReady&&e.removeHtmlReady(),e.removeHtmlReady=e.$on("htmlReady",function(a,c){var d=angular.isObject(f)?f:angular.element(document.getElementById(f));d.html(c),b(d)(e),g&&$("#scheduler-buttons").show()}),c({method:"GET",url:a+"angular-scheduler.html"}).success(function(a){e.$emit("htmlReady",a)}).error(function(b,c){throw"Error reading "+a+"angular-scheduler.html. "+c})}}]).factory("InjectDetail",["AngularScheduler.partials","$compile","$http","$log",function(a,b,c){return function(d){var e=d.scope,f=d.target,g=d.showRRule;e.showRRule=g||!1,e.removeHtmlDetailReady&&e.removeHtmlDetailReady(),e.removeHtmlDetailReady=e.$on("htmlDetailReady",function(a,c){var d=angular.isObject(f)?f:angular.element(document.getElementById(f));d.html(c),b(d)(e)}),c({method:"GET",url:a+"angular-scheduler-detail.html"}).success(function(a){e.$emit("htmlDetailReady",a)}).error(function(b,c){throw"Error reading "+a+"angular-scheduler-detail.html. "+c})}}]).factory("GetRule",["$log",function(a){return function(b){var c,d=b.startDate,e=b.frequency,f=b.interval,g=b.occurrenceCount,h=b.endDate,i=b.month,j=b.monthDay,k=b.weekDays,l=b.setOccurrence,m={};if(angular.isDate(d))m.dtstart=d;else try{m.dtstart=new Date(d)}catch(n){a.error("Date conversion failed. Attempted to convert "+d+" to Date. "+n.message)}if(e&&"none"!==e){if(m.freq=RRule[e.toUpperCase()],m.interval=f,k&&"string"==typeof k&&(m.byweekday=RRule[k.toUpperCase()]),k&&angular.isArray(k))for(m.byweekday=[],c=0;c 0"),"BYDAY"===r)if("WEEKLY"===g(d,"FREQ"))for(i=s.split(/,/),f.weekDays=[],k=0;k0&&parseInt(s,10)<32?(f.monthDay=parseInt(s,10),f.monhthlyRepeatOption="day"):m="BYMONTHDAY must contain an integer between 1 and 31"),"DTSTART"===r&&(n=!0,/\d{8}T\d{6}.*Z/.test(s)&&(s=s.replace(/(\d{4})(\d{2})(\d{2}T)(\d{2})(\d{2})(\d{2}.*$)/,function(a,b,c,d,e,f,g){return b+"-"+c+"-"+d+e+":"+f+":"+g.substr(0,2)+"Z"})),a?(l=new Date(s),o=e("schZeroPad")(l.getMonth()+1,2),p=e("schZeroPad")(l.getDate(),2),f.schedulerStartDt=o+"/"+p+"/"+l.getFullYear(),f.schedulerStartHour=e("schZeroPad")(l.getHours(),2),f.schedulerStartMinute=e("schZeroPad")(l.getMinutes(),2),f.schedulerStartSecond=e("schZeroPad")(l.getSeconds(),2),f.scheduleTimeChange()):(f.schedulerStartDt=s.replace(/T.*$/,"").replace(/(\d{4})-(\d{2})-(\d{2})/,function(a,b,c,d){return c+"/"+d+"/"+b}),q=s.replace(/^.*T/,""),f.schedulerStartHour=e("schZeroPad")(q.substr(0,2),2),f.schedulerStartMinute=e("schZeroPad")(q.substr(3,2),2),f.schedulerStartSecond=e("schZeroPad")(q.substr(6,2),2)),f.scheduleTimeChange()),"BYSETPOS"===r&&("YEARLY"===g(d,"FREQ")?(f.yearlRepeatOption="other",f.yearlyOccurrence=b.find(f.occurrences,function(a){return a.value===parseInt(s,10)}),f.yearlyOccurrence&&f.yearlyOccurrence.name||(m="BYSETPOS was not in the set of 1,2,3,4,-1")):(f.monthlyOccurrence=b.find(f.occurrences,function(a){return a.value===parseInt(s,10)}),f.monthlyOccurrence&&f.monthlyOccurrence.name||(m="BYSETPOS was not in the set of 1,2,3,4,-1"))),"COUNT"===r&&(parseInt(s,10)?(f.schedulerEnd=f.endOptions[1],f.schedulerOccurrenceCount=parseInt(s,10)):m="COUNT must be a valid integer > 0"),"UNTIL"===r&&(/\d{8}T\d{6}.*Z/.test(s)&&(s=s.replace(/(\d{4})(\d{2})(\d{2}T)(\d{2})(\d{2})(\d{2}.*$)/,function(a,b,c,d,e,f,g){return b+"-"+c+"-"+d+e+":"+f+":"+g.substr(0,2)+"Z"})),f.schedulerEnd=f.endOptions[2],a?(l=new Date(s),o=e("schZeroPad")(l.getMonth()+1,2),p=e("schZeroPad")(l.getDate(),2),f.schedulerEndDt=o+"/"+p+"/"+l.getFullYear()):f.schedulerEndDt=s.replace(/T.*$/,"").replace(/(\d{4})-(\d{2})-(\d{2})/,function(a,b,c,d){return c+"/"+d+"/"+b})),"BYMONTH"===r&&("YEARLY"===g(d,"FREQ")&&g(d,"BYDAY")?(f.yearlRepeatOption="other",f.yearlyOtherMonth=b.find(f.months,function(a){return a.value===parseInt(s,10)}),f.yearlyOtherMonth&&f.yearlyOtherMonth.name||(m="BYMONTH must be an integer between 1 and 12")):(f.yearlyOption="month",f.yearlyMonth=b.find(f.months,function(a){return a.value===parseInt(s,10)}),f.yearlyMonth&&f.yearlyMonth.name||(m="BYMONTH must be an integer between 1 and 12"))),"BYMONTHDAY"===r&&(parseInt(s,10)?f.yearlyMonthDay=parseInt(s,10):m="BYMONTHDAY must be an integer between 1 and 31")}function j(){"weekly"===f.schedulerFrequency.name&&0===f.weekDays.length&&(m="Frequency is weekly, but BYDAYS value is missing."),n||(m="Warning: start date was not provided")}var k,l,m="",n=!1;if(d)if(k=d.split(/;/),angular.isArray(k)){for(l=0;l + * + * + *
+ * + * + * + * + * + * + * + *
{{heading}}
{{fill}}
+ *
+ *
+ * + * var app = angular.module('multi-bootstrap', []) + * + * .controller('BrokenTable', function($scope) { + * $scope.headings = ['One', 'Two', 'Three']; + * $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]]; + * }); + * + * + * it('should only insert one table cell for each item in $scope.fillings', function() { + * expect(element.all(by.css('td')).count()) + * .toBe(9); + * }); + * + * + * + * @param {DOMElement} element DOM element which is the root of angular application. * @param {Array=} modules an array of modules to load into the application. * Each item in the array should be the name of a predefined module or a (DI annotated) * function that will be invoked by the injector as a run block. @@ -1531,10 +1572,10 @@ function setupModuleLoader(window) { * myModule.value('appName', 'MyCoolApp'); * * // configure existing services inside initialization blocks. - * myModule.config(function($locationProvider) { + * myModule.config(['$locationProvider', function($locationProvider) { * // Configure existing providers * $locationProvider.hashPrefix('!'); - * }); + * }]); * ``` * * Then you can create an injector and load your modules like this: @@ -1548,8 +1589,8 @@ function setupModuleLoader(window) { * {@link angular.bootstrap} to simplify this process for you. * * @param {!string} name The name of the module to create or retrieve. - * @param {Array.=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. +<<<<<* @param {!Array.=} requires If specified then new module is being created. If +>>>>>* unspecified then the module is being retrieved for further configuration. * @param {Function} configFn Optional configuration function for the module. Same as * {@link angular.Module#config Module#config()}. * @returns {module} new module with the {@link angular.Module} api. @@ -1878,10 +1919,10 @@ function setupModuleLoader(window) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.2.15-build.2398+sha.4bab3d8', // all of these placeholder strings will be replaced by grunt's + full: '1.2.17-build.95+sha.3691454', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 2, - dot: 15, + dot: 17, codeName: 'snapshot' }; @@ -2185,6 +2226,75 @@ function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArgu } } +var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; +var HTML_REGEXP = /<|&#?\w+;/; +var TAG_NAME_REGEXP = /<([\w:]+)/; +var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; + +var wrapMap = { + 'option': [1, ''], + + 'thead': [1, '', '
'], + 'col': [2, '', '
'], + 'tr': [2, '', '
'], + 'td': [3, '', '
'], + '_default': [0, "", ""] +}; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function jqLiteIsTextNode(html) { + return !HTML_REGEXP.test(html); +} + +function jqLiteBuildFragment(html, context) { + var elem, tmp, tag, wrap, + fragment = context.createDocumentFragment(), + nodes = [], i, j, jj; + + if (jqLiteIsTextNode(html)) { + // Convert non-html into a text node + nodes.push(context.createTextNode(html)); + } else { + tmp = fragment.appendChild(context.createElement('div')); + // Convert html into DOM nodes + tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); + wrap = wrapMap[tag] || wrapMap._default; + tmp.innerHTML = '
 
' + + wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1>") + wrap[2]; + tmp.removeChild(tmp.firstChild); + + // Descend through wrappers to the right content + i = wrap[0]; + while (i--) { + tmp = tmp.lastChild; + } + + for (j=0, jj=tmp.childNodes.length; j + +
+ + + + +

Cached Values

+
+ + : + +
+ +

Cache Info

+
+ + : + +
+
+
+ + angular.module('cacheExampleApp', []). + controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { + $scope.keys = []; + $scope.cache = $cacheFactory('cacheId'); + $scope.put = function(key, value) { + $scope.cache.put(key, value); + $scope.keys.push(key); + }; + }]); + + + p { + margin: 10px 0 3px; + } + + */ function $CacheFactoryProvider() { @@ -4581,8 +4731,65 @@ function $CacheFactoryProvider() { freshEnd = null, staleEnd = null; + /** + * @ngdoc type + * @name $cacheFactory.Cache + * + * @description + * A cache object used to store and retrieve data, primarily used by + * {@link $http $http} and the {@link ng.directive:script script} directive to cache + * templates and other data. + * + * ```js + * angular.module('superCache') + * .factory('superCache', ['$cacheFactory', function($cacheFactory) { + * return $cacheFactory('super-cache'); + * }]); + * ``` + * + * Example test: + * + * ```js + * it('should behave like a cache', inject(function(superCache) { + * superCache.put('key', 'value'); + * superCache.put('another key', 'another value'); + * + * expect(superCache.info()).toEqual({ + * id: 'super-cache', + * size: 2 + * }); + * + * superCache.remove('another key'); + * expect(superCache.get('another key')).toBeUndefined(); + * + * superCache.removeAll(); + * expect(superCache.info()).toEqual({ + * id: 'super-cache', + * size: 0 + * }); + * })); + * ``` + */ return caches[cacheId] = { + /** + * @ngdoc method + * @name $cacheFactory.Cache#put + * @function + * + * @description + * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be + * retrieved later, and incrementing the size of the cache if the key was not already + * present in the cache. If behaving like an LRU cache, it will also remove stale + * entries from the set. + * + * It will not insert undefined values into the cache. + * + * @param {string} key the key under which the cached data is stored. + * @param {*} value the value to store alongside the key. If it is undefined, the key + * will not be stored. + * @returns {*} the value stored. + */ put: function(key, value) { if (capacity < Number.MAX_VALUE) { var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); @@ -4601,7 +4808,17 @@ function $CacheFactoryProvider() { return value; }, - + /** + * @ngdoc method + * @name $cacheFactory.Cache#get + * @function + * + * @description + * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. + * + * @param {string} key the key of the data to be retrieved + * @returns {*} the value stored. + */ get: function(key) { if (capacity < Number.MAX_VALUE) { var lruEntry = lruHash[key]; @@ -4615,6 +4832,16 @@ function $CacheFactoryProvider() { }, + /** + * @ngdoc method + * @name $cacheFactory.Cache#remove + * @function + * + * @description + * Removes an entry from the {@link $cacheFactory.Cache Cache} object. + * + * @param {string} key the key of the entry to be removed + */ remove: function(key) { if (capacity < Number.MAX_VALUE) { var lruEntry = lruHash[key]; @@ -4633,6 +4860,14 @@ function $CacheFactoryProvider() { }, + /** + * @ngdoc method + * @name $cacheFactory.Cache#removeAll + * @function + * + * @description + * Clears the cache object of any entries. + */ removeAll: function() { data = {}; size = 0; @@ -4641,6 +4876,15 @@ function $CacheFactoryProvider() { }, + /** + * @ngdoc method + * @name $cacheFactory.Cache#destroy + * @function + * + * @description + * Destroys the {@link $cacheFactory.Cache Cache} object entirely, + * removing it from the {@link $cacheFactory $cacheFactory} set. + */ destroy: function() { data = null; stats = null; @@ -4649,6 +4893,22 @@ function $CacheFactoryProvider() { }, + /** + * @ngdoc method + * @name $cacheFactory.Cache#info + * @function + * + * @description + * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. + * + * @returns {object} an object with the following properties: + *
    + *
  • **id**: the id of the cache instance
  • + *
  • **size**: the number of entries kept in the cache instance
  • + *
  • **...**: any additional properties from the options object when creating the + * cache.
  • + *
+ */ info: function() { return extend({}, stats, {size: size}); } @@ -4733,15 +4993,11 @@ function $CacheFactoryProvider() { * `$templateCache` service directly. * * Adding via the `script` tag: + * * ```html - * - * - * - * - * ... - * + * * ``` * * **Note:** the `script` tag containing the template does not need to be included in the `head` of @@ -4839,6 +5095,7 @@ function $TemplateCacheProvider() { * restrict: 'A', * scope: false, * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, + * controllerAs: 'stringAlias', * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], * compile: function compile(tElement, tAttrs, transclude) { * return { @@ -5056,6 +5313,16 @@ function $TemplateCacheProvider() { * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration * should be done in a linking function rather than in a compile function. * + + *
+ * **Note:** The compile function cannot handle directives that recursively use themselves in their + * own templates or compile functions. Compiling these directives results in an infinite loop and a + * stack overflow errors. + * + * This can be avoided by manually using $compile in the postLink function to imperatively compile + * a directive's template instead of relying on automatic template compilation via `template` or + * `templateUrl` declaration or manual compilation inside the compile function. + *
* *
* **Note:** The `transclude` function that is passed to the compile function is deprecated, as it @@ -5277,8 +5544,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { var hasDirectives = {}, Suffix = 'Directive', COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/, - TABLE_CONTENT_REGEXP = /^<\s*(tr|th|td|thead|tbody|tfoot)(\s+[^>]*)?>/i; + CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes // The assumption is that future DOM event attribute names will begin with @@ -6020,7 +6286,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (directive.replace) { replaceDirective = directive; - $template = directiveTemplateContents(directiveValue); + if (jqLiteIsTextNode(directiveValue)) { + $template = []; + } else { + $template = jqLite(trim(directiveValue)); + } compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { @@ -6419,27 +6689,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } - function directiveTemplateContents(template) { - var type; - template = trim(template); - if ((type = TABLE_CONTENT_REGEXP.exec(template))) { - type = type[1].toLowerCase(); - var table = jqLite('' + template + '
'); - if (/(thead|tbody|tfoot)/.test(type)) { - return table.children(type); - } - table = table.children('tbody'); - if (type === 'tr') { - return table.children('tr'); - } - return table.children('tr').contents(); - } - return jqLite('
' + - template + - '
').contents(); - } - - function compileTemplateUrl(directives, $compileNode, tAttrs, $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { var linkQueue = [], @@ -6464,7 +6713,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { content = denormalizeTemplate(content); if (origAsyncDirective.replace) { - $template = directiveTemplateContents(content); + if (jqLiteIsTextNode(content)) { + $template = []; + } else { + $template = jqLite(trim(content)); + } compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { @@ -6902,6 +7155,22 @@ function $ControllerProvider() { * * @description * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. + * + * @example + + +
+

$document title:

+

window.document title:

+
+
+ + function MainCtrl($scope, $document) { + $scope.title = $document[0].title; + $scope.windowTitle = angular.element(window.document)[0].title; + } + +
*/ function $DocumentProvider(){ this.$get = ['$window', function(window){ @@ -7052,7 +7321,7 @@ function $HttpProvider() { // transform outgoing request data transformRequest: [function(d) { - return isObject(d) && !isFile(d) ? toJson(d) : d; + return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; }], // default headers @@ -7185,9 +7454,8 @@ function $HttpProvider() { * * # Shortcut methods * - * Since all invocations of the $http service require passing in an HTTP method and URL, and - * POST/PUT requests require request data to be provided as well, shortcut methods - * were created: + * Shortcut methods are also available. All shortcut methods require passing in the URL, and + * request data must be passed in for POST/PUT requests. * * ```js * $http.get('/someUrl').success(successCallback); @@ -7227,7 +7495,7 @@ function $HttpProvider() { * * ``` * module.run(function($http) { - * $http.defaults.headers.common.Authentication = 'Basic YmVlcDpib29w' + * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' * }); * ``` * @@ -7521,6 +7789,7 @@ function $HttpProvider() { * - **status** – `{number}` – HTTP status code of the response. * - **headers** – `{function([headerName])}` – Header getter function. * - **config** – `{Object}` – The configuration object that was used to generate the request. + * - **statusText** – `{string}` – HTTP status text of the response. * * @property {Array.} pendingRequests Array of config objects for currently pending * requests. This is primarily meant to be used for debugging purposes. @@ -7895,9 +8164,9 @@ function $HttpProvider() { } else { // serving from cache if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2])); + resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]); } else { - resolvePromise(cachedResp, 200, {}); + resolvePromise(cachedResp, 200, {}, 'OK'); } } } else { @@ -7921,17 +8190,17 @@ function $HttpProvider() { * - resolves the raw $http promise * - calls $apply */ - function done(status, response, headersString) { + function done(status, response, headersString, statusText) { if (cache) { if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString)]); + cache.put(url, [status, response, parseHeaders(headersString), statusText]); } else { // remove promise from the cache cache.remove(url); } } - resolvePromise(response, status, headersString); + resolvePromise(response, status, headersString, statusText); if (!$rootScope.$$phase) $rootScope.$apply(); } @@ -7939,7 +8208,7 @@ function $HttpProvider() { /** * Resolves the raw $http promise. */ - function resolvePromise(response, status, headers) { + function resolvePromise(response, status, headers, statusText) { // normalize internal statuses to 0 status = Math.max(status, 0); @@ -7947,7 +8216,8 @@ function $HttpProvider() { data: response, status: status, headers: headersGetter(headers), - config: config + config: config, + statusText : statusText }); } @@ -8081,7 +8351,8 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc completeRequest(callback, status || xhr.status, response, - responseHeaders); + responseHeaders, + xhr.statusText || ''); } }; @@ -8122,20 +8393,23 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc xhr && xhr.abort(); } - function completeRequest(callback, status, response, headersString) { + function completeRequest(callback, status, response, headersString, statusText) { // cancel timeout and subsequent timeout promise resolution timeoutId && $browserDefer.cancel(timeoutId); jsonpDone = xhr = null; // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources. - // On Android 4.1 stock browser it occurs while retrieving files from application cache. - status = (status === 0) ? (response ? 200 : 404) : status; + // Occurs when accessing file resources or on Android 4.1 stock browser + // while retrieving files from application cache. + if (status === 0) { + status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; + } // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status == 1223 ? 204 : status; + status = status === 1223 ? 204 : status; + statusText = statusText || ''; - callback(status, response, headersString); + callback(status, response, headersString, statusText); $browser.$$completeOutstandingRequest(noop); } }; @@ -9171,8 +9445,7 @@ function locationGetterSetter(property, preprocess) { * - Clicks on a link. * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). * - * For more information see {@link guide/dev_guide.services.$location Developer Guide: Angular - * Services: Using $location} + * For more information see {@link guide/$location Developer Guide: Using $location} */ /** @@ -9908,7 +10181,11 @@ var Parser = function (lexer, $filter, options) { this.options = options; }; -Parser.ZERO = function () { return 0; }; +Parser.ZERO = extend(function () { + return 0; +}, { + constant: true +}); Parser.prototype = { constructor: Parser, @@ -10900,7 +11177,7 @@ function $ParseProvider() { * * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to - * make your code IE8 compatible. + * make your code IE8 and Android 2.x compatible. * * # Chaining promises * @@ -11313,21 +11590,32 @@ function qFactory(nextTick, exceptionHandler) { } function $$RAFProvider(){ //rAF - this.$get = ['$window', function($window) { + this.$get = ['$window', '$timeout', function($window, $timeout) { var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame; + $window.webkitRequestAnimationFrame || + $window.mozRequestAnimationFrame; var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame; + $window.webkitCancelAnimationFrame || + $window.mozCancelAnimationFrame || + $window.webkitCancelRequestAnimationFrame; - var raf = function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - }; + var rafSupported = !!requestAnimationFrame; + var raf = rafSupported + ? function(fn) { + var id = requestAnimationFrame(fn); + return function() { + cancelAnimationFrame(id); + }; + } + : function(fn) { + var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 + return function() { + $timeout.cancel(timer); + }; + }; - raf.supported = !!requestAnimationFrame; + raf.supported = rafSupported; return raf; }]; @@ -11642,7 +11930,8 @@ function $RootScopeProvider(){ * - `function(newValue, oldValue, scope)`: called with current and previous values as * parameters. * - * @param {boolean=} objectEquality Compare object for equality rather than for reference. + * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of + * comparing for reference equality. * @returns {function()} Returns a deregistration function for this listener. */ $watch: function(watchExp, listener, objectEquality) { @@ -11731,30 +12020,40 @@ function $RootScopeProvider(){ * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the * collection will trigger a call to the `listener`. * - * @param {function(newCollection, oldCollection, scope)} listener a callback function that is - * fired with both the `newCollection` and `oldCollection` as parameters. - * The `newCollection` object is the newly modified data obtained from the `obj` expression - * and the `oldCollection` object is a copy of the former collection data. - * The `scope` refers to the current scope. + * @param {function(newCollection, oldCollection, scope)} listener a callback function called + * when a change is detected. + * - The `newCollection` object is the newly modified data obtained from the `obj` expression + * - The `oldCollection` object is a copy of the former collection data. + * Due to performance considerations, the`oldCollection` value is computed only if the + * `listener` function declares two or more arguments. + * - The `scope` argument refers to the current scope. * * @returns {function()} Returns a de-registration function for this listener. When the * de-registration function is executed, the internal watch operation is terminated. */ $watchCollection: function(obj, listener) { var self = this; - var oldValue; + // the current value, updated on each dirty-check run var newValue; + // a shallow copy of the newValue from the last dirty-check run, + // updated to match newValue during dirty-check run + var oldValue; + // a shallow copy of the newValue from when the last change happened + var veryOldValue; + // only track veryOldValue if the listener is asking for it + var trackVeryOldValue = (listener.length > 1); var changeDetected = 0; var objGetter = $parse(obj); var internalArray = []; var internalObject = {}; + var initRun = true; var oldLength = 0; function $watchCollectionWatch() { newValue = objGetter(self); var newLength, key; - if (!isObject(newValue)) { + if (!isObject(newValue)) { // if primitive if (oldValue !== newValue) { oldValue = newValue; changeDetected++; @@ -11776,7 +12075,9 @@ function $RootScopeProvider(){ } // copy the items to oldValue and look for changes. for (var i = 0; i < newLength; i++) { - if (oldValue[i] !== newValue[i]) { + var bothNaN = (oldValue[i] !== oldValue[i]) && + (newValue[i] !== newValue[i]); + if (!bothNaN && (oldValue[i] !== newValue[i])) { changeDetected++; oldValue[i] = newValue[i]; } @@ -11820,7 +12121,32 @@ function $RootScopeProvider(){ } function $watchCollectionAction() { - listener(newValue, oldValue, self); + if (initRun) { + initRun = false; + listener(newValue, newValue, self); + } else { + listener(newValue, veryOldValue, self); + } + + // make a copy for the next time a collection is changed + if (trackVeryOldValue) { + if (!isObject(newValue)) { + //primitive + veryOldValue = newValue; + } else if (isArrayLike(newValue)) { + veryOldValue = new Array(newValue.length); + for (var i = 0; i < newValue.length; i++) { + veryOldValue[i] = newValue[i]; + } + } else { // if object + veryOldValue = {}; + for (var key in newValue) { + if (hasOwnProperty.call(newValue, key)) { + veryOldValue[key] = newValue[key]; + } + } + } + } } return this.$watch($watchCollectionWatch, $watchCollectionAction); @@ -12026,15 +12352,32 @@ function $RootScopeProvider(){ forEach(this.$$listenerCount, bind(null, decrementListenerCount, this)); + // sever all the references to parent scopes (after this cleanup, the current scope should + // not be retained by any of our references and should be eligible for garbage collection) if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - // This is bogus code that works around Chrome's GC leak - // see: https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 + + // All of the code below is bogus code that works around V8's memory leak via optimized code + // and inline caches. + // + // see: + // - https://code.google.com/p/v8/issues/detail?id=2073#c26 + // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 + // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 + this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = null; + this.$$childTail = this.$root = null; + + // don't reset these to null in case some async task tries to register a listener/watch/task + this.$$listeners = {}; + this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = []; + + // prevent NPEs since these methods have references to properties we nulled out + this.$destroy = this.$digest = this.$apply = noop; + this.$on = this.$watch = function() { return noop; }; }, /** @@ -13003,7 +13346,7 @@ function $SceDelegateProvider() { * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | + * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)

Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | * * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist}
@@ -14443,32 +14786,6 @@ function timeZoneGetter(date) { return paddedZone; } -function getFirstThursdayOfYear(year) { - // 0 = index of January - var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay(); - // 4 = index of Thursday (+1 to account for 1st = 5) - // 11 = index of *next* Thursday (+1 account for 1st = 12) - return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst); -} - -function getThursdayThisWeek(datetime) { - return new Date(datetime.getFullYear(), datetime.getMonth(), - // 4 = index of Thursday - datetime.getDate() + (4 - datetime.getDay())); -} - -function weekGetter(size) { - return function(date) { - var firstThurs = getFirstThursdayOfYear(date.getFullYear()), - thisThurs = getThursdayThisWeek(date); - - var diff = +thisThurs - +firstThurs, - result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week - - return padNumber(result, size); - }; -} - function ampmGetter(date, formats) { return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; } @@ -14497,12 +14814,10 @@ var DATE_FORMATS = { EEEE: dateStrGetter('Day'), EEE: dateStrGetter('Day', true), a: ampmGetter, - Z: timeZoneGetter, - ww: weekGetter(2), - w: weekGetter(1) + Z: timeZoneGetter }; -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, +var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, NUMBER_STRING = /^\-?\d+$/; /** @@ -14537,8 +14852,6 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999) * * `'a'`: am/pm marker * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * * `'ww'`: ISO-8601 week of year (00-53) - * * `'w'`: ISO-8601 week of year (0-53) * * `format` string can also be one of the following predefined * {@link guide/i18n localizable formats}: @@ -14851,7 +15164,7 @@ function limitToFilter(){ * - `Array`: An array of function or string predicates. The first predicate in the array * is used for sorting, but when two items are equivalent, the next predicate is used. * - * @param {boolean=} reverse Reverse the order the array. + * @param {boolean=} reverse Reverse the order of the array. * @returns {Array} Sorted copy of the source array. * * @example @@ -14903,6 +15216,12 @@ function orderByFilter($parse){ predicate = predicate.substring(1); } get = $parse(predicate); + if (get.constant) { + var key = get(); + return reverseComparator(function(a,b) { + return compare(a[key], b[key]); + }, descending); + } } return reverseComparator(function(a,b){ return compare(get(a),get(b)); @@ -15276,7 +15595,7 @@ var htmlAnchorDirective = valueFn({ * such as selected. (Their presence means true and their absence means false.) * If we put an Angular interpolation expression into such an attribute then the * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` atttribute. + * The `ngSelected` directive solves this problem for the `selected` attribute. * This complementary directive is not removed by the browser and so provides * a permanent reliable place to store the binding information. * @@ -15610,6 +15929,10 @@ function FormController(element, attrs, $scope, $animate) { * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a * sub-group of controls needs to be determined. * + * Note: the purpose of `ngForm` is to group controls, + * but not to be a replacement for the `
` tag with all of its capabilities + * (e.g. posting to the server, ...). + * * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into * related scope, under this name. * @@ -15755,8 +16078,6 @@ function FormController(element, attrs, $scope, $animate) { * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. */ var formDirectiveFactory = function(isNgForm) { return ['$timeout', function($timeout) { @@ -15829,11 +16150,6 @@ var ngFormDirective = formDirectiveFactory(true); var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; -var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)$/; -var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4})-(\d\d)$/; -var TIME_REGEXP = /^(\d\d):(\d\d)$/; var inputType = { @@ -15914,425 +16230,6 @@ var inputType = { */ 'text': textInputType, - /** - * @ngdoc input - * @name input[date] - * - * @description - * Input with date validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601 - * date format (yyyy-MM-dd), for example: `2009-01-06`. The model must always be a Date object. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO date string (yyyy-MM-dd). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO date string (yyyy-MM-dd). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - - - Pick a date between in 2013: - - - Required! - - Not a valid date! - value = {{value | date: "yyyy-MM-dd"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
- -
- - var value = element(by.binding('value | date: "yyyy-MM-dd"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (see https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10-22'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
f - */ - 'date': createDateInputType('date', DATE_REGEXP, - createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']), - 'yyyy-MM-dd'), - - /** - * @ngdoc input - * @name input[dateTimeLocal] - * - * @description - * Input with datetime validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local datetime format (yyyy-MM-ddTHH:mm), for example: `2010-12-28T14:57`. The model must be a Date object. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO datetime format (yyyy-MM-ddTHH:mm). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO datetime format (yyyy-MM-ddTHH:mm). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- Pick a date between in 2013: - - - Required! - - Not a valid date! - value = {{value | date: "yyyy-MM-ddTHH:mm"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('value | date: "yyyy-MM-ddTHH:mm"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2010-12-28T14:57'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01T23:59'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP, - createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm']), - 'yyyy-MM-ddTHH:mm'), - - /** - * @ngdoc input - * @name input[time] - * - * @description - * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local time format (HH:mm), for example: `14:57`. Model must be a Date object. This binding will always output a - * Date object to the model of January 1, 1900, or local date `new Date(0, 0, 1, HH, mm)`. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO time format (HH:mm). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a - * valid ISO time format (HH:mm). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- Pick a between 8am and 5pm: - - - Required! - - Not a valid date! - value = {{value | date: "HH:mm"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('value | date: "HH:mm"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('14:57'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('23:59'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'time': createDateInputType('time', TIME_REGEXP, - createDateParser(TIME_REGEXP, ['HH', 'mm']), - 'HH:mm'), - - /** - * @ngdoc input - * @name input[week] - * - * @description - * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support - * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * week format (yyyy-W##), for example: `2013-W02`. The model must always be a Date object. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO week format (yyyy-W##). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO week format (yyyy-W##). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- Pick a date between in 2013: - - - Required! - - Not a valid date! - value = {{value | date: "yyyy-Www"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('value | date: "yyyy-Www"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-W01'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-W01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'), - - /** - * @ngdoc input - * @name input[month] - * - * @description - * Input with month validation and transformation. In browsers that do not yet support - * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * month format (yyyy-MM), for example: `2009-01`. The model must always be a Date object. In the event the model is - * not set to the first of the month, the first of that model's month is assumed. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be - * a valid ISO month format (yyyy-MM). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must - * be a valid ISO month format (yyyy-MM). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- Pick a month int 2013: - - - Required! - - Not a valid month! - value = {{value | date: "yyyy-MM"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('value | date: "yyyy-MM"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'month': createDateInputType('month', MONTH_REGEXP, - createDateParser(MONTH_REGEXP, ['yyyy', 'MM']), - 'yyyy-MM'), /** * @ngdoc input @@ -16692,7 +16589,6 @@ function addNativeHtml5Validators(ctrl, validatorName, element) { return value; }; ctrl.$parsers.push(validator); - ctrl.$formatters.push(validator); } } @@ -16835,108 +16731,6 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { } } -function weekParser(isoWeek) { - if(isDate(isoWeek)) { - return isoWeek; - } - - if(isString(isoWeek)) { - WEEK_REGEXP.lastIndex = 0; - var parts = WEEK_REGEXP.exec(isoWeek); - if(parts) { - var year = +parts[1], - week = +parts[2], - firstThurs = getFirstThursdayOfYear(year), - addDays = (week - 1) * 7; - return new Date(year, 0, firstThurs.getDate() + addDays); - } - } - - return NaN; -} - -function createDateParser(regexp, mapping) { - return function(iso) { - var parts, map; - - if(isDate(iso)) { - return iso; - } - - if(isString(iso)) { - regexp.lastIndex = 0; - parts = regexp.exec(iso); - - if(parts) { - parts.shift(); - map = { yyyy: 0, MM: 1, dd: 1, HH: 0, mm: 0 }; - - forEach(parts, function(part, index) { - if(index < mapping.length) { - map[mapping[index]] = +part; - } - }); - - return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm); - } - } - - return NaN; - }; -} - -function createDateInputType(type, regexp, parseDate, format) { - return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) { - textInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$parsers.push(function(value) { - if(ctrl.$isEmpty(value)) { - ctrl.$setValidity(type, true); - return null; - } - - if(regexp.test(value)) { - ctrl.$setValidity(type, true); - return parseDate(value); - } - - ctrl.$setValidity(type, false); - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if(isDate(value)) { - return $filter('date')(value, format); - } - return ''; - }); - - if(attr.min) { - var minValidator = function(value) { - var valid = ctrl.$isEmpty(value) || - (parseDate(value) >= parseDate(attr.min)); - ctrl.$setValidity('min', valid); - return valid ? value : undefined; - }; - - ctrl.$parsers.push(minValidator); - ctrl.$formatters.push(minValidator); - } - - if(attr.max) { - var maxValidator = function(value) { - var valid = ctrl.$isEmpty(value) || - (parseDate(value) <= parseDate(attr.max)); - ctrl.$setValidity('max', valid); - return valid ? value : undefined; - }; - - ctrl.$parsers.push(maxValidator); - ctrl.$formatters.push(maxValidator); - } - }; -} - function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); @@ -17196,14 +16990,14 @@ function checkboxInputType(scope, element, attr, ctrl) { */ -var inputDirective = ['$browser', '$sniffer', '$filter', function($browser, $sniffer, $filter) { +var inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) { return { restrict: 'E', require: '?ngModel', link: function(scope, element, attr, ctrl) { if (ctrl) { (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer, - $browser, $filter); + $browser); } } }; @@ -17591,11 +17385,6 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * - {@link input[number] number} * - {@link input[email] email} * - {@link input[url] url} - * - {@link input[date] date} - * - {@link input[dateTimeLocal] dateTimeLocal} - * - {@link input[time] time} - * - {@link input[month] month} - * - {@link input[week] week} * - {@link ng.directive:select select} * - {@link ng.directive:textarea textarea} * @@ -18126,7 +17915,7 @@ var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { function classDirective(name, selector) { name = 'ngClass' + name; - return function() { + return ['$animate', function($animate) { return { restrict: 'AC', link: function(scope, element, attr) { @@ -18144,46 +17933,100 @@ function classDirective(name, selector) { // jshint bitwise: false var mod = $index & 1; if (mod !== old$index & 1) { - var classes = flattenClasses(scope.$eval(attr[name])); + var classes = arrayClasses(scope.$eval(attr[name])); mod === selector ? - attr.$addClass(classes) : - attr.$removeClass(classes); + addClasses(classes) : + removeClasses(classes); } }); } + function addClasses(classes) { + var newClasses = digestClassCounts(classes, 1); + attr.$addClass(newClasses); + } + + function removeClasses(classes) { + var newClasses = digestClassCounts(classes, -1); + attr.$removeClass(newClasses); + } + + function digestClassCounts (classes, count) { + var classCounts = element.data('$classCounts') || {}; + var classesToUpdate = []; + forEach(classes, function (className) { + if (count > 0 || classCounts[className]) { + classCounts[className] = (classCounts[className] || 0) + count; + if (classCounts[className] === +(count > 0)) { + classesToUpdate.push(className); + } + } + }); + element.data('$classCounts', classCounts); + return classesToUpdate.join(' '); + } + + function updateClasses (oldClasses, newClasses) { + var toAdd = arrayDifference(newClasses, oldClasses); + var toRemove = arrayDifference(oldClasses, newClasses); + toRemove = digestClassCounts(toRemove, -1); + toAdd = digestClassCounts(toAdd, 1); + + if (toAdd.length === 0) { + $animate.removeClass(element, toRemove); + } else if (toRemove.length === 0) { + $animate.addClass(element, toAdd); + } else { + $animate.setClass(element, toAdd, toRemove); + } + } function ngClassWatchAction(newVal) { if (selector === true || scope.$index % 2 === selector) { - var newClasses = flattenClasses(newVal || ''); - if(!oldVal) { - attr.$addClass(newClasses); - } else if(!equals(newVal,oldVal)) { - attr.$updateClass(newClasses, flattenClasses(oldVal)); + var newClasses = arrayClasses(newVal || []); + if (!oldVal) { + addClasses(newClasses); + } else if (!equals(newVal,oldVal)) { + var oldClasses = arrayClasses(oldVal); + updateClasses(oldClasses, newClasses); } } oldVal = copy(newVal); } - - - function flattenClasses(classVal) { - if(isArray(classVal)) { - return classVal.join(' '); - } else if (isObject(classVal)) { - var classes = [], i = 0; - forEach(classVal, function(v, k) { - if (v) { - classes.push(k); - } - }); - return classes.join(' '); - } - - return classVal; - } } }; - }; + + function arrayDifference(tokens1, tokens2) { + var values = []; + + outer: + for(var i = 0; i < tokens1.length; i++) { + var token = tokens1[i]; + for(var j = 0; j < tokens2.length; j++) { + if(token == tokens2[j]) continue outer; + } + values.push(token); + } + return values; + } + + function arrayClasses (classVal) { + if (isArray(classVal)) { + return classVal; + } else if (isString(classVal)) { + return classVal.split(' '); + } else if (isObject(classVal)) { + var classes = [], i = 0; + forEach(classVal, function(v, k) { + if (v) { + classes.push(k); + } + }); + return classes; + } + return classVal; + } + }]; } /** @@ -18744,7 +18587,7 @@ var ngControllerDirective = [function() { * @element ANY * @priority 0 * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. (Event object is available as `$event`) + * click. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18825,7 +18668,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. (Event object is available as `$event`) + * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18849,7 +18692,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. (Event object is available as `$event`) + * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18872,7 +18715,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. (Event object is available as `$event`) + * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18896,7 +18739,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. (Event object is available as `$event`) + * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18920,7 +18763,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. (Event object is available as `$event`) + * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -18944,7 +18787,7 @@ forEach( * @element ANY * @priority 0 * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. (Event object is available as `$event`) + * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -19011,7 +18854,8 @@ forEach( * * @element ANY * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) + * keypress. ({@link guide/expression#-event- Event object is available as `$event`} + * and can be interrogated for keyCode, altKey, etc.) * * @example @@ -19036,7 +18880,8 @@ forEach( * * @element form * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`) + * @param {expression} ngSubmit {@link guide/expression Expression} to eval. + * ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -19087,7 +18932,7 @@ forEach( * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. (Event object is available as `$event`) + * focus. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example * See {@link ng.directive:ngClick ngClick} @@ -19103,7 +18948,7 @@ forEach( * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. (Event object is available as `$event`) + * blur. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example * See {@link ng.directive:ngClick ngClick} @@ -19119,7 +18964,7 @@ forEach( * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. (Event object is available as `$event`) + * copy. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -19140,7 +18985,7 @@ forEach( * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. (Event object is available as `$event`) + * cut. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -19161,7 +19006,7 @@ forEach( * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. (Event object is available as `$event`) + * paste. ({@link guide/expression#-event- Event object is available as `$event`}) * * @example @@ -19327,7 +19172,7 @@ var ngIfDirective = ['$animate', function($animate) { * @priority 400 * * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in quotes, e.g. `src="'myPartialTemplate.html'"`. + * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. * @param {string=} onload Expression to evaluate when a new partial is loaded. * * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll @@ -19936,9 +19781,11 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). * * @animations - * enter - when a new item is added to the list or when an item is revealed after a filter - * leave - when an item is removed from the list or when an item is filtered out - * move - when an adjacent item is filtered out causing a reorder or when the item contents are reordered + * **.enter** - when a new item is added to the list or when an item is revealed after a filter + * + * **.leave** - when an item is removed from the list or when an item is filtered out + * + * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered * * @element ANY * @scope @@ -20432,7 +20279,7 @@ var ngShowDirective = ['$animate', function($animate) { * in AngularJS and sets the display style to none (using an !important flag). * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). * - * ```hrml + * ```html * *
* @@ -21349,6 +21196,12 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { value = valueFn(scope, locals); } } + // Update the null option's selected property here so $render cleans it up correctly + if (optionGroupsCache[0].length > 1) { + if (optionGroupsCache[0][1].id !== key) { + optionGroupsCache[0][1].selected = false; + } + } } ctrl.$setViewValue(value); }); @@ -21486,7 +21339,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { lastElement.val(existingOption.id = option.id); } // lastElement.prop('selected') provided by jQuery has side-effects - if (lastElement[0].selected !== option.selected) { + if (existingOption.selected !== option.selected) { lastElement.prop('selected', (existingOption.selected = option.selected)); } } else { @@ -21587,9 +21440,15 @@ var optionDirective = ['$interpolate', function($interpolate) { var styleDirective = valueFn({ restrict: 'E', - terminal: false + terminal: true }); + if (window.angular.bootstrap) { + //AngularJS is already loaded, so we can return here... + console.log('WARNING: Tried to load angular more than once.'); + return; + } + //try to bind to jquery now so that one can write angular.element().read() //but we will rebind on bootstrap again. bindJQuery(); diff --git a/awx/ui/static/lib/angular/angular.min.js b/awx/ui/static/lib/angular/angular.min.js index d383a47b98..f7ca497c5f 100644 --- a/awx/ui/static/lib/angular/angular.min.js +++ b/awx/ui/static/lib/angular/angular.min.js @@ -1,209 +1,210 @@ /* - AngularJS v1.2.15-build.2398+sha.4bab3d8 + AngularJS v1.2.17-build.95+sha.3691454 (c) 2010-2014 Google, Inc. http://angularjs.org License: MIT */ -(function(D,U,s){'use strict';function F(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.15-build.2398+sha.4bab3d8/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?P(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, -function(a,b){return"<"+P(b)})}catch(d){return P(c)}}function Zb(b){try{return decodeURIComponent(b)}catch(a){}}function $b(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.split("="),d=Zb(c[0]),v(d)&&(b=v(c[1])?Zb(c[1]):!0,a[d]?I(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function ac(b){var a=[];r(b,function(b,d){I(b)?r(b,function(b){a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))}):a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))});return a.length?a.join("&"):""}function zb(b){return va(b, -!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function va(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function cd(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,h=["ng:app","ng-app","x-ng-app","data-ng-app"],g=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(h,function(a){h[a]=!0;c(U.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+ -a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=g.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&h[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function bc(b,a){var c=function(){b=z(b);if(b.injector()){var c=b[0]===U?"document":fa(b);throw Na("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=cc(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", -function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(D&&!d.test(D.name))return c();D.name=D.name.replace(d,"");Ca.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function eb(b,a){a=a||"_";return b.replace(dd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Ab(b,a,c){if(!b)throw Na("areq",a||"?",c||"required");return b}function Pa(b,a,c){c&&I(b)&&(b=b[b.length-1]);Ab(O(b),a,"not a function, got "+(b&&"object"==typeof b? -b.constructor.name||"Object":typeof b));return b}function wa(b,a){if("hasOwnProperty"===b)throw Na("badname",a);}function dc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,h=0;h "+b;a.removeChild(a.firstChild);Eb(this,a.childNodes);z(U.createDocumentFragment()).append(this)}else Eb(this, -b)}function Fb(b){return b.cloneNode(!0)}function Ea(b){ec(b);var a=0;for(b=b.childNodes||[];a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Fa(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c=== -s&&(c=b.$$hashKey=ab()):c=b;return a+":"+c}function Sa(b){r(b,this.put,this)}function lc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(jd,""),c=c.match(kd),r(c[1].split(ld),function(b){b.replace(md,function(b,c,d){a.push(d)})})),b.$inject=a):I(b)?(c=b.length-1,Pa(b[c],"fn"),a=b.slice(0,c)):Pa(b,"fn",!0);return a}function cc(b){function a(a){return function(b,c){if(X(b))r(b,Tb(a));else return a(b,c)}}function c(a,b){wa(a,"service");if(O(b)||I(b))b=n.instantiate(b); -if(!b.$get)throw Ta("pget",a);return l[a+g]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,g;r(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(y(a))for(c=Ua(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,g=d.length;f 4096 bytes)!"));else{if(m.cookie!==aa)for(aa=m.cookie,d=aa.split("; "),M={},f=0;fk&&this.remove(q.key),b},get:function(a){if(k]*)?>/i,g=/^(on[a-z]+|formaction)$/;this.directive=function k(a,e){wa(a,"directive"); -y(a)?(Ab(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];r(c[a],function(c,f){try{var g=b.invoke(c);O(g)?g={compile:$(g)}:!g.compile&&g.link&&(g.compile=$(g.link));g.priority=g.priority||0;g.index=f;g.name=g.name||a;g.require=g.require||g.controller&&g.name;g.restrict=g.restrict||"A";e.push(g)}catch(h){d(h)}});return e}])),c[a].push(e)):r(a,Tb(k));return this};this.aHrefSanitizationWhitelist=function(b){return v(b)?(a.aHrefSanitizationWhitelist(b), -this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return v(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,n,q,p,A,E,B,u,H,J,w){function Y(a,b,c,d,e){a instanceof z||(a=z(a));r(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=z(b).wrap("").parent()[0])}); -var f=M(a,b,a,c,d,e);T(a,"ng-scope");return function(b,c,d){Ab(b,"scope");var e=c?Ga.clone.call(a):a;r(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var g=e.length;darguments.length&&(b=a,a=s);Ia&&(c=v);return p(a,b,c)}var L,w,u,Y,N,V,v={},mb;L=c===f?d:Wb(d,new Ib(z(f),d.$attr));w=L.$$element;if(M){var t=/^\s*([@=&])(\??)\s*(\w*)\s*$/;g=z(f);V=e.$new(!0);aa&&aa===M.$$originalDirective?g.data("$isolateScope",V):g.data("$isolateScopeNoTemplate",V);T(g,"ng-isolate-scope");r(M.scope,function(a,c){var d= -a.match(t)||[],f=d[3]||c,g="?"==d[2],d=d[1],h,k,p,n;V.$$isolateBindings[c]=d+f;switch(d){case "@":L.$observe(f,function(a){V[c]=a});L.$$observers[f].$$scope=e;L[f]&&(V[c]=b(L[f])(e));break;case "=":if(g&&!L[f])break;k=A(L[f]);n=k.literal?ta:function(a,b){return a===b};p=k.assign||function(){h=V[c]=k(e);throw ha("nonassign",L[f],M.name);};h=V[c]=k(e);V.$watch(function(){var a=k(e);n(a,V[c])||(n(a,h)?p(e,a=V[c]):V[c]=a);return h=a},null,k.literal);break;case "&":k=A(L[f]);V[c]=function(a){return k(e, -a)};break;default:throw ha("iscp",M.name,c,a);}})}mb=p&&q;J&&r(J,function(a){var b={$scope:a===M||a.$$isolateScope?V:e,$element:w,$attrs:L,$transclude:mb},c;N=a.controller;"@"==N&&(N=L[a.name]);c=E(N,b);v[a.name]=c;Ia||w.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(u=h.length;gG.priority)break;if(t=G.scope)u=u||G,G.templateUrl||(S("new/isolated scope",M,G,K),X(t)&&(M=G));ga= -G.name;!G.templateUrl&&G.controller&&(t=G.controller,J=J||{},S("'"+ga+"' controller",J[ga],G,K),J[ga]=G);if(t=G.transclude)Va=!0,G.$$tlb||(S("transclusion",v,G,K),v=G),"element"==t?(Ia=!0,w=G.priority,t=N(c,R,W),K=d.$$element=z(U.createComment(" "+ga+": "+d[ga]+" ")),c=K[0],nb(f,z(ua.call(t,0)),c),F=Y(t,e,w,g&&g.name,{nonTlbTranscludeDirective:v})):(t=z(Fb(c)).contents(),K.empty(),F=Y(t,e));if(G.template)if(S("template",aa,G,K),aa=G,t=O(G.template)?G.template(K,d):G.template,t=oc(t),G.replace){g= -G;t=C(t);c=t[0];if(1!=t.length||1!==c.nodeType)throw ha("tplrt",ga,"");nb(f,K,c);Q={$attr:{}};t=V(c,[],Q);var Z=a.splice(D+1,a.length-(D+1));M&&lb(t);a=a.concat(t).concat(Z);x(d,Q);Q=a.length}else K.html(t);if(G.templateUrl)S("template",aa,G,K),aa=G,G.replace&&(g=G),B=P(a.splice(D,a.length-D),K,d,f,F,h,k,{controllerDirectives:J,newIsolateScopeDirective:M,templateDirective:aa,nonTlbTranscludeDirective:v}),Q=a.length;else if(G.compile)try{pa=G.compile(K,d,F),O(pa)?q(null,pa,R,W):pa&&q(pa.pre,pa.post, -R,W)}catch($){n($,fa(K))}G.terminal&&(B.terminal=!0,w=Math.max(w,G.priority))}B.scope=u&&!0===u.scope;B.transclude=Va&&F;p.hasElementTranscludeDirective=Ia;return B}function lb(a){for(var b=0,c=a.length;bq.priority)&&-1!=q.restrict.indexOf(f)&&(l&&(q=Vb(q,{$$start:l,$$end:p})),b.push(q),h=q)}catch(H){n(H)}}return h} -function x(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(T(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 C(a){var b;a=ca(a);if(b=h.exec(a)){b=b[1].toLowerCase();a=z(""+a+"
");if(/(thead|tbody|tfoot)/.test(b))return a.children(b); -a=a.children("tbody");return"tr"===b?a.children("tr"):a.children("tr").contents()}return z("
"+a+"
").contents()}function P(a,b,c,d,e,f,g,h){var k=[],l,n,A=b[0],E=a.shift(),w=t({},E,{templateUrl:null,transclude:null,replace:null,$$originalDirective:E}),B=O(E.templateUrl)?E.templateUrl(b,c):E.templateUrl;b.empty();q.get(H.getTrustedResourceUrl(B),{cache:p}).success(function(p){var q,H;p=oc(p);if(E.replace){p=C(p);q=p[0];if(1!=p.length||1!==q.nodeType)throw ha("tplrt",E.name,B);p={$attr:{}}; -nb(d,b,q);var u=V(q,[],p);X(E.scope)&&lb(u);a=u.concat(a);x(c,p)}else q=A,b.html(p);a.unshift(w);l=Va(a,q,c,e,b,E,f,g,h);r(d,function(a,c){a==q&&(d[c]=b[0])});for(n=M(b[0].childNodes,e);k.length;){p=k.shift();H=k.shift();var J=k.shift(),Y=k.shift(),u=b[0];if(H!==A){var N=H.className;h.hasElementTranscludeDirective&&E.replace||(u=Fb(q));nb(J,z(H),u);T(z(u),N)}H=l.transclude?aa(p,l.transclude):Y;l(n,p,u,d,H)}k=null}).error(function(a,b,c,d){throw ha("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b), -k.push(c),k.push(d),k.push(e)):l(n,b,c,d,e)}}function F(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:n.reject(b)}var d={method:"get",transformRequest:e.transformRequest, -transformResponse:e.transformResponse},f=function(a){function b(a){var c;r(a,function(b,d){O(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=t({},a.headers),f,g,c=t({},c.common,c[P(a.method)]);b(c);b(d);a:for(f in c){a=P(f);for(g in d)if(P(g)===a)continue a;d[f]=c[f]}return d}(a);t(d,a);d.headers=f;d.method=Ja(d.method);(a=Jb(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(f[d.xsrfHeaderName||e.xsrfHeaderName]=a);var g=[function(a){f=a.headers;var b=sc(a.data,rc(f),a.transformRequest); -C(a.data)&&r(f,function(a,b){"content-type"===P(b)&&delete f[b]});C(a.withCredentials)&&!C(e.withCredentials)&&(a.withCredentials=e.withCredentials);return A(a,b,f).then(c,c)},s],h=n.when(d);for(r(u,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();var k=g.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null, -function(b){a(b.data,b.status,b.headers,d)});return h};return h}function A(b,c,f){function h(a,b,c){u&&(200<=a&&300>a?u.put(s,[a,b,qc(c)]):u.remove(s));k(b,a,c);d.$$phase||d.$apply()}function k(a,c,d){c=Math.max(c,0);(200<=c&&300>c?q.resolve:q.reject)({data:a,status:c,headers:rc(d),config:b})}function m(){var a=cb(p.pendingRequests,b);-1!==a&&p.pendingRequests.splice(a,1)}var q=n.defer(),A=q.promise,u,r,s=E(b.url,b.params);p.pendingRequests.push(b);A.then(m,m);(b.cache||e.cache)&&(!1!==b.cache&&"GET"== -b.method)&&(u=X(b.cache)?b.cache:X(e.cache)?e.cache:B);if(u)if(r=u.get(s),v(r)){if(r.then)return r.then(m,m),r;I(r)?k(r[1],r[0],ba(r[2])):k(r,200,{})}else u.put(s,A);C(r)&&a(b.method,s,c,h,f,b.timeout,b.withCredentials,b.responseType);return A}function E(a,b){if(!b)return a;var c=[];Zc(b,function(a,b){null===a||C(a)||(I(a)||(a=[a]),r(a,function(a){X(a)&&(a=oa(a));c.push(va(b)+"="+va(a))}))});0=Q&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| -!D.XMLHttpRequest))return new D.ActiveXObject("Microsoft.XMLHTTP");if(D.XMLHttpRequest)return new D.XMLHttpRequest;throw F("$httpBackend")("noxhr");}function zd(){this.$get=["$browser","$window","$document",function(b,a,c){return Ad(b,yd,b.defer,a.angular.callbacks,c[0])}]}function Ad(b,a,c,d,e){function f(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange=c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;Q&&8>=Q?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&& -d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var h=-1;return function(e,m,k,l,n,q,p,A){function E(){u=h;J&&J();w&&w.abort()}function B(a,d,e,f){T&&c.cancel(T);J=w=null;d=0===d?e?200:404:d;a(1223==d?204:d,e,f);b.$$completeOutstandingRequest(x)}var u;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==P(e)){var H="_"+(d.counter++).toString(36);d[H]=function(a){d[H].data=a};var J=f(m.replace("JSON_CALLBACK","angular.callbacks."+H),function(){d[H].data?B(l,200,d[H].data): -B(l,u||-2);d[H]=Ca.noop})}else{var w=a(e);w.open(e,m,!0);r(n,function(a,b){v(a)&&w.setRequestHeader(b,a)});w.onreadystatechange=function(){if(w&&4==w.readyState){var a=null,b=null;u!==h&&(a=w.getAllResponseHeaders(),b="response"in w?w.response:w.responseText);B(l,u||w.status,b,a)}};p&&(w.withCredentials=!0);if(A)try{w.responseType=A}catch(s){if("json"!==A)throw s;}w.send(k||null)}if(0=g&&(n.resolve(p),l(q.$$intervalId),delete e[q.$$intervalId]);A||b.$apply()},h);e[q.$$intervalId]=n;return q}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function Dd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"", -gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a", -"short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function uc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=zb(b[a]);return b.join("/")}function vc(b,a,c){b=xa(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=R(b.port)||Ed[b.protocol]||null}function wc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=xa(b,c);a.$$path=decodeURIComponent(d&& -"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=$b(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function la(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Wa(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Kb(b){return b.substr(0,Wa(b).lastIndexOf("/")+1)}function xc(b,a){this.$$html5=!0;a=a||"";var c=Kb(b);vc(b,this,b);this.$$parse=function(a){var e=la(c,a);if(!y(e))throw Lb("ipthprfx", -a,c);wc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=ac(this.$$search),b=this.$$hash?"#"+zb(this.$$hash):"";this.$$url=uc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=la(b,d))!==s)return d=e,(e=la(a,e))!==s?c+(la("/",e)||e):b+d;if((e=la(c,d))!==s)return c+e;if(c==d+"/")return c}}function Mb(b,a){var c=Kb(b);vc(b,this,b);this.$$parse=function(d){var e=la(b,d)||la(c,d),e="#"==e.charAt(0)?la(a,e): -this.$$html5?e:"";if(!y(e))throw Lb("ihshprfx",d,a);wc(e,this,b);d=this.$$path;var f=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=ac(this.$$search),e=this.$$hash?"#"+zb(this.$$hash):"";this.$$url=uc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Wa(b)==Wa(a))return a}}function yc(b,a){this.$$html5=!0;Mb.apply(this,arguments);var c=Kb(b); -this.$$rewrite=function(d){var e;if(b==Wa(d))return d;if(e=la(c,d))return b+a+e;if(c===d+"/")return c}}function ob(b){return function(){return this[b]}}function zc(b,a){return function(c){if(C(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Fd(){var b="",a=!1;this.hashPrefix=function(a){return v(a)?(b=a,this):b};this.html5Mode=function(b){return v(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function h(a){c.$broadcast("$locationChangeSuccess", -g.absUrl(),a)}var g,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?xc:yc):(m=Wa(k),e=Mb);g=new e(m,"#"+b);g.$$parse(g.$$rewrite(k));f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=z(a.target);"a"!==P(b[0].nodeName);)if(b[0]===f[0]||!(b=b.parent())[0])return;var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=xa(e.animVal).href);var h=g.$$rewrite(e);e&&(!b.attr("target")&&h&&!a.isDefaultPrevented())&& -(a.preventDefault(),h!=d.url()&&(g.$$parse(h),c.$apply(),D.angular["ff-684208-preventDefault"]=!0))}});g.absUrl()!=k&&d.url(g.absUrl(),!0);d.onUrlChange(function(a){g.absUrl()!=a&&(c.$evalAsync(function(){var b=g.absUrl();g.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(g.$$parse(b),d.url(b)):h(b)}),c.$$phase||c.$digest())});var l=0;c.$watch(function(){var a=d.url(),b=g.$$replace;l&&a==g.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",g.absUrl(),a).defaultPrevented? -g.$$parse(a):(d.url(g.absUrl(),b),h(a))}));g.$$replace=!1;return l});return g}]}function Gd(){var b=!0,a=this;this.debugEnabled=function(a){return v(a)?(b=a,this):b};this.$get=["$window",function(c){function d(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&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||x;a=!1;try{a=!!e.apply}catch(m){}return a?function(){var a= -[];r(arguments,function(b){a.push(d(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(){b&&c.apply(a,arguments)}}()}}]}function da(b,a){if("constructor"===b)throw ya("isecfld",a);return b}function Xa(b,a){if(b){if(b.constructor===b)throw ya("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw ya("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw ya("isecdom", -a);}return b}function pb(b,a,c,d,e){e=e||{};a=a.split(".");for(var f,h=0;1e?Ac(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,h;do h=Ac(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=s,b=h;while(ga)for(b in g++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(m--,delete d[b])}else d!==e&&(d=e,g++);return g},function(){b(e,d,c)})},$digest:function(){var d,f,g,h,k=this.$$asyncQueue,l=this.$$postDigestQueue,r,w,s=b,T,M=[],v,t,N;m("$digest");c=null;do{w=!1;for(T=this;k.length;){try{N=k.shift(),N.scope.$eval(N.expression)}catch(z){q.$$phase=null,e(z)}c=null}a:do{if(h= -T.$$watchers)for(r=h.length;r--;)try{if(d=h[r])if((f=d.get(T))!==(g=d.last)&&!(d.eq?ta(f,g):"number"==typeof f&&"number"==typeof g&&isNaN(f)&&isNaN(g)))w=!0,c=d,d.last=d.eq?ba(f):f,d.fn(f,g===n?f:g,T),5>s&&(v=4-s,M[v]||(M[v]=[]),t=O(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,t+="; newVal: "+oa(f)+"; oldVal: "+oa(g),M[v].push(t));else if(d===c){w=!1;break a}}catch(y){q.$$phase=null,e(y)}if(!(h=T.$$childHead||T!==this&&T.$$nextSibling))for(;T!==this&&!(h=T.$$nextSibling);)T=T.$parent}while(T= -h);if((w||k.length)&&!s--)throw q.$$phase=null,a("infdig",b,oa(M));}while(w||k.length);for(q.$$phase=null;l.length;)try{l.shift()()}catch(x){e(x)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==q&&(r(this.$$listenerCount,db(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&& -(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null)}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){q.$$phase||q.$$asyncQueue.length||h.defer(function(){q.$$asyncQueue.length&&q.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{q.$$phase=null; -try{q.$digest()}catch(c){throw e(c),c;}}},$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(){c[cb(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(ua.call(arguments,1)),l,m;do{d=f.$$listeners[a]|| -c;h.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw ra("iequirks");var e=ba(ea);e.isEnabled=function(){return b};e.trustAs= -d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Aa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,h=e.getTrusted,g=e.trustAs;r(ea,function(a,b){var c=P(b);e[Qa("parse_as_"+c)]=function(b){return f(a,b)};e[Qa("get_trusted_"+c)]=function(b){return h(a,b)};e[Qa("trust_as_"+c)]=function(b){return g(a,b)}});return e}]}function Sd(){this.$get=["$window", -"$document",function(b,a){var c={},d=R((/android (\d+)/.exec(P((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},h=f.documentMode,g,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,n=!1;if(k){for(var q in k)if(l=m.exec(q)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||g+"Transition"in k);n=!!("animation"in k||g+"Animation"in k);!d||l&&n||(l=y(f.body.style.webkitTransition), -n=y(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!h||7b;b=Math.abs(b);var h=b+"",g="",m=[],k=!1;if(-1!==h.indexOf("e")){var l=h.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?h="0":(g=h,k=!0)}if(k)0b)&&(g=b.toFixed(e));else{h=(h.split(Lc)[1]||"").length;C(e)&&(e=Math.min(Math.max(a.minFrac,h),a.maxFrac));h=Math.pow(10,e);b=Math.round(b*h)/h;b=(""+b).split(Lc);h=b[0];b=b[1]||"";var l=0,n=a.lgSize,q=a.gSize;if(h.length>=n+q)for(l=h.length-n,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return qb(e,a,d)}}function rb(b,a){return function(c,d){var e=c["get"+b](),f=Ja(a?"SHORT"+b:b);return d[f][e]}} -function Mc(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Nc(b){return function(a){var c=Mc(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return qb(a,b)}}function Hc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,h=0,g=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=R(b[9]+b[10]),h=R(b[9]+b[11]));g.call(a,R(b[1]),R(b[2])-1,R(b[3]));f=R(b[4]||0)-f;h=R(b[5]|| -0)-h;g=R(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,h,g,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",h=[],g,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;y(c)&&(c=ae.test(c)?R(c):a(c));yb(c)&&(c=new Date(c));if(!na(c))return c;for(;e;)(m=be.exec(e))?(h=h.concat(ua.call(m,1)),e=h.pop()):(h.push(e),e=null);r(h,function(a){g=ce[a];f+=g?g(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g, -"").replace(/''/g,"'")});return f}}function Wd(){return function(b){return oa(b,!0)}}function Xd(){return function(b,a){if(!I(b)&&!y(b))return b;a=R(a);if(y(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||l()});if(e.hasEvent("paste"))a.on("paste cut",l)}a.on("change",m);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var n=c.ngPattern;n&&((e=n.match(/^\/(.*)\/([gim]*)$/))?(n=RegExp(e[1],e[2]),e=function(a){return ma(d, -"pattern",d.$isEmpty(a)||n.test(a),a)}):e=function(c){var e=b.$eval(n);if(!e||!e.test)throw F("ngPattern")("noregexp",n,e,fa(a));return ma(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var q=R(c.ngMinlength);e=function(a){return ma(d,"minlength",d.$isEmpty(a)||a.length>=q,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var p=R(c.ngMaxlength);e=function(a){return ma(d,"maxlength",d.$isEmpty(a)||a.length<=p,a)};d.$parsers.push(e); -d.$formatters.push(e)}}function wb(b,a){return function(c){var d;return na(c)?c:y(c)&&(b.lastIndex=0,c=b.exec(c))?(c.shift(),d={yyyy:0,MM:1,dd:1,HH:0,mm:0},r(c,function(b,c){c=c(h.min);g.$setValidity("min",b);return b?a:s},g.$parsers.push(e),g.$formatters.push(e));h.max&&(e=function(a){var b=g.$isEmpty(a)||c(a)<=c(h.max);g.$setValidity("max",b);return b?a:s},g.$parsers.push(e),g.$formatters.push(e))}}function Pb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function f(b){if(!0===a||c.$index%2===a){var d=h(b||"");g?ta(b,g)||e.$updateClass(d,h(g)):e.$addClass(d)}g=ba(b)} -function h(a){if(I(a))return a.join(" ");if(X(a)){var b=[];r(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var g;c.$watch(e[b],f,!0);e.$observe("class",function(a){f(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index",function(d,f){var g=d&1;if(g!==f&1){var n=h(c.$eval(e[b]));g===a?e.$addClass(n):e.$removeClass(n)}})}}}}var P=function(b){return y(b)?b.toLowerCase():b},$d=Object.prototype.hasOwnProperty,Ja=function(b){return y(b)?b.toUpperCase():b},Q,z,Da,ua=[].slice,ee=[].push,Ba=Object.prototype.toString, -Na=F("ng"),Ca=D.angular||(D.angular={}),Ua,Ha,ia=["0","0","0"];Q=R((/msie (\d+)/.exec(P(navigator.userAgent))||[])[1]);isNaN(Q)&&(Q=R((/trident\/.*; rv:(\d+)/.exec(P(navigator.userAgent))||[])[1]));x.$inject=[];Aa.$inject=[];var ca=function(){return String.prototype.trim?function(b){return y(b)?b.trim():b}:function(b){return y(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ha=9>Q?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ja(b.scopeName+":"+b.nodeName):b.nodeName}: -function(b){return b.nodeName?b.nodeName:b[0].nodeName};var dd=/[A-Z]/g,fe={full:"1.2.15-build.2398+sha.4bab3d8",major:1,minor:2,dot:15,codeName:"snapshot"},Ra=S.cache={},fb=S.expando="ng-"+(new Date).getTime(),hd=1,Pc=D.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Gb=D.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]|| -{}};var fd=/([\:\-\_]+(.))/g,gd=/^moz([A-Z])/,Db=F("jqLite"),Ga=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(D).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?z(this[b]):z(this[this.length+b])},length:0,push:ee,sort:[].sort,splice:[].splice},jb={};r("multiple selected checked disabled readOnly required open".split(" "), -function(b){jb[P(b)]=b});var kc={};r("input select option textarea button form details".split(" "),function(b){kc[Ja(b)]=!0});r({data:gc,inheritedData:ib,scope:function(b){return z(b).data("$scope")||ib(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return z(b).data("$isolateScope")||z(b).data("$isolateScopeNoTemplate")},controller:hc,injector:function(b){return ib(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Hb,css:function(b,a,c){a=Qa(a);if(v(c))b.style[a]= -c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=P(a);if(jb[d])if(v(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||x).specified?d:s;else if(v(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(v(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType]; -if(C(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(C(a)){if("SELECT"===Ha(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(C(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a, -c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},je={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Ob=function(a){this.options=a};Ob.prototype={constructor:Ob,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=v(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw ya("lexerr", -a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a, -c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Ya.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Bc(d,this.options,this.text);return t(function(c,d,g){return e(g||a(c,d))},{assign:function(e,h,g){return pb(a(e,g),d,h,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return t(function(e, -f){var h=a(e,f),g=d(e,f),m;if(!h)return s;(h=Xa(h[g],c.text))&&(h.then&&c.options.unwrapPromises)&&(m=h,"$$v"in h||(m.$$v=s,m.then(function(a){m.$$v=a})),h=h.$$v);return h},{assign:function(e,f,h){var g=d(e,h);return Xa(a(e,h),c.text)[g]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,h){for(var g=[],m=c?c(f,h):f,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(qb(Math[0=Q&&(c.href||c.name||c.$set("href",""),a.append(U.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Ba.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| -a.preventDefault()})}}}),Qb={};r(jb,function(a,c){if("multiple"!=a){var d=ka("ng-"+c);Qb[d]=function(){return{priority:100,link:function(a,f,h){a.$watch(h[d],function(a){h.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=ka("ng-"+a);Qb[c]=function(){return{priority:99,link:function(d,e,f){var h=a,g=a;"href"===a&&"[object SVGAnimatedString]"===Ba.call(e.prop("href"))&&(g="xlinkHref",f.$attr[g]="xlink:href",h=null);f.$observe(c,function(a){a&&(f.$set(g,a),Q&&h&&e.prop(h,f[g]))})}}}}); -var ub={$addControl:x,$removeControl:x,$setValidity:x,$setDirty:x,$setPristine:x};Oc.$inject=["$element","$attrs","$scope","$animate"];var Qc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,f,h){if(!f.action){var g=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Pc(e[0],"submit",g);e.on("$destroy",function(){c(function(){Gb(e[0],"submit",g)},0,!1)})}var m=e.parent().controller("form"),k=f.name|| -f.ngForm;k&&pb(a,k,h,k);if(m)e.on("$destroy",function(){m.$removeControl(h);k&&pb(a,k,s,k);t(h,ub)})}}}}}]},le=Qc(),me=Qc(!0),ne=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,oe=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,pe=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc=/^(\d{4})-(\d{2})-(\d{2})$/,Sc=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)$/,Rb=/^(\d{4})-W(\d\d)$/,Tc=/^(\d{4})-(\d\d)$/,Uc=/^(\d\d):(\d\d)$/,Vc={text:Za,date:$a("date",Rc,wb(Rc,["yyyy", -"MM","dd"]),"yyyy-MM-dd"),"datetime-local":$a("datetimelocal",Sc,wb(Sc,["yyyy","MM","dd","HH","mm"]),"yyyy-MM-ddTHH:mm"),time:$a("time",Uc,wb(Uc,["HH","mm"]),"HH:mm"),week:$a("week",Rb,function(a){if(na(a))return a;if(y(a)){Rb.lastIndex=0;var c=Rb.exec(a);if(c){a=+c[1];var d=+c[2],c=Mc(a),d=7*(d-1);return new Date(a,0,c.getDate()+d)}}return NaN},"yyyy-Www"),month:$a("month",Tc,wb(Tc,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,h){Za(a,c,d,e,f,h);e.$parsers.push(function(a){var c=e.$isEmpty(a); -if(c||pe.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});de(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return ma(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return ma(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return ma(e, -"number",e.$isEmpty(a)||yb(a),a)})},url:function(a,c,d,e,f,h){Za(a,c,d,e,f,h);a=function(a){return ma(e,"url",e.$isEmpty(a)||ne.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,h){Za(a,c,d,e,f,h);a=function(a){return ma(e,"email",e.$isEmpty(a)||oe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){C(d.name)&&c.attr("name",ab());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked= -d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,h=d.ngFalseValue;y(f)||(f=!0);y(h)||(h=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:h})},hidden:x,button:x,submit:x,reset:x,file:x},Wc=["$browser","$sniffer","$filter",function(a,c,d){return{restrict:"E", -require:"?ngModel",link:function(e,f,h,g){g&&(Vc[P(h.type)]||Vc.text)(e,f,h,g,c,a,d)}}}],tb="ng-valid",sb="ng-invalid",Ka="ng-pristine",vb="ng-dirty",qe=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,h){function g(a,c){c=c?"-"+eb(c,"-"):"";h.removeClass(e,(a?sb:tb)+c);h.addClass(e,(a?tb:sb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid= -!1;this.$name=d.name;var m=f(d.ngModel),k=m.assign;if(!k)throw F("ngModel")("nonassign",d.ngModel,fa(e));this.$render=x;this.$isEmpty=function(a){return C(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||ub,n=0,q=this.$error={};e.addClass(Ka);g(!0);this.$setValidity=function(a,c){q[a]!==!c&&(c?(q[a]&&n--,n||(g(!0),this.$valid=!0,this.$invalid=!1)):(g(!1),this.$invalid=!0,this.$valid=!1,n++),q[a]=!c,g(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1; -this.$pristine=!0;h.removeClass(e,vb);h.addClass(e,Ka)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,h.removeClass(e,Ka),h.addClass(e,vb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,k(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var p=this;a.$watch(function(){var c=m(a);if(p.$modelValue!==c){var d=p.$formatters,e=d.length;for(p.$modelValue=c;e--;)c=d[e](c);p.$viewValue!== -c&&(p.$viewValue=c,p.$render())}return c})}],re=function(){return{require:["ngModel","^?form"],controller:qe,link:function(a,c,d,e){var f=e[0],h=e[1]||ub;h.$addControl(f);a.$on("$destroy",function(){h.$removeControl(f)})}}},se=$({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Xc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", -!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},te=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!C(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push(ca(a))});return c}});e.$formatters.push(function(a){return I(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},ue=/^(true|false|\d+)$/,ve=function(){return{priority:100, -compile:function(a,c){return ue.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},we=sa(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),xe=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],ye=["$sce","$parse", -function(a,c){return function(d,e,f){e.addClass("ng-binding").data("$binding",f.ngBindHtml);var h=c(f.ngBindHtml);d.$watch(function(){return(h(d)||"").toString()},function(c){e.html(a.getTrustedHtml(h(d))||"")})}}],ze=Pb("",!0),Ae=Pb("Odd",0),Be=Pb("Even",1),Ce=sa({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}),De=[function(){return{scope:!0,controller:"@",priority:500}}],Yc={};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), -function(a){var c=ka("ng-"+a);Yc[c]=["$parse",function(d){return{compile:function(e,f){var h=d(f[c]);return function(c,d,e){d.on(P(a),function(a){c.$apply(function(){h(c,{$event:a})})})}}}}]});var Ee=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,h){var g,m,k;c.$watch(e.ngIf,function(f){Oa(f)?m||(m=c.$new(),h(m,function(c){c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");g={clone:c};a.enter(c,d.parent(),d)})):(k&&(k.remove(), -k=null),m&&(m.$destroy(),m=null),g&&(k=Bb(g.clone),a.leave(k,function(){k=null}),g=null))})}}}],Fe=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ca.noop,compile:function(h,g){var m=g.ngInclude||g.src,k=g.onload||"",l=g.autoscroll;return function(g,h,p,r,s){var t=0,u,z,J,w=function(){z&&(z.remove(),z=null);u&&(u.$destroy(),u=null);J&&(e.leave(J,function(){z=null}),z=J,J=null)};g.$watch(f.parseAsResourceUrl(m), -function(f){var m=function(){!v(l)||l&&!g.$eval(l)||d()},p=++t;f?(a.get(f,{cache:c}).success(function(a){if(p===t){var c=g.$new();r.template=a;a=s(c,function(a){w();e.enter(a,null,h,m)});u=c;J=a;u.$emit("$includeContentLoaded");g.$eval(k)}}).error(function(){p===t&&w()}),g.$emit("$includeContentRequested")):(w(),r.template=null)})}}}}],Ge=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],He=sa({priority:450, -compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Ie=sa({terminal:!0,priority:1E3}),Je=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,h){var g=h.count,m=h.$attr.when&&f.attr(h.$attr.when),k=h.offset||0,l=e.$eval(m)||{},n={},q=c.startSymbol(),p=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(h,function(a,c){s.test(c)&&(l[P(c.replace("when","").replace("Minus","-"))]=f.attr(h.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,q+g+"-"+k+p))});e.$watch(function(){var c= -parseFloat(e.$eval(g));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return n[c](e,f,!0)},function(a){f.text(a)})}}}],Ke=["$parse","$animate",function(a,c){var d=F("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,h,g,m){var k=h.ngRepeat,l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,q,p,s,t,v,u={$id:Fa};if(!l)throw d("iexp",k);h=l[1];g=l[2];(l=l[3])?(n=a(l),q=function(a,c,d){v&&(u[v]=a);u[t]=c;u.$index=d;return n(e, -u)}):(p=function(a,c){return Fa(c)},s=function(a){return a});l=h.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",h);t=l[3]||l[1];v=l[2];var H={};e.$watchCollection(g,function(a){var g,h,l=f[0],n,u={},y,N,x,C,F,K,I=[];if(xb(a))F=a,n=q||p;else{n=q||s;F=[];for(x in a)a.hasOwnProperty(x)&&"$"!=x.charAt(0)&&F.push(x);F.sort()}y=F.length;h=I.length=F.length;for(g=0;gD;)y.pop().element.remove()}for(;x.length> -B;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Te("iexp",t,fa(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],q=c(k[3]||""),r=c(k[2]?k[1]:m),z=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];E&&(a(E)(e),E.removeClass("ng-scope"),E.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=z(e)||[],d={},h,k,l,q,t,v,u;if(p)for(k=[],q=0,v=x.length;q@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}'); +(function(O,U,s){'use strict';function t(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.17-build.95+sha.3691454/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, +function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function Xb(b){try{return decodeURIComponent(b)}catch(a){}}function Yb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Xb(c[0]),B(d)&&(b=B(c[1])?Xb(c[1]):!0,a[d]?M(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Zb(b){var a=[];q(b,function(b,d){M(b)?q(b,function(b){a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))}):a.push(za(d,!0)+(!0===b?"":"="+za(b,!0)))});return a.length?a.join("&"):""}function wb(b){return za(b, +!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function za(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Wc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(U.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+ +a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function $b(b,a){var c=function(){b=y(b);if(b.injector()){var c=b[0]===U?"document":ha(b);throw Pa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=ac(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", +function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(O&&!d.test(O.name))return c();O.name=O.name.replace(d,"");Ea.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function fb(b,a){a=a||"_";return b.replace(Xc,function(b,d){return(d?a:"")+b.toLowerCase()})}function xb(b,a,c){if(!b)throw Pa("areq",a||"?",c||"required");return b}function Ra(b,a,c){c&&M(b)&&(b=b[b.length-1]);xb(P(b),a,"not a function, got "+(b&&"object"==typeof b? +b.constructor.name||"Object":typeof b));return b}function Aa(b,a){if("hasOwnProperty"===b)throw Pa("badname",a);}function bc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f "+e[1]+a.replace(le,"<$1>")+e[2]; +d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=S?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ia(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===s&&(c=b.$$hashKey=bb()):c=b;return a+":"+c}function Va(b){q(b,this.put,this)}function oc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(oe, +""),c=c.match(pe),q(c[1].split(qe),function(b){b.replace(re,function(b,c,d){a.push(d)})})),b.$inject=a):M(b)?(c=b.length-1,Ra(b[c],"fn"),a=b.slice(0,c)):Ra(b,"fn",!0);return a}function ac(b){function a(a){return function(b,c){if(X(b))q(b,Rb(a));else return a(b,c)}}function c(a,b){Aa(a,"service");if(P(b)||M(b))b=n.instantiate(b);if(!b.$get)throw Wa("pget",a);return m[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(w(a))for(c= +Sa(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g 4096 bytes)!"));else{if(l.cookie!==da)for(da=l.cookie,d=da.split("; "),Q={},g=0;gk&&this.remove(p.key),b},get:function(a){if(k").parent()[0])});var g=L(a,b,a,c,d,e);ma(a,"ng-scope");return function(b,c,d){xb(b,"scope");var e=c?Ja.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;darguments.length&& +(b=a,a=s);D&&(c=lb);return p(a,b,c)}var I,x,v,A,R,H,lb={},da;I=c===g?d:Ub(d,new Hb(y(g),d.$attr));x=I.$$element;if(Q){var T=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=y(g);H=e.$new(!0);ia&&ia===Q.$$originalDirective?f.data("$isolateScope",H):f.data("$isolateScopeNoTemplate",H);ma(f,"ng-isolate-scope");q(Q.scope,function(a,c){var d=a.match(T)||[],g=d[3]||c,f="?"==d[2],d=d[1],l,m,n,p;H.$$isolateBindings[c]=d+g;switch(d){case "@":I.$observe(g,function(a){H[c]=a});I.$$observers[g].$$scope=e;I[g]&&(H[c]=b(I[g])(e)); +break;case "=":if(f&&!I[g])break;m=r(I[g]);p=m.literal?xa:function(a,b){return a===b};n=m.assign||function(){l=H[c]=m(e);throw ja("nonassign",I[g],Q.name);};l=H[c]=m(e);H.$watch(function(){var a=m(e);p(a,H[c])||(p(a,l)?n(e,a=H[c]):H[c]=a);return l=a},null,m.literal);break;case "&":m=r(I[g]);H[c]=function(a){return m(e,a)};break;default:throw ja("iscp",Q.name,c,a);}})}da=p&&u;L&&q(L,function(a){var b={$scope:a===Q||a.$$isolateScope?H:e,$element:x,$attrs:I,$transclude:da},c;R=a.controller;"@"==R&&(R= +I[a.name]);c=z(R,b);lb[a.name]=c;D||x.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(v=l.length;fG.priority)break;if(V=G.scope)A=A||G,G.templateUrl||(K("new/isolated scope",Q,G,Z),X(V)&&(Q=G));t=G.name;!G.templateUrl&&G.controller&&(V=G.controller,L=L||{},K("'"+t+"' controller",L[t],G,Z),L[t]=G);if(V=G.transclude)E=!0,G.$$tlb||(K("transclusion",T,G,Z),T=G),"element"==V?(D=!0,v=G.priority, +V=H(c,ra,W),Z=d.$$element=y(U.createComment(" "+t+": "+d[t]+" ")),c=Z[0],mb(g,y(ya.call(V,0)),c),Xa=x(V,e,v,f&&f.name,{nonTlbTranscludeDirective:T})):(V=y(Eb(c)).contents(),Z.empty(),Xa=x(V,e));if(G.template)if(K("template",ia,G,Z),ia=G,V=P(G.template)?G.template(Z,d):G.template,V=Y(V),G.replace){f=G;V=Cb.test(V)?y(ba(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",t,"");mb(g,Z,c);S={$attr:{}};V=da(c,[],S);var $=a.splice(N+1,a.length-(N+1));Q&&pc(V);a=a.concat(V).concat($);B(d,S);S= +a.length}else Z.html(V);if(G.templateUrl)K("template",ia,G,Z),ia=G,G.replace&&(f=G),J=C(a.splice(N,a.length-N),Z,d,g,Xa,l,n,{controllerDirectives:L,newIsolateScopeDirective:Q,templateDirective:ia,nonTlbTranscludeDirective:T}),S=a.length;else if(G.compile)try{O=G.compile(Z,d,Xa),P(O)?u(null,O,ra,W):O&&u(O.pre,O.post,ra,W)}catch(aa){m(aa,ha(Z))}G.terminal&&(J.terminal=!0,v=Math.max(v,G.priority))}J.scope=A&&!0===A.scope;J.transclude=E&&Xa;p.hasElementTranscludeDirective=D;return J}function pc(a){for(var b= +0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(g)&&(n&&(p=Tb(p,{$$start:n,$$end:r})),b.push(p),k=p)}catch(F){m(F)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ma(e, +b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function C(a,b,c,d,e,g,f,l){var k=[],m,r,z=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),x=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl;b.empty();n.get(v.getTrustedResourceUrl(x),{cache:p}).success(function(n){var p,J;n=Y(n);if(u.replace){n=Cb.test(n)? +y(ba(n)):[];p=n[0];if(1!=n.length||1!==p.nodeType)throw ja("tplrt",u.name,x);n={$attr:{}};mb(d,b,p);var v=da(p,[],n);X(u.scope)&&pc(v);a=v.concat(a);B(c,n)}else p=z,b.html(n);a.unshift(F);m=ia(a,p,c,e,b,u,g,f,l);q(d,function(a,c){a==p&&(d[c]=b[0])});for(r=L(b[0].childNodes,e);k.length;){n=k.shift();J=k.shift();var A=k.shift(),R=k.shift(),v=b[0];if(J!==z){var H=J.className;l.hasElementTranscludeDirective&&u.replace||(v=Eb(p));mb(A,y(J),v);ma(y(v),H)}J=m.transclude?Q(n,m.transclude):R;m(r,n,v,d,J)}k= +null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b),k.push(c),k.push(d),k.push(e)):m(r,b,c,d,e)}}function E(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:n.reject(b)}var d={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b,d){P(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=D({},a.headers),g,f,c=D({},c.common,c[K(a.method)]);b(c);b(d);a:for(g in c){a=K(g);for(f in d)if(K(f)===a)continue a;d[g]=c[g]}return d}(a);D(d,a);d.headers=g;d.method=Fa(d.method);(a=Ib(d.url)?b.cookies()[d.xsrfCookieName|| +e.xsrfCookieName]:s)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]=a);var f=[function(a){g=a.headers;var b=uc(a.data,tc(g),a.transformRequest);E(a.data)&&q(g,function(a,b){"content-type"===K(b)&&delete g[b]});E(a.withCredentials)&&!E(e.withCredentials)&&(a.withCredentials=e.withCredentials);return z(a,b,g).then(c,c)},s],h=n.when(d);for(q(v,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift(); +var k=f.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function z(b,c,g){function f(a,b,c,e){v&&(200<=a&&300>a?v.put(s,[a,b,sc(c),e]):v.remove(s));l(b,a,c,e);d.$$phase||d.$apply()}function l(a,c,d,e){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:tc(d),config:b,statusText:e})}function k(){var a=db(r.pendingRequests, +b);-1!==a&&r.pendingRequests.splice(a,1)}var p=n.defer(),z=p.promise,v,q,s=u(b.url,b.params);r.pendingRequests.push(b);z.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(v=X(b.cache)?b.cache:X(e.cache)?e.cache:F);if(v)if(q=v.get(s),B(q)){if(q.then)return q.then(k,k),q;M(q)?l(q[1],q[0],ca(q[2]),q[3]):l(q,200,{},"OK")}else v.put(s,z);E(q)&&a(b.method,s,c,f,g,b.timeout,b.withCredentials,b.responseType);return z}function u(a,b){if(!b)return a;var c=[];Sc(b,function(a,b){null===a||E(a)|| +(M(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(za(b)+"="+za(a))}))});0=S&&(!b.match(/^(get|post|head|put|delete|options)$/i)||!O.XMLHttpRequest))return new O.ActiveXObject("Microsoft.XMLHTTP");if(O.XMLHttpRequest)return new O.XMLHttpRequest;throw t("$httpBackend")("noxhr");}function Ud(){this.$get=["$browser","$window","$document",function(b,a,c){return ve(b,ue,b.defer,a.angular.callbacks, +c[0])}]}function ve(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange=c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;S&&8>=S?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,l,k,m,n,p,r,z){function u(){v=f;A&&A();x&&x.abort()}function F(a,d,e,g,f){L&&c.cancel(L);A=x=null;0===d&&(d=e?200:"file"==sa(l).protocol? +404:0);a(1223===d?204:d,e,g,f||"");b.$$completeOutstandingRequest(C)}var v;b.$$incOutstandingRequestCount();l=l||b.url();if("jsonp"==K(e)){var J="_"+(d.counter++).toString(36);d[J]=function(a){d[J].data=a};var A=g(l.replace("JSON_CALLBACK","angular.callbacks."+J),function(){d[J].data?F(m,200,d[J].data):F(m,v||-2);d[J]=Ea.noop})}else{var x=a(e);x.open(e,l,!0);q(n,function(a,b){B(a)&&x.setRequestHeader(b,a)});x.onreadystatechange=function(){if(x&&4==x.readyState){var a=null,b=null;v!==f&&(a=x.getAllResponseHeaders(), +b="response"in x?x.response:x.responseText);F(m,v||x.status,b,a,x.statusText||"")}};r&&(x.withCredentials=!0);if(z)try{x.responseType=z}catch(s){if("json"!==z)throw s;}x.send(k||null)}if(0=h&&(n.resolve(r),m(p.$$intervalId),delete e[p.$$intervalId]);z||b.$apply()},f);e[p.$$intervalId]=n;return p}var e={};d.cancel=function(a){return a&& +a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function ad(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), +SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function wc(b){b=b.split("/");for(var a=b.length;a--;)b[a]= +wb(b[a]);return b.join("/")}function xc(b,a,c){b=sa(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=Y(b.port)||we[b.protocol]||null}function yc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=sa(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Yb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ya(b){var a= +b.indexOf("#");return-1==a?b:b.substr(0,a)}function Jb(b){return b.substr(0,Ya(b).lastIndexOf("/")+1)}function zc(b,a){this.$$html5=!0;a=a||"";var c=Jb(b);xc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!w(e))throw Kb("ipthprfx",a,c);yc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Zb(this.$$search),b=this.$$hash?"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; +if((e=oa(b,d))!==s)return d=e,(e=oa(a,e))!==s?c+(oa("/",e)||e):b+d;if((e=oa(c,d))!==s)return c+e;if(c==d+"/")return c}}function Lb(b,a){var c=Jb(b);xc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e):this.$$html5?e:"";if(!w(e))throw Kb("ihshprfx",d,a);yc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Zb(this.$$search),e=this.$$hash? +"#"+wb(this.$$hash):"";this.$$url=wc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Ya(b)==Ya(a))return a}}function Ac(b,a){this.$$html5=!0;Lb.apply(this,arguments);var c=Jb(b);this.$$rewrite=function(d){var e;if(b==Ya(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function nb(b){return function(){return this[b]}}function Bc(b,a){return function(c){if(E(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Vd(){var b= +"",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode=function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,l=d.baseHref(),k=d.url();a?(l=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(l||"/"),e=e.history?zc:Ac):(l=Ya(k),e=Lb);h=new e(l,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b= +y(a.target);"a"!==K(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return;var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=sa(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&&(a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),O.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart", +a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase||c.$digest())});var m=0;c.$watch(function(){var a=d.url(),b=h.$$replace;m&&a==h.absUrl()||(m++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return m});return h}]}function Wd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(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&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||C;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];q(arguments,function(b){a.push(d(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(){b&&c.apply(a,arguments)}}()}}]}function fa(b, +a){if("constructor"===b)throw Ba("isecfld",a);return b}function Za(b,a){if(b){if(b.constructor===b)throw Ba("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw Ba("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw Ba("isecdom",a);}return b}function ob(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1e?Cc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=Cc(d[f++],d[f++],d[f++], +d[f++],d[f++],c,a)(b,g),g=s,b=h;while(fa)for(b in l++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(q--,delete e[b])}else e!==d&&(e=d,l++);return l},function(){p?(p=!1,b(d,d,c)):b(d,f,c);if(h)if(X(d))if(ab(d)){f=Array(d.length);for(var a=0;as&&(y=4-s,Q[y]||(Q[y]=[]),H=P(d.exp)?"fn: "+ +(d.exp.name||d.exp.toString()):d.exp,H+="; newVal: "+qa(g)+"; oldVal: "+qa(f),Q[y].push(H));else if(d===c){x=!1;break a}}catch(w){p.$$phase=null,e(w)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((x||k.length)&&!s--)throw p.$$phase=null,a("infdig",b,qa(Q));}while(x||k.length);for(p.$$phase=null;m.length;)try{m.shift()()}catch(T){e(T)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed= +!0;this!==p&&(q(this.$$listenerCount,eb(null,m,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy= +this.$digest=this.$apply=C,this.$on=this.$watch=function(){return C})}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$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(){c[db(c,b)]=null;m(e,1,a)}},$emit:function(a,b){var c=[],d,g=this,f=!1,h={name:a,targetScope:g,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},l=[h].concat(ya.call(arguments,1)),k,m;do{d=g.$$listeners[a]||c;h.currentScope=g;k=0;for(m=d.length;kc.msieDocumentMode)throw ua("iequirks");var e=ca(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs= +e.getTrusted=function(a,b){return b},e.valueOf=Da);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var g=e.parseAs,f=e.getTrusted,h=e.trustAs;q(ga,function(a,b){var c=K(b);e[Ta("parse_as_"+c)]=function(b){return g(a,b)};e[Ta("get_trusted_"+c)]=function(b){return f(a,b)};e[Ta("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function be(){this.$get=["$window","$document",function(b,a){var c={},d=Y((/android (\d+)/.exec(K((b.navigator|| +{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,l=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style,m=!1,n=!1;if(k){for(var p in k)if(m=l.exec(p)){h=m[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");m=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in k);!d||m&&n||(m=w(g.body.style.webkitTransition),n=w(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState|| +4>d||e),hashchange:"onhashchange"in b&&(!f||7b; +b=Math.abs(b);var f=b+"",h="",l=[],k=!1;if(-1!==f.indexOf("e")){var m=f.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?f="0":(h=f,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{f=(f.split(Nc)[1]||"").length;E(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Nc);f=b[0];b=b[1]||"";var m=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(m=f.length-n,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Ob(e,a,d)}}function pb(b,a){return function(c,d){var e=c["get"+b](),g=Fa(a?"SHORT"+b:b);return d[g][e]}}function Jc(b){function a(a){var b; +if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=Y(b[9]+b[10]),f=Y(b[9]+b[11]));h.call(a,Y(b[1]),Y(b[2])-1,Y(b[3]));g=Y(b[4]||0)-g;f=Y(b[5]||0)-f;h=Y(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;w(c)&& +(c=Ge.test(c)?Y(c):a(c));vb(c)&&(c=new Date(c));if(!Na(c))return c;for(;e;)(l=He.exec(e))?(f=f.concat(ya.call(l,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h=Ie[a];g+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ce(){return function(b){return qa(b,!0)}}function De(){return function(b,a){if(!M(b)&&!w(b))return b;a=Y(a);if(w(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||m()});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var n=c.ngPattern;n&&((e=n.match(/^\/(.*)\/([gim]*)$/))?(n=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||n.test(a),a)}):e=function(c){var e=b.$eval(n);if(!e||!e.test)throw t("ngPattern")("noregexp",n,e,ha(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e)); +if(c.ngMinlength){var p=Y(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=p,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var r=Y(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=r,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Pb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dS?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Fa(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName}; +var Xc=/[A-Z]/g,$c={full:"1.2.17-build.95+sha.3691454",major:1,minor:2,dot:17,codeName:"snapshot"},Ua=N.cache={},gb=N.expando="ng-"+(new Date).getTime(),me=1,Pc=O.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Fb=O.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};N._data=function(b){return this.cache[b[this.expando]]||{}};var he=/([\:\-\_]+(.))/g,ie=/^moz([A-Z])/,Bb= +t("jqLite"),je=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Cb=/<|&#?\w+;/,ke=/<([\w:]+)/,le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th=ea.td;var Ja=N.prototype= +{ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),N(O).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:Ke,sort:[].sort,splice:[].splice},kb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){kb[K(b)]=b});var nc={};q("input select option textarea button form details".split(" "), +function(b){nc[Fa(b)]=!0});q({data:jc,inheritedData:jb,scope:function(b){return y(b).data("$scope")||jb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y(b).data("$isolateScope")||y(b).data("$isolateScopeNoTemplate")},controller:kc,injector:function(b){return jb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Gb,css:function(b,a,c){a=Ta(a);if(B(c))b.style[a]=c;else{var d;8>=S&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a]; +8>=S&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=K(a);if(kb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:s;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(E(d))return e?b[e]:"";b[e]=d}var a=[];9>S?(a[1]="innerText",a[3]="nodeValue"):a[1]= +a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(E(a)){if("SELECT"===Ka(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(E(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a, +c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Ne={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw Ba("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary(): +(a=this.expect("-"))?this.binaryFn($a.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Dc(d,this.options,this.text);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,f,h){return ob(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,g){var f=a(e,g),h=d(e,g),l;if(!f)return s;(f=Za(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&& +(l=f,"$$v"in f||(l.$$v=s,l.then(function(a){l.$$v=a})),f=f.$$v);return f},{assign:function(e,g,f){var h=d(e,f);return Za(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],l=c?c(g,f):g,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ob(Math[0=S&&(c.href||c.name||c.$set("href",""),a.append(U.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var g="[object SVGAnimatedString]"===wa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),zb={};q(kb,function(a,c){if("multiple"!=a){var d=na("ng-"+c);zb[d]=function(){return{priority:100,link:function(a, +g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c=na("ng-"+a);zb[c]=function(){return{priority:99,link:function(d,e,g){var f=a,h=a;"href"===a&&"[object SVGAnimatedString]"===wa.call(e.prop("href"))&&(h="xlinkHref",g.$attr[h]="xlink:href",f=null);g.$observe(c,function(a){a&&(g.$set(h,a),S&&f&&e.prop(f,g[h]))})}}}});var sb={$addControl:C,$removeControl:C,$setValidity:C,$setDirty:C,$setPristine:C};Oc.$inject=["$element","$attrs","$scope","$animate"];var Qc= +function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Pc(e[0],"submit",h);e.on("$destroy",function(){c(function(){Fb(e[0],"submit",h)},0,!1)})}var l=e.parent().controller("form"),k=g.name||g.ngForm;k&&ob(a,k,f,k);if(l)e.on("$destroy",function(){l.$removeControl(f);k&&ob(a,k,s,k);D(f,sb)})}}}}}]},dd=Qc(),qd=Qc(!0),Oe=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, +Pe=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,Qe=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc={text:ub,number:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Qe.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});Je(e,"number",c);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a), +e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e,"number",e.$isEmpty(a)||vb(a),a)})},url:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||Oe.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){ub(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||Pe.test(a),a)};e.$formatters.push(a); +e.$parsers.push(a)},radio:function(a,c,d,e){E(d.name)&&c.attr("name",bb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;w(g)||(g=!0);w(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g}; +e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:C,button:C,submit:C,reset:C,file:C},dc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,f){f&&(Rc[K(g.type)]||Rc.text)(d,e,g,f,c,a)}}}],rb="ng-valid",qb="ng-invalid",La="ng-pristine",tb="ng-dirty",Re=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,g,f){function h(a,c){c=c?"-"+fb(c,"-"):"";f.removeClass(e,(a?qb:rb)+c); +f.addClass(e,(a?rb:qb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var l=g(d.ngModel),k=l.assign;if(!k)throw t("ngModel")("nonassign",d.ngModel,ha(e));this.$render=C;this.$isEmpty=function(a){return E(a)||""===a||null===a||a!==a};var m=e.inheritedData("$formController")||sb,n=0,p=this.$error={};e.addClass(La);h(!0);this.$setValidity=function(a,c){p[a]!== +!c&&(c?(p[a]&&n--,n||(h(!0),this.$valid=!0,this.$invalid=!1)):(h(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,h(c,a),m.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;f.removeClass(e,tb);f.addClass(e,La)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,f.removeClass(e,La),f.addClass(e,tb),m.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,k(a,d),q(this.$viewChangeListeners, +function(a){try{a()}catch(d){c(d)}}))};var r=this;a.$watch(function(){var c=l(a);if(r.$modelValue!==c){var d=r.$formatters,e=d.length;for(r.$modelValue=c;e--;)c=d[e](c);r.$viewValue!==c&&(r.$viewValue=c,r.$render())}return c})}],Fd=function(){return{require:["ngModel","^?form"],controller:Re,link:function(a,c,d,e){var g=e[0],f=e[1]||sb;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},Hd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), +ec=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Gd=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!E(a)){var c=[];a&&q(a.split(g),function(a){a&& +c.push(ba(a))});return c}});e.$formatters.push(function(a){return M(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},Se=/^(true|false|\d+)$/,Id=function(){return{priority:100,compile:function(a,c){return Se.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},id=va(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),kd=["$interpolate", +function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],jd=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding",g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],ld=Pb("",!0),nd=Pb("Odd",0),md=Pb("Even",1),od=va({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}), +pd=[function(){return{scope:!0,controller:"@",priority:500}}],fc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=na("ng-"+a);fc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d,e){d.on(K(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var sd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A", +$$tlb:!0,link:function(c,d,e,g,f){var h,l,k;c.$watch(e.ngIf,function(g){Qa(g)?l||(l=c.$new(),f(l,function(c){c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=yb(h.clone),a.leave(k,function(){k=null}),h=null))})}}}],td=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ea.noop,compile:function(f, +h){var l=h.ngInclude||h.src,k=h.onload||"",m=h.autoscroll;return function(f,h,q,s,u){var F=0,v,y,A,x=function(){y&&(y.remove(),y=null);v&&(v.$destroy(),v=null);A&&(e.leave(A,function(){y=null}),y=A,A=null)};f.$watch(g.parseAsResourceUrl(l),function(g){var l=function(){!B(m)||m&&!f.$eval(m)||d()},q=++F;g?(a.get(g,{cache:c}).success(function(a){if(q===F){var c=f.$new();s.template=a;a=u(c,function(a){x();e.enter(a,null,h,l)});v=c;A=a;v.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q=== +F&&x()}),f.$emit("$includeContentRequested")):(x(),s.template=null)})}}}}],Jd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],ud=va({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),vd=va({terminal:!0,priority:1E3}),wd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,l=f.$attr.when&&g.attr(f.$attr.when),k=f.offset|| +0,m=e.$eval(l)||{},n={},p=c.startSymbol(),r=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(f,function(a,c){s.test(c)&&(m[K(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(m,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+r))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in m||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}],xd=["$parse","$animate",function(a,c){var d=t("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0, +link:function(e,g,f,h,l){var k=f.ngRepeat,m=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,r,s,u,F,v={$id:Ia};if(!m)throw d("iexp",k);f=m[1];h=m[2];(m=m[3])?(n=a(m),p=function(a,c,d){F&&(v[F]=a);v[u]=c;v.$index=d;return n(e,v)}):(r=function(a,c){return Ia(c)},s=function(a){return a});m=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!m)throw d("iidexp",f);u=m[3]||m[1];F=m[2];var B={};e.$watchCollection(h,function(a){var f,h,m=g[0],n,v={},H,R,w,C,T,t, +E=[];if(ab(a))T=a,n=p||r;else{n=p||s;T=[];for(w in a)a.hasOwnProperty(w)&&"$"!=w.charAt(0)&&T.push(w);T.sort()}H=T.length;h=E.length=T.length;for(f=0;fA;)z.pop().element.remove()}for(;x.length>I;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Te("iexp",t,ha(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q= +c(k[2]?k[1]:m),y=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];u&&(a(u)(e),u.removeClass("ng-scope"),u.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=y(e)||[],d={},h,k,l,p,t,v,u;if(r)for(k=[],p=0,v=x.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}'); //# sourceMappingURL=angular.min.js.map diff --git a/awx/ui/static/lib/angular/angular.min.js.gzip b/awx/ui/static/lib/angular/angular.min.js.gzip index 87491dbd885f15072ea7b35ca2c31ed72fa0730e..f66855a4d90675f9a66dd8649e0899a246cd3e1f 100644 GIT binary patch literal 38685 zcmV(kK=r>LiwFSwML<&k1EgDdbKAI*|KFcN=4$oG5iQG^m6Zt>9@?$Hv z1LrZ7`67*5)e7hFj;Af|^K`Pfk#U|4`y*Gl+_#2S*A50j*JAi*IbGhhMkPWrO_Mb1 zHSpU0n?r7wu(k_W-Z)8Z;qQ22x7xWE$#{}aJ<;ttK&Wf)_`Voe11#xajWq`lv9*Ji zZ*^rXl2BfLe0PxC%##@FZL2(#<@@==TqfgIeJU{;n4MmpoP$2`#CCeAoJU+pd%Jb@ zIK0ZP&PU(1w_TvgtVJBk@hq0%3m}aN%*qr%Yjf?)U(ZiZdV0oe{9v2k9MUb}KuCvZ^Fv(N6a z@agGT{q`||KRsFT;wF$O4qKg})9LTxhi~n)W^pU1ak;evm%BpCPv`-uz`@TMp+n3K z)qKaAr%9d=G(ZiXo@`5_rh8V*Z;B5=Z_2aN`}izP<}%G6I-SkcAv<({EAI&&MYeE* zVK{O_$CDAHo%Zix-y<%jole!<^!;0>>e+;FHD6Iv(&_tT`bDw4vpZk_(NMn)K=-xO@ZVrk) zY~I~*Oh`+#7jZV7jbSkQR&{K1N=?>)$m%@uLC|Zr!JFxO`QURF%1Gw2WenD94r}%r z-@V&f<=vW;01XKZIvsp=S11fy;Pa)kbi4wMT9|6a|7mb&&eKf3gCPvuoxX93i{cc; zv_m_V_bvO-HhjR+eXR791xv>v=2id>XhwZNZtQ6YHs|a8OEt5edQ{JBnApNRh7xes2ITtoPb^cZMQ7w~@xg6N3iUP;U)_<#I&x?+eWf z4B8&AS+JL;{NcqFXT}P{*=^OJk3LD%O(nFL0Pl$*P6+iQH8Gby(+--p*2N|*D)R~&|ZU_hp}!$v$M1V zu8PWp8OznyP&lO=5CWUW5ShjfSXWAd<5v=*UAzvLgo=}B@mI}Fmso2+De=e_czb9Kx=BgKoCKq4|-J4xFVle7fG(!gP>t7Q@gEz-l&LO4%LG8 zdr*7fOBidhNN4%OSpo}$D0_9JH_P_0?hYpUvUj_X>BBkHS>y?9H0=1wm~9Q?$(G3A zPlyW7zlJ>LTh$c9y34?{kFTDkfrE#_qStZLD~G`c6bC$0yy75Zmh)JUfNKjd;7pV- zo`)gNw&6WKpGOa5xq2dr;oj`$JNIEbm@(5?vi}$8>JvdJU9Q0)VbX$oYl4x|zy!5K z41~XtF(tHUTJ2BoP7Y5$Sqy@HNftv59-bat9v_`ts9}4(0+5xYx#tI`XGe8NER1B2 zn<3=-m~D`;l_WQCe@B)uuv#sPkr^|%|H(`(C=AmHvI=3*V`jpn0+L3kQ*9YQofv4- zCwo|u9p>~s;`lDIAAGm1v84(B)=U315?dq`0`BM5wuz=VIK?|ixH^_�sFJ zlDwe&?BjFj0|x;*IPSi(gka}B26jfyKz%`jZT6LI9UN;rIG|r0sz7#BgfXOFHyG(& zV8(-n5B_%}8D9-AK_wN6G=~u?=&inSJ9IbuPS@U~`bjXbEJmfNZ=@`nWHOed?*Hex zb$(yj51o>Bs1#)xX^W{m3c?0J)B^F}uYTH|%v@S$41Ry82K~n1t9>=tHM8Dt4P|ew zsk8+qh#&e2#J`%G?WsZ5-0X+#i3>B<7&}lC-R2-blHouDAR5ShDokY^E2}KJ(<##c zXIW$m!N`@A3iv}So-k-0Hi0A3jjvl(v-D8Z8@W?|`znhkLk4}qh|R9D@05ClpP^sg zz!_X++Ypp-Ba0soIeB(Z*q0Q+97U3>{rwK@d;v?sqxVOuRMf}!JC zMtNHoeIP!trO(}ok1*%eNNae-y{oKCYz9XihTK4Imo7 z0D~Uf(?XJ^0)kYkw86x|a594HH^iXbh#m}ItSz%wBzRwR7~+%@$-YAUE(cbb)LKkg zbg#~mf*c-f9$Hi?T&k=9mZ2^h4Xrj3*SlFLt!5!dV~*f3O_EXqEZE>BqJN|21h?)W zsN^KKo&b(_$+aY?wCr3U1O(}tFs!zK>dhkcr92e1c|3!2z;MIrlj(IOVbs>~he@6u ziMwrr34sPEK$@d)t-L=>@%CRQZ$BR%y*c{$dH?kE;{4*{-r43hQTG(lUf2UubNf{B zunN!x+?pQp^`A;KLMp0zN2CiGh`*0Bg4BHOn{x4ju_fmPJWXFUHZwQtvsHQPYQsOo ziaFOa><}>`T|-bV@gcdF=>bRBLFcctv!Eg>~MrXMQGG|n6FP*v%vd|}jkg-M^PdK)NPSGe<@Wn}-Z^aCh( zRTmy3i5%}vyfKo<(C5Q3ytSeYEJ5I?;y@AUgK$Kh0Wt>ZHe|yj zx=yy9)3V^SFc@uV;J|l63G_;KDwPNi<;YhteT5!I=uGs%z^WD)m?mYGo>z#)ki?cq zZH??9O{?;y+8)KrC9!5w;0wWw6X0n9WXaHxOGQHW#t#|>&eAp(jEMcm&${#5LM|i| z?&ow7??;Ka&RFOcikz{DON3z3Ei8S?2x4XSt#X*6Sx%cgtV}3I@ja92-Au@p@5Ly- zE2pvYRgIC{Br3Pfo1ZtVavW0&w}Q#q7l5E@cHtS$N<>{)smUzMHO{jrFV3W!>!)Fx zJWZmgm|Az&PY*#lRX8YSE01MNt-fo}y=WE1m2A(avuwHa#+}ZMJvM{^ zK7FZv>R4VW;31Xzg3`0FHoRdne_(>U&~fBm?9c_5kpZ%=7}6e=J-EdMA-i=;xnW$m zagxm0fg8-QP6lqC{F;Hjx7?*GCe{8FxHw*%&+-R$$lY0XS*FJ92))Ciy^ppoQ?YwA z-xN5rGjz1MW`Cf0qOKO$9e`$q_h%OZ9d#qXj@^wrnP#-GO`}u`WhdN?$b|{GF!tVE zAj8z{H?Yn;iULl;{V0+JmFQW2>6W&I~5*` z3r@&VYP}n?O#O{Tw7_5NO=UBv3u%%lyk{*_LbV_ z)8w8#sFphGH`TnKfuU@#Zhx8r^ZmLH!R3o6X9qNNs)&=ZL+V_lJkB&;N7O$?au~5U z)cgQbz}~7;PT|=k`=zp}&>x{NGkd=)+xHGUHaS_J``6}|Z-Lnxi-u%8!sLl*lAa5q zE_)xkr43{s&<@};V076r+5(C$-xPNHga&G!oT6K%2J8$S`Bg}D{9kw+(v06QSQyZW zaN%aqnkPyoK88gf2ArLvqh8Bg6pei-A{n4d^vi2B_Pgp#*eCo|#V_^;T2(5*{simW zx9r~-%-}`Z`tKnGctSgJiGDmAkI6=(ofqPHKu2VPMrJoMA*De39zp|YkZ88ky*F%3 z4NkSdgThd-iBw5|agEow4y+>UsdO7Dhw0hn0Et0zNrp(r)r|O9uAE8NI!?Z|cg(DQ zuZXrOMz1TxWk4m>o!MYWzM!XRk59-5X<+0=$Q-ZT8#i|6Zt8wh5nQM*PBsy)Q3UGA z@>WZAuYK9m>6n9Pp^v!Wy8M2#8+$hhNom>~x#acmX5_fhVBUlIo=jv~$N@}Ih~y_t z;N)54Z$@qkKy%;z=FfWq(PEfN#5PX#5@&brrGP87gL}*EZ^Lv{hvt)_R!m1S%Ee1{ zr!(>2^4>V6lE%cJ^x6qfnZ-PMdYa&5Ro9<*+m(slsBq zg-3I~f}!VHyVj;zi7sNY{eXfpSl2oeqANSve_5=pf^~$#mpX3KmsDS*t~YSU34Da` z0@gd1g%i|OzmdLu)a9MPl>iYI^9~D@eUtKuT0klGP=)^ofzDC^_%WpLTa{oBh(mU` zvJGOCJBw~Pefzq?2l>B+@WmRbs%s-*#6-ze+$(wSbEs{m7b2;TAt)EeAADW;?floy zPknE9TUCL(5^%b8K`4Sk?6!Aa?{2qWy+%?hhp$H7Mu_h>$(<|_9naD%R~?;GabHrt z!?(6Pq)%ZF{ziXB0@hbEq`E!A$O$ZT^|+4jO0V1HPLbM}Q;-lj9+9Zt%cB(kYferJ z^zkiAUFEgv#fp3vm~x^X+c=cQG*@_mNe*;Qmmb@d4#-Q#_l^vm5Gy8~caBh*OnPnVg)^Erv(mN}!xKWqtMqO3a ziWIwL7Ss_+9U&(j*l)Bsm4vigtwo2Oa+?}-O1i}|cq>F#Jy zKvF}hjs!>yQlO85DPd0^vRB$hD$DAx_T$nuOr}c|bSmT&NLTIYXC_inRX!=yzD5fs zzR2+RacC!0$tM8_{ciV07L!JlTe~6EXGP=57>-1v^;Tb2o||Yk(J?K0Mn{{#`cm0) zACz{-K9b|jKPXkf*5juqV?Oq#j2@^-$J`nN6D2U!qmu#)Z{yGo>CIIG!y31@%_m&y z&U~+|s}8nyc2%9$ZjRfQD%)C)D$uIRZC#}uUd31WhzhkdT)uo!)m}A|nK#JOveH(( z_Nlf|57%Cj#pcu!8y8;YKg6~wr2|Sp*Pk?7eR3K#yjlI)=Naauod0L2cz<(z?kn89 ztsV6)-P{r8iS~P_23vFw)K`r%C*vMpvMrO~@sj7-v)a8F(x#QGvhkE*DTXZK%?pOOa zdWJFJjI^V&#^(E0f zHiZUauv|%&n*@neg`va%{=*dw-vPfNR{VxgPF01V4ZrFH4gYR_GvD>zG;H!UyihX$ z8CBK#PA3+_`hDG~(=o2^W4ZRWL{QKUU!E$fU8H<4qpL$^Jx}!Xjw*NaVI=4hBg>OH z)d%@RWi<-K%2*SIpr|t1Uj#^D=|v0yLBb9tRBLq;N|U9ch|Qj!E|o!rgX6~^9m1#lv-9khv3xqBJh%5hul@7Eb6!!}<31;UF}wzMRmFuH*PeJ4o?DHtK&(GJ zhpC81#WlqF&mWV#<3^>te5)qB`hEk(S|@LGPyXybbtuKIo*&ZF7o&@0Q~2tQRCAh7 z@6-R6wJU9I+t{+-^($zUivhwGElpsMz6Q;dTtBvY=>ebwsf3sUBxE+#CB%2TnMFi+7i>+#gG0zO*ct; zKBK;s50Mdoa7Y{Wr8~7H^<+xApU05`1NW$ML~&vFX!-J2z5$)EAJ6gz{t`N=4w_{U zhooiMF3C6u8Pedu`*!!mM}_YcUcZDV8GsCir|uz89C8Q?uK-lo0-}f&TeP=+{M5;x z=tvPTnE~ebBV+m+8doj2IiL3|Ja6u@J44 z{}KCMMYo=VqMuyHo#Bmif=QVRnc>DCQ3vqw4s6YjO{fJbw8+Fj44W8O9Z4TUr(m;l z3}T`Zm_B${*%po!0ymXA7nm`@W{AR{ai4Bb1i43dI-Vkm8* z$KZheCmHmp7)*9OfTN`3KJ|gFiHhq!QP++3I~1Z%cBfWAfvxLlt)Mg^YU*(K_FFGL z@*0`Ak#-nQf=4y~ZyD)Hn}I9_C+;aG-AO*5#{;MV6JjuNI&Qb2FXX}G; z-|@bbUPl)X1QuF#Vm7127W&0%Wj~vMF0-{Df2Ggl8404VO~htcc?7Q z^2!s12JW;DcA=EoJwxT!4z{YWsDLaGJ6u~|D7+H3uA0Q$OrmLxG!uib&PV}@)_wSX ziu=dH__Wp=G%a!?Ag=*%nWk*Nh(e5`LL0$-IW&}09Q30ClrxsY>w*oeIf(=B*ASM%ajQ!>`8OxIHuH6u+%e(ACG`T9g!X{k#ooYD?2qkUsaNkQf*j=W*|Gmr(KJAKyU~^3&iv{ zm&leQ8_z)w&gzZ-TV^2vq}8%Ula1yG867T30pTbKZRsX-iqutU60`h7LIM{WgQ5K9*Y+zkrbNcUH@LH@kOA{Up9la*G}68|F?U3P zy{tRuL7tS0>D4Iz>O;qsx$hR9|9X#RQGV+O9;v(xhXGbvy}g{0R8qJqg zHJy=y-rKU_p^&Y&u`%dnd*azX?G2|F^L%T_CRXTS!^U}sJ;l@S!^fw^7Ri@~-CY4# z?1Ku{EUmeZs+QeqTKRzmRwppsI00QT&Q0-cXS;RjL!W=s+;@O^MYkkjFL`_Uj&9ed z@^^|{PoI%MT+Rv~`o^ibCXIX&Z&asWu`d-wFqG_{E=a8Hfpgb6a{#7v=^fa#*eNCZ zdoIp#^kx$R602HH<+wYX<$ZBT+e|r(l6Vd@iC!~a3F&eq z(qU9$fX!O;-31}h!>{$4ux4rR*o;uBJQ0HhxSh&aWTs3n?M;jsb^&ET(YpsbBP692 z18F|rA zIKVq+aP>^$E$ch%VkwU?#wS9&IYIWLUhHH*_z1Aidtbt!_vOWx7uSD&d2#cjKEuIN z^KcHCoW+tB;aJw~`2jVaPN(Bh?$Wr?H!{YM4;3vSO>f>Sba9!_)40mn{Vby@UXb3_ zIqrB-epkVAlb6G#XzlH{PUEt*|Bt`zwf6Qx{;zfP_RuCMJ{^cK9)pR}|CB=OUkW%6_t?8^az0GHRz=g6_ zlBY3_2^lR~U*maeF`c#wxZPU5*U36w>z5YlZzcB&GD4quCijyj!t@sTX|Xy#A(rML zDP@^;iAV5>^Td;NN+xM-ogxyhjMAaZYu`8$K=uxXY%4BHJ^q~JR-!BrlC{Hts)VYj zygYolwJ1$d;G}$>uR&&6-p^-S);W!c4Z;R+Wwo}mW{7}cQPzUA7Pvr=)=65Gb#0l7 zwO>k438I(4LZtzwb$-cctTzw;+ToYQ3eMN z$z!@5OT^n~m8v)$E$&w<1-R?JJ^b{aSBGc6zlMPY^`F^wrNoLg-jf^o2z*(SdZ>5f zgUx!3u`=OUtIrnB<2b*Eg%R!Ka4&=9zIM`Kk;&L9R;zxeBMLT!ME{p@yUi=3Vg-KH zr8;PGlnuJUz`xatgnOZ!V!E-24Lak6KonG{7XB}F5_beWK(DEQbe0tp1+8Kb4X~Jk zU+67>@7MYoJ&5|dyQUY1Md7Ab7My`g3Ev^bCyG18*C=0c0)=84k=tgCK zx+PfBoEUdGRD`8b}?Ew<(vq_J@#xoi%+O-V;opw~-~HP#c^N zi2CZcsTe5pMzNX1nBi#QAHx^bwqL2P@oTT~shQux=L%aA?ZWp}xMbN}*tA&oCTU{t5FYDTW3`dK+Ak}i) zUig(m67hGwf(L}7G2wSh1-kjsWN9YFzJX1*HOM9oW!i{N91ugSNdL(3hZnEdR zPSSupC{JCco#~1@SjcI1(C4Evm}?YrCr7ffnU-ju)aat!{s(?mtGt_2vw>+x^%7vW zl=OT~e?m?UiBqyma%X$i44u^w4FARw$JLN1#fd)A!c4xxIP-jS-8g{V#V1358S-lN!`2rfA0rC{Cjnm-!^>f8kClp21!P0M@F)dnuDlV*#a zcZt7D6fpQ1CW?wV1HnAZOsl9jJo9H_&>J{&6%v~(6pyDhhu&VUR)f`QOl#t5!)33} zU2~3UXoLbBky#TFd=M#wbiITirRUG<_JP4*5UTz#V#r*^9tMjZ6ggg}7G+pVpv(<@ z#g?}Fssm#*24{jOqB*BIXx}q7V(^Hpnbv-IiNHYY|Awe+6Kz9N{@UZ}lxGDr5Ear* zakl%PNJBix9opHJ+N*;HCK2w-k|smE!Hi6Z*ej(=U#wPtKadv)SI(UXp<|+xq(FAkbagn67Ay?LUja0OSO4xQR~hjwUJF zg+N5$B^LdikwihnOCWFtAWb$z66qqqx!E-INQcndZO`K~kl1fr$bkWEM*;V!KulZc z>Rzg~Gi@e#{S)*WPFYpMDwL|#DF9N_IJ!tDgMvJM3URz%TuZXX+rNi8ybms~yW$iz zecG@4^ma?1sLO^~-+@^t>b%F-+kzs;ipJ|B()hqfbr2HA86Bu*^Pa)@*;J?RD$Dx6 z5Y!?bLh821)kgbL#x7XzNgeHWP6q47V;ozV@9xq@w!XfNG+UieyLXUl$ib7uKSbG` zG-@->P5z=BbbUcOYc7v{fZ|opZSbNl;V_3$Yy_No2WIYwzolUv24$JDOX{Nzb0PD{ z=-o%=3bTHWbNG%{t0Q>d=d9_mau&q$F9wvj4?_mN71meIN2qd33AL2ymXdF`w5_28 z4JF$eDs3WtJq>Rf1S+Y0gXnLO5H_3_OK_%2e`%LX7Y5-+tLV`w7_IgjA7O&V%R` z1HXzIQBdg?+1qd;?nvW46d%R0C=%tRj!q>Q?_pc|4XkI;P%VcAMs1Jcwe%%c1$`d%VDtJQQU5ikSl*qb()MK z>nZ52)Dj@H#M1(Cv76vjS zhP_&)qAwK%5wC>9nK&wKVK!o-<9bIRNs@RCPF0p!XJBN0rbWH?PcNhioF+g^oIl>;D4(DK zvZB?88blk`0~^g#GLY49RC3IE9jvn$?#5+whKz)>#!70pom#b!DI6G_Cg1EGhq*9Y zDZCTB#pdCOaCFl!qw%HDN3cN4h$5mQDL)b!e3UyU*ReX!2I*%H{zsT=MPeSxGowZ%nKe**{HK2_gl6u*{5r_U^_sM|o z#ECdGQl;H~T z0C4ysv4BC-uBrkJJ}WIM3n!%Z;SAQDFaJL}|0_EGtLgl@l2zlV&s(|sBoJ^Y&XCAy zr`vMExj3g6#5GTx4%xS2hj?gZr=Wg*iI1k`Ws%eg)b-ofum)aH5mKWxHf39}&oZkS zzQp+>;z%sSmG~6PT)Y?W$mqDJvmxFcTtx3+a2$~-`0j>{f>|t~Gt8m&i$D09RQqU# z*vn^9pi(i5#UI4PuH+md<@T2&>xep*$olL>#%RPTb-*;z0S=7kbgM zmbTE(slT5C@yWjeWt__+YG^@qv3c{XQAxXf)No^RoAm=)o--_>pq75{ItxTRUC-Fr z_2Nb~hAV2wbldR@(5&wX%)p{ZRG-buIU}7eRRx#ywea+;(`LWw`LFQht*oa;>|E88 z_hg++isQ@aMCF;bxW^&=WYjxO00Q{?Gql%9LZay29zuDA!zXd37p?If-Q}b#^o>_n zJbsg=!pk+l1XtAj>jW7@Jb6%2$n5@X4lA^^s=VKN1&~7XTOC#K#3)v?LG*njuH*-| zY_GodKaAli6G8arPLudS~U9l%Hpt}2hp#jl3k#Y9rLMDHb1Ll9j`X#5{&TMb7^OWc_oqB zseI|z{i}QTj@FIw=AU9VSRS`=r|?XCi#LVm;t5|0sVmdl(@71OV-;;dy-y^+5(7)69LOnN!i^Sm3aSSH?nV9sE^<@EoWpC8J zdmAr?q#EA&x5D90!TMA&C3#5N7W{38>OMMkcD;PvZhwlS|AE!YS4OKjtu29y&l;@% z$iWU0!0hZK2Wgbx%xnaTFOkrb+=$1fn!%QsbGQQgaba4FX+39bZ06MOu?Y&Zc{Em5 z64KH>~6)XRWgUml_*ZiIq8$XRP{sxga3?# zk%-iirCU7#R zNI6T8@wUw~=BWjhi3xkmpWr~k9h}v6tsmb=zrOC(m*DE^l(`_Zy`UO$jb~DiMDrF< zA3nL37yuqfUtjd}Z-)n=YsHDcgL>p!pydN~4EX?X0>Ev^vL4(tl4M`H5dh^#QNB`~ zq=k@>O0-;pW$Gg{-Y9UzQam~wj@`k+(U$pMvo>|J#jXsOYvA`j_{#>j>@{vVniMu3 zMfSMeNa3h&`Q-4~a!%UD$6Or&k5BIc;*)$DO0^EU^JSXm^LcIVlzRV&Q!=mqMYq^y z%UV{IR!)^cZ-)g{sRUI;s;L!JWkXO^-w{+xCAaV3GId1M1Xg|mg;*)1B(N$7Eb7oF z>W|X3SS;N_EZrJm6hj!LR7?q=NsPMvFv>9D>RAD!!4b#R}8S;_~s9>?<3 zarPG9=hY-v%z_cI-%3(bU2RjZaRD&0qO3SDC#+ zTnarhA2$AwN`rM84!#@POVa_Ike&9@P}!Ued&Nah-5=!z*Q&p$Vun+AKnL1XdLg?eL$Vizs`Oo zT-eQ_5g83MunInizOGL@Id=3Twk+~I+(%tZEjJe+mH46kjm|`C!YBi5Wx3Y%^+xHQ z-cXXir>D$QWYVoz2xwLT{Rp$hm`a&m=Q#Ya9v-=ZzT!L>a~Ix-wgNvb>vSZ}fpXV{ z6x0GPz#=ZJlZ7N@8=eP74%BBk5c?{2+EE18;B!iWEUF)Mn#IPBW)`pP_pU;=L!@{6 zudiZ$IXUmQ18r5;0Vc9Mm_#UsWdjS=Ld(TiKpSAWpdIUZl%FsuV=@sa zyM!Lp+Ad|&@z(Jm5W1?NQ zZc^#tDoajqY|{~igd0QUSprG%+lyV=3X|GR9;{uv!elr zn!t$2SC`Tadrz@vXK72ws#}5&|A9oT=4|unsm(t1!l~^@XHDHgE%?+60-MD))?J7Q zO5fm_g=6jM{U9B|?Q0B31X@OP!q>=oe54-!M#HgK(8V~3-zKFArB?|9jQ@D?xYhN) zSztno1tp9zpZ9&9X%wkB!CA(h-kW?zn z1|#%)e6B7fz(<3=0m|NrtHz_TYLh-2+hOmumMiqc7Skb`JnywVh@~!vQ`#lMj85R& z8Wbm1C*qEh0$A`HN4aHU?I*A#zBp}qF10P0zzX@|4tB=Ml2`!`+be8tITsr}F(A6) zx7-^+%2V%I6U~P4v#^_F0KL1A(Nr$$x2SyXa$yuzHs1zUR`3S=oqxBWZQMZ>Kw*v zgg&hY(?e$2`|#tJ`lfz6(nHlLd4C>1>!7m4yq1p5+Ap?boc_PHQrNj=NfG4}YATLm zOTsIaT~sYdb`g=rFG@ZOD=_lZ(Pu6Ie$ucjFCr5Z5V1@`V&5SGNR1T~7);o!S&0P; zkuzo1nsDr4`qy+F9}<5r$d^Z>xwYC0pp-ZbCba`34(M!k%U@^0HBc3Z<E>+fQOR2!cruz7yf)Q?g$4#h*SdS%jwC% z#@W%w{Z9@*d&kwwXB*a2`0fdtdhDBM(ug+TbK2}9xe$vncwc^8USci$V_2d~G-kGD zFS)imaNX2F~$*)s%QEw4O!lpsX zJx^`)RU>?w4adUEG^2yD=L=Y^EEYjH0}Dt72T{Q*6uMh-*>ftvW0_$lQV}f=gz9JK zfN&6>>=73RWn+j5C7FpX9NSo|_)(dNcaW3|6=TO^M%7{(w48dOrz1or0wFWZRcoRy zU5jd?10r(Ogpk(8_f$WN;Nny{_qyJBzFD3HPfv}alGF~s&bnQh*USp+kL46LeGyDi zX=wl)p=@F(=+BVcEnpp}L#qVfh5IrKGt+gcf?P6X9ChqMp2h*{!jnvtaCdpz+Zz`g zks#^gQ&#ugVo7p6Z&c5w=>LHy9G$Cgdj%LGV&nY@xWM7&9a5ym>BgOvP5`bjlBCar zVnSYWRC^ElYbBf3kNirekRJ)!7bS>mQ-loss~-5(JP=$P>2wlxv_!fgBpy0}KBgx= zFY&LuMNer8N)t}zusH;5`#iF#To53BSJTH@LVEBKW~OCXi7Z0+o5kuYy&OES?P%4T z18EQe(%6gjOfF>cjM2#^{yFjxQ<2fppzQ@SB}JLg#@Lq*#RcZy+S)a-vNR;Q3NU2@ z_8MtpX7sd~zfHr*^=6{pEN1=Us87ehYq^4Yu2`ZIUwm|s>0R*_SX?S>NGhKLcRDC+ zG3=GLU&~W>ya~~dg<%1SP6*W|KEC!;Y1|WkM=XWcMBnVzP2>SocRK$ME+??RxbY{^ zl!k~_7@wuk$pEvZR-!tNK8Rty0!S9U#(N$X6u!W0P!Sa!n=QS9H1X_kKzwkT8FcW-cNxq%pj zIENdypTB{bd_a$U8bKdG&PN{|sc}-&^MD2D2Aq|v+U-w>5<0YJ5Z@(1P15QbTqMPePHAMnrA z;eWFMmLvd8$d@(2=M^k7EdgtekWo`WosG>YrZAvg){%8u$Y2dXcg4bxn((hc$3-Vly4(_a(?@Fv;udsmoZoEbVvrT=(x}mdF}I20)IIkSKxCewWs1wP_1= z7x|MyhT0ORT%d{4ON>MWwvp-#mbBC=2w7C4Z4F9hIYik35Djo^U3PutJYd7k; zeFK4yu-V`Db`KBV?CyP}nNynun@;nCg&t^?7$3L;-qCf67a(c&^tAC(Hf0~)U!&`V z*zNfn=1~IQfcYjJ(#2pynSA38E8EZ;-c{$&&d81uXD20En*RkcQx6h>yo#c^O}>)7 zV~$xu3(i&<6_xhyIm7t(`|89jDulsnBaIxje>rscoX2y`cm(DW9Hke^PMB-no0bf9 zgB(mZ3u3*g(s}J1B~|MWY-Tqvu{Y6!)P_ui-W>$uu+@uLK_}q?{WZ+pD`!31n@WmZTlr_l}*(qMgk=e5ow2xXRG zZxuFRj?@CI63rYKV-Ts-p8DkzCy3Hmu)=_K>UXs5>Jqf|PV{h|wuO45BLbfc=(u65 z?SPKz1%>eJJwj{~UozkwFyIV}f@tR&Ls+UNI$Y!pa8jrsUMRE{Ni02M=+Iq07Yt!9D9aMkH*-ZF zz)KLFr!_98B-b>2&P|=cF%Imo%!7VOS!5hSB9$oglxEE}P*OvT&|K%Q~t?4Ls@AK%&)}Ia~Or(pQD`cd$@oy1MLPK?$ zC(`x@Zn+RE2vPY#o6g4AGqoInp#!U#qM>%2TnM%O<08!e1Z<6t_l=}f1_X{pjMzuz zqSblD5rrX$vtQ~|H+k+$DkUipH^U%V^pHG@v8Eud^S~*F8`Fv7fBM{dvw!j()?mA5 zr@`af{k`|C-NWyv`^SN^>G;2&9DP0(cfR8v@1C9QpL{wE&L0PtLuz%fSt&Oj>kpdIJi2Uc5pQ;x}3Jbmol+?3Tu;}{l2`w38z}{OI`3wUGT+pdpmix ztaw*FQk8g1YH9m>pHEKqKka?}e)_cq)8>W$cK2-m?0swB^hN9F)7iVg`H&2!$@qTd zph(Aj(MrZyZ)Nv-eA%b#`;`yVVL|`;_ba>8F0E24r?m4FaPe9>%5F#a{Y0ENC%i2( zzHsb7K8@3NM<-{dI#h*PP=~4k6`*_+j$%7rB;w@4L-vQQ8T!RvSvua(}|Z5_9WFr3{MQOa@4Y5RjB zznl&Nr`2k$=0k5(?#i%0#h*h znnDlG*CHLTu*+&?bBLa488>1zQnw{{4&8cum%6dzvY1%*I2RgWoQ1Bal=Et|?a1v` zJer23@c)O#kYW*EoCcQOKd}n

w&S^Kii&nen|UlL)A}W4-zy&2*$q6)gAv2hgGk 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 literal 38454 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%0A8}ByYXXRc>IsdK3`bfEy79b$2pL(|j_i6uwdu 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","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","Parser.ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","xlinkHref","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","weekParser","isoWeek","week","addDays","numberInputType","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","inputDirective","NgModelController","$modelValue","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngEventDirectives","ngIfDirective","$transclude","previousElements","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","ngIncludeFillContentDirective","$compile","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$attrs","scriptDirective","ngOptionsMinErr","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule","$$csp"] +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","prop","attr","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","publishExternalAPI","version","uppercase","angularModule","$LocaleProvider","ngModule","$$SanitizeUriProvider","$CompileProvider","directive","htmlAnchorDirective","inputDirective","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBindDirective","ngBindHtmlDirective","ngBindTemplateDirective","ngClassDirective","ngClassEvenDirective","ngClassOddDirective","ngCloakDirective","ngControllerDirective","ngFormDirective","ngHideDirective","ngIfDirective","ngIncludeDirective","ngInitDirective","ngNonBindableDirective","ngPluralizeDirective","ngRepeatDirective","ngShowDirective","ngStyleDirective","ngSwitchDirective","ngSwitchWhenDirective","ngSwitchDefaultDirective","ngOptionsDirective","ngTranscludeDirective","ngModelDirective","ngListDirective","ngChangeDirective","requiredDirective","ngValueDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$ExceptionHandlerProvider","$FilterProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$HttpBackendProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$SceProvider","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","fragment","createDocumentFragment","HTML_REGEXP","tmp","appendChild","createElement","TAG_NAME_REGEXP","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","removeChild","firstChild","lastChild","j","jj","childNodes","textContent","createTextNode","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","parentNode","host","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","$$rAF","$timeout","supported","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","on","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$document","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$cacheFactory","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","createBoundTranscludeFn","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","directiveName","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","childBoundTranscludeFn","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","setClass","writeAttr","booleanKey","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","CNTRL_REG","register","this.register","expression","identifier","exception","cause","parseHeaders","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","statusText","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","ActiveXObject","createHttpBackend","callbacks","$browserDefer","jsonpReq","script","doneWrapper","onreadystatechange","onload","onerror","body","script.onreadystatechange","readyState","script.onerror","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","urlResolve","protocol","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","simpleGetterFn1","simpleGetterFn2","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","createInternalRejectedPromise","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","id","timer","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","ChildScope","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","veryOldValue","trackVeryOldValue","changeDetected","objGetter","internalArray","internalObject","initRun","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","$on","this.$watch","expr","$$postDigest","namedListeners","$emit","listenerArgs","array1","currentScope","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","predicate","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","addNativeHtml5Validators","$parsers","validator","badInput","customError","typeMismatch","valueMissing","textInputType","composing","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","Object","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","_data","JQLite._data","optgroup","option","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","contentDocument","prepend","wrapNode","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$$asyncCallback","enter","leave","move","add","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ctrls","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBind","ngBindWatchAction","ngBindTemplate","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","$attrs","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] } diff --git a/awx/ui/static/lib/angular/bower.json b/awx/ui/static/lib/angular/bower.json index 12a0e4cf2b..917522cedc 100644 --- a/awx/ui/static/lib/angular/bower.json +++ b/awx/ui/static/lib/angular/bower.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.2.15-build.2398+sha.4bab3d8", + "version": "1.2.17-build.95+sha.3691454", "main": "./angular.js", "dependencies": { } diff --git a/bower.json b/bower.json index 9270696682..deec9cfd24 100644 --- a/bower.json +++ b/bower.json @@ -15,7 +15,7 @@ "angular-md5": "~0.1.7", "angular-resource": "~1.2.12", "angular-sanitize": "~1.2.12", - "angular-scheduler": "~0.0.13", + "angular-scheduler": "~0.0.14", "bootstrap": "~3.1.1", "components-font-awesome": "~4.0.3", "less.js": "~1.6.3",